jsp+java servlet实现简单用户登录(使用数据库,包括注册页面)
功能介绍
前期工作准备
实现登录页面
创建数据库
三个页面处理
欢迎界面(LoginServlet.jsp)
验证码(index.jsp)
登录处理页面(LoginCl.java(servlet))
欢迎界面(welcome.jsp)
实现注册页面
信息注册(register.jsp)
注册成功页面(registerMessage.jsp)
功能演示
总结
功能介绍
本项目通过使用jsp和servlet实现简单的用户登录。主要逻辑为:
如果用户不存在,则首先进行注册(注册信息同步到数据库中)。
进行注册后,可进入登录页面对账号进行登录。
如果账号存在,则正确跳转到欢迎界面,否则提示用户账号信息输入错误。
用户进行登录页面时需要填写验证码同时可勾选是否两周内免登陆。
用户进入欢迎界面,则会显示这是用户第几次登录,如果不是第一次登录则会显示上次登录时间。
如果用户直接进入welcome,(没有进行登录,直接打开welcome.jsp)则会跳转到登录页面,防止非法登录。
前期工作准备
1.安装了Tomcat并可以成功使用。
2.由于需要与数据库连接,本项目使用的是mysql数据库,需要引入
mysql-connector-java-5.1.9.jar包(可在官方下载或者通过maven引入mysql依赖),需要注意mysql-connector-java-5.1.9.jar需要放在C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext路径下,否则会出现连接数据库异常。
引入maven依赖:
三个页面处理
欢迎界面(LoginServlet.jsp)
1.代码
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
密码:
两周内免登陆
验证码: <%--点击图片可进行验证码刷新--%>
<%--注意此处的button和submit的区别--%> <% String username = null; String password = null; Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { if ("username".equals(cookies[i].getName())) { username = cookies[i].getValue(); } else if ("password".equals(cookies[i].getName())) { password = cookies[i].getValue(); } } if (username != null && password != null) { response.sendRedirect("welcome.jsp?uname=" + username + "&password=" + password); } %>
2.页面如下:
在这里插入图片描述
验证码(index.jsp)
(点击验证码可以实现更新验证码)
<%@ page contentType=“charset=UTF-8” language=“java”
import =“java.awt."
import =“java.awt.image.BufferedImage”
import="java.util.”
import=“javax.imageio.ImageIO”
pageEncoding=“gb2312”%>
<%
response.setHeader(“Cache-Control”,“no-cache”);
//在内存中创建图像
int width=60,height=20;
BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics g=image.getGraphics();
//设置背景色
g.setColor(new Color(200,200,200));
g.fillRect(0,0,width,height);
//取随机产生的验证码(4位数字)
Random rnd=new Random();
int randNum=rnd.nextInt(8999)+1000;
String randStr=String.valueOf(randNum);
//将验证码存入session
session.setAttribute(“randStr”,randStr);
//将验证码显示到图像中
g.setColor(Color.black);
g.setFont(new Font("", Font.PLAIN,20));
g.drawString(randStr,10,17);
//随机产生100个干扰点,使图像中的验证码不易被其他程序探测到
for (int i = 0; i < 100; i++) {
int x=rnd.nextInt(width);
int y=rnd.nextInt(height);
g.drawOval(x,y,1,1);
}
//输出图像到页面
ImageIO.write(image,“JPEG”,response.getOutputStream());
out.clear();
out=pageContext.pushBody();
%>
在这里插入图片描述
登录处理页面(LoginCl.java(servlet))
业务逻辑处理页面
package Register;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.;
import java.io.IOException;
import java.sql.;
@WebServlet("/LoginCl")
public class LoginCl extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
//中文乱码解决方法
response.setContentType(“text/html;charset=gb2312”);
//防止非法登录 得到session
HttpSession httpSession=request.getSession(true);
//修改session的存在时间为20s
httpSession.setMaxInactiveInterval(20);
httpSession.setAttribute(“pass”,“ok”);
//获取用户名的账号和密码
String u=null;
//针对jsp 其username为username1
u=request.getParameter(“username1”);
String p=null;
p=request.getParameter(“passwd”);
//得到提交的验证码
String code = request.getParameter(“code”);
//获取session验证码
HttpSession session = request.getSession();
String randStr = (String) session.getAttribute(“randStr”);
response.setCharacterEncoding(“gb2312”);
//当账号信息和验证码输入正确时才可以访问
try {
//启动mysql驱动器
Class.forName(“com.mysql.jdbc.Driver”);
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”,“root”,“123456”);
String sql=“select * from usert where username=? and password=?”;
PreparedStatement preparedStatement = con.prepareStatement(sql);
preparedStatement.setString(1,u);
preparedStatement.setString(2,p);
ResultSet rs = preparedStatement.executeQuery();
if(!rs.next()){
response.getWriter().println(“抱歉:账号或密码错误,请注意核实信息重新输入”);
return;
}
else {
//获取到
if(code.equals(randStr)) {
String keep = request.getParameter(“keep”);
//勾选了两周内免登陆选项
if (keep != null) {
//创建cookie
Cookie cookie1 = new Cookie(“username”, u);
Cookie cookie2 = new Cookie(“password”, p);
//设置关联路径
cookie1.setPath(request.getContextPath());
cookie2.setPath(request.getContextPath());
//设置cookie的消亡时间 两周
cookie1.setMaxAge(2 * 7 * 24 * 60 * 60);
cookie1.setMaxAge(2 * 7 * 24 * 60 * 60);
//把cookie信息写给浏览器
response.addCookie(cookie1);
response.addCookie(cookie2);
}
//跳转到欢迎界面
response.sendRedirect(“welcome.jsp?uname=” + u + " &password=" + p);
}
rs.close();
preparedStatement.close();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
this.doGet(request,response);
}
}
如果当前不存在该用户,则会输出账号密码错误等信息,存在该用户则会跳转到欢迎界面。
欢迎界面(welcome.jsp)
<%@ page import=“java.util.Date” %>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” import=“bean.*”
%>
<jsp:useBean id=“user” class=“bean.User” scope=“session”>
<jsp:setProperty name=“user” property=“name” param=“uname”/>
<jsp:setProperty name=“user” property=“pd” param=“password”/>
</jsp:useBean>
主界面
<%--welcome name =<%=u%> password =<%=p%>--%> welcome name : password:
<%--这是你第:<%=counter%>次访问本网站!
--%> 这是你第: 次访问本网站!
返回重新登录
<% Cookie[] cookies = request.getCookies(); if(cookies!=null) { for (int i = 0; i < cookies.length; i++) { if (cookies[i].getName().equals("lastAccessTime")) { out.println("您上次访问的时间是:"); Long lastAccessTime = Long.parseLong(cookies[i].getValue()); Date date = new Date(lastAccessTime); out.println(date.toLocaleString()); } } } //用户访问过后重新设置用户的访问时间,存储在cookie中,然后发送到客户端浏览器 Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+""); //设置cookie的有效期为1min cookie.setMaxAge(60); //将cookie对象添加到response对象中,这样服务器在输出response对象中的内容时 // 就会把cookie也输入到客户端浏览器 response.addCookie(cookie); %>
实现注册页面
信息注册(register.jsp)
<%–
Created by IntelliJ IDEA.
User: Lenovo
Date: 2020/10/20
Time: 9:44
To change this template use File | Settings | File Templates.
–%>
<%@ page language=“java” pageEncoding=“gb2312” %>
欢迎您进行注册
请输入账号:请输入密码(要求:必须包含大小写英文和数字无非法字符,长度大于6位小于20位):
请选择性别:男 女
请选择家乡: 北京 上海 陕西
请选择您的爱好:唱歌 跳舞 打球 玩游戏
在这里插入图片描述
点击注册后则会跳转到注册成功页面,将其账号和密码进行存储到数据库中,后可以直接进行登录。
注册成功页面(registerMessage.jsp)
<%@ page language=“java” pageEncoding=“gb2312” %>
信息注册成功!该用户注册信息如下:
<% request.setCharacterEncoding("gb2312"); String name=request.getParameter("name"); String password=request.getParameter("password1"); String sex = request.getParameter("sex"); String home = request.getParameter("home"); out.println("账号:"+name); out.println("密码:"+password); out.println("性别:"+sex); out.println("家乡:"+home); out.println("兴趣爱好:"); String[] fav = request.getParameterValues("fav"); for (int i = 0; i < fav.length; i++) { out.print(fav[i]+" "); }try {
Class.forName("com.mysql.jdbc.Driver");
Connection con= null;
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
PreparedStatement preparedStatement = con.prepareStatement("insert into usert values(?,?)");
preparedStatement.setString(1,name);
preparedStatement.setString(2,password);
preparedStatement.executeUpdate();
out.println("<a href=LoginServlet.jsp>信息注册成功,点击此处进行登录</a>");
} catch (SQLException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
%>