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.3.2、用户自动(基于cookie)


1.3.3、注销


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:链接

浙公网安备 33010602011771号