JSP&Servlet完成登錄頁面
先給出項目文件結構,方面理解後面路徑的寫法
1.web.xml代碼
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/servlet/LoginServlet</url-pattern>
<!-- 注意:這裏servlet文件的地址前要加上 / 號!!!-->
</servlet-mapping>
<!-- 更改默認的首頁地址,用welcome-file-list-->
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.login.js代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<%-- 注意:jsp跳轉到servlet時,servlet文件的地址要和web.xml中的url-pattern地址相同--%>
<%-- 但是前面沒有 / 號--%>
<form action="servlet/LoginServlet" method="post">
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="login"></td>
</tr>
</table>
</form>
</body>
</html>
3.LoginServlet.java代碼
(這裏用戶名和密碼都直接寫死在servlet中了)
package servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if("Tom".equals(username)&&"12345678".equals(password)){
request.getRequestDispatcher("/LoginSucc.jsp").forward(request,response);
}
else{
request.getRequestDispatcher("/LoginFailed.jsp").forward(request,response);
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
4.LoginSucc.jsp代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login successfully</title>
</head>
<body>
<%
String username = request.getParameter("username");
%>
<div>
<p>Login successfully! Welcome back,<%=username%>.</p>
</div>
</body>
</html>
5.LoginFailed.jsp代碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Login failed</title>
</head>
<body>
<p>Login failed! Please check your username or password and try again.</p>
<a href="../login.jsp">login page</a>
<%-- 法一: 注意,這裏地址最好回到上一級目錄,再找login.jsp。--%>
<%-- 因爲該頁面是由LoginServlet.java跳轉過來的,所以當前目錄是在servlet下面,但是jsp文件不在servlet下面,所以要返回上一級才找的到jsp--%>
<%-- 法二: <a href="/login.jsp">login page</a>--%>
<%-- 直接根目錄下找login.jsp--%>
</body>
</html>
上面的代碼是由純jsp完成登錄改過來的
具體有幾點改動以及寫代碼思路如下
1.總體思路:
寫首頁login.jsp——>寫LoginServlet.java處理首頁發過的數據,並且根據不同情況跳轉到登錄成功、失敗頁面——>寫LoginSucc.jsp,提示登錄成功,並且顯示當前用戶的用戶名——>寫LoginFailed.jsp,直接提示登錄錯誤,並且給一個首頁鏈接返回
2.將dologin.jsp中的代碼直接放到LoginServlet中,就不再用jsp腳本的方式了
3.增加了登錄成功頁面中,顯示用戶名的部分。採用jsp腳本獲取LoginServlet.java傳過來的數據,再使用jsp表達式顯示用戶名信息
4.利用welcome-file-lis將默認的首頁index.jsp,改爲了login.jsp
5.一定要注意各文件間跳轉路徑的不同書寫方式