3分钟
任务 3 创建Servlet
任务目标
创建cn.test.servlet包,创建处理验证码生成和处理登录逻辑的Servlet。
任务步骤
1.创建servlet包
创建cn.test.servlet包,这个包专门存放Servlet相关类,选中包路径右键【New】选择【Servlet】。
2.创建验证码生成Servlet
为Servlet命名为DoValidateCodeServlet,并输入如下代码,此Servlet的主要作用是调用工具类生成验证码字符串,并把字符串存放到session作用域,并返回图片验证码的输出流给前端页面,这里需要关注一下@WebServlet,该注解的值会在之后的步骤用于前端页面的请求。
package cn.test.servlet;
import java.io.IOException;
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 javax.servlet.http.HttpSession;
import cn.test.util.ValidateCode;
/**
* Servlet implementation class DoValidateCodeServlet
*/
@WebServlet("/DoValidateCodeServlet")
public class DoValidateCodeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DoValidateCodeServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应的类型格式为图片格式
response.setContentType("image/jpeg");
//禁止图像缓存。
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
HttpSession session = request.getSession();
ValidateCode vCode = new ValidateCode(120,40,5,100);
session.setAttribute("code", vCode.getCode()); //验证码生成之后存到code中
vCode.write(response.getOutputStream());
}
}
3.创建登录处理Servlet
创建一个名为DoLoginServlet的Servlet,专门用来处理登录相关的业务逻辑,该Servlet首先会从session中获取正确的验证码字符串,并比对用户从前端页面JSP传上来的验证码,如果相等才继续执行登录相关逻辑,因为不涉及数据库,所以本教程就默认用户名是admin,密码是123表示登录成功。
package cn.test.servlet;
import java.io.IOException;
import java.io.PrintWriter;
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 javax.servlet.http.HttpSession;
/**
* Servlet implementation class DoLoginServlet
*/
@WebServlet("/DoLoginServlet")
public class DoLoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DoLoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
String code = request.getParameter("code");
String yanzhengma = (String) session.getAttribute("code");
if (yanzhengma.equals(code)) {//如果验证码正确
String account = request.getParameter("account");
String password = request.getParameter("password");
System.out.println(account+" "+password);
if("admin".equals(account) && "123".equals(password)) {
response.sendRedirect("../testweb/haveLogin.jsp");//已登录页面
}else {
response.sendRedirect("../testweb/index.jsp");//登录失败返回首页
}
}else {
response.sendRedirect("../testweb/index.jsp");//登录失败返回首页
}
}
}
学员评价