前面我们的用户登录功能都是写在一个servlet中,servlet既要显示HTML页面,还要负责控制功能,这样子就显得代码复杂,而且也不能进行分工合作。
那么我们可以通过JSP页面来进行辅助,即JSP负责HTML页面的显示,servlet用来负责控制。
首先我们先对servlet进行配置
package cn.edu.mju.project1.controller;
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;
import java.io.PrintWriter;
@WebServlet("/login")
public class LoginController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("login.jsp").forward(req,resp);//将数据转发到login.jsp
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//login.jsp提交到这里
//进行控制,对其进行判断
String loginName=req.getParameter("loginName");
String loginPwd=req.getParameter("loginPwd");
String validCode = req.getParameter("validCode");
String saveCode = (String)req.getSession().getAttribute("code");
String str = null;
if(saveCode != null){
if(saveCode.equals(validCode)){
if("16".equals(loginName) && "1234".equals(loginPwd)){
str=loginName;
req.setAttribute("name",str);
req.getRequestDispatcher("main.jsp").forward(req,resp);//成功跳转到main.jsp页面
}else{
loginFail(req,resp,"账号或密码错误");
}
}else{
loginFail(req,resp,"验证码错误");
}
}else{
loginFail(req,resp,"请输入验证码");
}
}
private void loginFail(HttpServletRequest req, HttpServletResponse resp,String str) throws ServletException, IOException {
req.setAttribute("msg",str); //把错误信息通过req带过去
req.getRequestDispatcher("fail.jsp").forward(req,resp); //校验失败后跳转到fail.jsp
}
}
此时当我们访问客户端的时候就可以直接访问login这个servlet,servlet收到请求后会将数据转发到login.jsp
<%--
Created by IntelliJ IDEA.
User: Jeffrey
Date: 2020/4/18
Time: 17:47
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="./login" method="post"> <!--跳转到login-->
登录名称:<input type="text" name="loginName"><br>
登录密码:<input type="text" name="loginPwd"><br>
验证码:<input type="text" name="validCode"><img src="./captche"><br>
<input type="submit" value="登录">
<input type="reset" value="取消">
</form>
</body>
</html>
我们通过login.jsp来输入相关的信息,然后提交至login进行控制,在login的servlet中我们可以完成相应的判断实现成功页面以及失败页面的跳转。
这是成功页面的JSP代码:
<%--
Created by IntelliJ IDEA.
User: Jeffrey
Date: 2020/4/25
Time: 10:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
这是主界面,欢迎:<%=request.getAttribute("name")%>
</body>
</html>
这是失败的JSP代码:
<%--
Created by IntelliJ IDEA.
User: Jeffrey
Date: 2020/4/25
Time: 10:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
登陆失败,原因:<%=request.getAttribute("msg")%> 请重新<a href="login">登录</a> <!--失败后重新跳转到login-->
</body>
</html>
总结:通过这种模式来实现登录页面可以发现比较的简洁,不然一个servlet要实现所有的功能相对来说会比较复杂,并且容易出错。