javaWeb课程实验3---JSPServlet及javabean实现简单登录注册(带验证码及自动登录)

前言

这是javaWeb课程学习的第三个实验,使用servlet实现登录注册,以及带验证码自动登录功能

实验内容

1、理解Servlet的工作原理;
2、掌握javabean在web程序中的应用;
3、掌握基于Servlet的MVC模式;

项目涉及技术

语言:html,css,javascript,java
知识点:jsp,servlet,javabean,cookie

项目内容

1.2、实现功能
  • 1.2.1、登录(带验证码)
    servlet实现登录功能带验证码
  • 1.2.2、用户自动登录(基于cookie)
    servlet使用添加cookie到客户端浏览器
  • 1.2.3、用户注销
    客户端浏览器清除cookie
1.3、效果展示

1.3.1、登录(带验证码)
1
2
1.3.2、用户自动(基于cookie)

3

4

1.3.3、注销
1

6

1.4、核心代码

代码已上传GitHub:链接
前端部分代码参考前一个实验:链接

  • 1.4.1、javaBean 用户类
package com.hb.bean;
public class User {
private String name;
private String pwd;
public String getName() {
return this.name;
}
public void setName(String name)
{
this.name=name;
}
public String getPwd()
{
return this.pwd;
}
public void setPwd(String pwd)
{
this.pwd = pwd;
}
}

  • 1.4.2、servlet 登录验证
package com.hb.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hb.bean.User;
import com.hb.service.UserCheck;

/**
 * Servlet implementation class LoginCheckServlet
 */
@WebServlet("/LoginCheckServlet")
public class LoginCheckServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public LoginCheckServlet() {
        super();
    
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		String name = request.getParameter("userName");
		String pwd = request.getParameter("password");
		String rememberMe = request.getParameter("rememberMe");
		String verifyCode = request.getParameter("verifyCode");
		User user = new User();
		user.setName(name);
		user.setPwd(pwd);
		
		UserCheck uc = new UserCheck();
		//验证码效验
		String checkCode = (String) request.getSession(true).getAttribute("verifyCode");
		if(checkCode!=null&&checkCode.equalsIgnoreCase(verifyCode))	
			if(uc.validate(user))
			{
				request.setAttribute("user", user);
				request.setAttribute("rememberMe", rememberMe);
				RequestDispatcher dis = request.getRequestDispatcher("loginSuccess.jsp");
				
				if(rememberMe!=null&&rememberMe.equals("on"))
				{
					//记住登录状态自动登录利用cookies
					 //记住登录状态
	                Cookie cookie1 = new Cookie("userName", user.getName());
					cookie1.setMaxAge(7*24*60*60);
					response.addCookie(cookie1);
	
	                Cookie cookie2 = new Cookie("password", user.getPwd());
					cookie2.setMaxAge(7*24*60*60);
					response.addCookie(cookie2);
					request.setAttribute("message", "已记录登录状态");
					
				}
				else
					request.setAttribute("message", "登录成功");
					dis.forward(request, response);
			}
			else
			{
				request.setAttribute("message", "信息有误");
				request.getRequestDispatcher("login.jsp").forward(request, response);;
			}
		else
		{
			request.setAttribute("message", "验证码错误");
			request.getRequestDispatcher("login.jsp").forward(request, response);;
		}
				
	}

}

  • 1.4.3、servlet 验证码
package com.hb.servlet;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
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 com.hb.util.VerifyCode;

@WebServlet("/getVerifyCode")
public class getVerifyCode extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public getVerifyCode() {
        super();
  
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		doPost(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			 
            int width=200;
            int height=69;
            BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            //生成对应宽高的初始图片
			String randomText = VerifyCode.drawRandomText(width,height,verifyImg);
			//单独的一个类方法,出于代码复用考虑,进行了封装。
			//功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符                   
			request.getSession().setAttribute("verifyCode", randomText);
			response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别
			OutputStream os = response.getOutputStream(); //获取文件输出流    
			ImageIO.write(verifyImg,"png",os);//输出图片流
			os.flush();
			os.close();//关闭流

   } catch (IOException e) {

				
				e.printStackTrace();

   			}

	}

}

完整代码请看github:链接

posted @ 2020-11-02 09:09  rightstar  阅读(432)  评论(0)    收藏  举报