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.一定要注意各文件间跳转路径的不同书写方式