3分钟

任务 3 创建Servlet

任务目标

创建cn.test.servlet包,创建处理验证码生成和处理登录逻辑的Servlet。

任务步骤

1.创建servlet包

创建cn.test.servlet包,这个包专门存放Servlet相关类,选中包路径右键【New】选择【Servlet】。

新建servlet

2.创建验证码生成Servlet

为Servlet命名为DoValidateCodeServlet,并输入如下代码,此Servlet的主要作用是调用工具类生成验证码字符串,并把字符串存放到session作用域,并返回图片验证码的输出流给前端页面,这里需要关注一下@WebServlet,该注解的值会在之后的步骤用于前端页面的请求。

验证码Servlet
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表示登录成功。

登录Servlet
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");//登录失败返回首页
  }
 }

}