JAVA实现网页的登录与注册2.0版
导入1.0版本的项目Java实现网页版登录注册系统-Java文档类资源-CSDN文库可参考【JAVA】网页版登录注册系统_Lx_Hy_的博客-CSDN博客
1.0版本项目目录 2.0版本目录


1、在UserService中添加登录功能中调用数据库查询部分的方法
- //登录功能
- public User login(String username, String password) {
- //获取SqlSession
- SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
- //获取UserMapper
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- //调用方法
- User user = mapper.selectByConditionSingle_Log(username, password);
- //释放资源
- sqlSession.close();
- return user;
- }
2、使用cookie-session技术优化LoginServlrt中的代码并且实现了客户端保存登录密码的功能 (可参考【JAVA】会话跟踪技术_Lx_Hy_的博客-CSDN博客)
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //获取用户名和密码
- String username = request.getParameter("username");
- String password = request.getParameter("password");
-
- //获取复选框数据
- String remember = request.getParameter("remember");
-
- //调用service
- User user = service.login(username, password);
- //判断
- if(user!=null){
- //登录成功,跳转到查询信息
- //登录成功后的user对象,存储到session
- //判断用户是否勾选记住我
- if ("1".equals(remember)){
- //勾选
- //创建Cookie对象
- Cookie c_username=new Cookie("username",username);
- Cookie c_password=new Cookie("password",password);
- //设置Cookie存活时间
- c_username.setMaxAge(60*60);
- c_password.setMaxAge(60*60);
- //发送
- response.addCookie(c_username);
- response.addCookie(c_password);
- }
- HttpSession session = request.getSession();
- session.setAttribute("user",user);
-
- String contextPath = request.getContextPath();
- response.sendRedirect(contextPath+"/success.jsp");
- }else {
- //登陆失败,跳转到login.jsp
- //错误信息存储到request
- request.setAttribute("login_msg","用户名或密码错误");
- //跳转到login.jsp
- request.getRequestDispatcher("/login.jsp").forward(request,response);
-
- }
3、在login.jsp中改变用户名和密码的value可使用cookie技术保存的用户名和密码
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%--页首插入这句--%>
- <%@page isELIgnored="false" %>
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <title>logintitle>
- <link href="css/login.css" rel="stylesheet">
- head>
-
- <body>
- <div id="loginDiv" style="height: 350px">
- <form action="/WebServer2/loginServlet" id="form">
- <h1 id="loginMsg">LOGIN INh1>
- <div id="errorMsg">${login_msg} ${register_msg}div>
- <p>Username:<input id="username" name="username" value="${cookie.username.value}" type="text">p>
-
- <p>Password:<input id="password" name="password" value="${cookie.password.value}" type="password">p>
- <p>Remember:<input id="remember" name="remember" value="1" type="checkbox">p>
- <div id="subDiv">
- <input type="submit" class="button" value="login up">
- <a href="register.jsp">没有账号?a>
- div>
- form>
- div>
-
- body>
- html>
1、在UserService中添加注册功能中调用数据库查询及添加部分的方法
- //注册功能
- public boolean register(User user) {
- //获取SqlSession
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //获取UserMapper
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- //判断用户是否存在
- User u = mapper.selectByUsername(user.getUsername());
- //调用方法
- if (u == null) {
- //用户名不存在
- mapper.add(user);
- sqlSession.commit();
- }
- sqlSession.close();
- return u == null;
- }
2、使用cookie-session技术优化RegisterServlrt中的代码(可参考【JAVA】会话跟踪技术_Lx_Hy_的博客-CSDN博客)
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //获取用户名和密码的数据
- String username = request.getParameter("username");
- boolean flag1 = service.checkUsername(username);
- String password = request.getParameter("password");
- //用户的封装
- User user = new User();
- user.setUsername(username);
- user.setPassword(password);
- //获取用户输入的验证码
- String checkCode = request.getParameter("checkCode");
- //程序输入的验证码
- HttpSession session = request.getSession();
- String checkCodeGen = (String) session.getAttribute("checkCodeGen");
-
- //比对验证码
- if (!checkCodeGen.equalsIgnoreCase(checkCode)) {
- //不允许注册
- request.setAttribute("register_msg", "验证码错误");
- request.getRequestDispatcher("/register.jsp").forward(request, response);
- return;
- }
- //调用service注册
- boolean flag = service.register(user);
- //判断是否注册成功
- if (flag) {
- //注册成功,跳转登陆页面
- request.setAttribute("register_msg", "注册成功,请登录");
- request.getRequestDispatcher("/login.jsp").forward(request, response);
- } else {
- //注册失败,跳转注册页面
- //request.setAttribute("register_msg","用户名已存在");
- request.getRequestDispatcher("/register.jsp").forward(request, response);
- }
- }
(用户在输入完用户名之后实时查询用户名是否存在)
1、在UserService中添加注册功能中调用数据库查询部分的方法
- //注册检查功能
- public boolean checkUsername(String username){
- //获取SqlSession
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //获取UserMapper
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- //判断用户是否存在
- User u = mapper.selectByUsername(username);
- //判断
- if(u==null){
- return false;
- }
- return true;
- }
2、使用Request&Response技术实现SelectUserServlet中的代码(可参考【JAVA】Request&Response_Lx_Hy_的博客-CSDN博客)
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- String username = request.getParameter("username");
- boolean flag1 = service.checkUsername(username);
- if (flag1) {
- request.setAttribute("register_msg", "用户名已存在");
- }
- response.getWriter().write("" + flag1);
- }
3、在register.jsp使用axios技术在用户名输入框失去焦点事件时就进行用户名的重复判断(可参考【JAVA】AJAX&JSON_Lx_Hy_的博客-CSDN博客)
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%--页首插入这句--%>
- <%@page isELIgnored="false" %>
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>欢迎注册title>
- <link href="css/register.css" rel="stylesheet">
- head>
- <body>
-
- <div class="form-div">
- <div class="reg-content">
- <h1>欢迎注册h1>
- <span>已有帐号?span> <a href="login.html">登录a>
- div>
- <form id="reg-form" action="/WebServer2/selectUserServlet" method="post">
- <table>
- <tr>
- <td>用户名td>
- <td class="inputs">
- <input name="username" type="text" id="username">
- <br>
- <span id="username_err" class="err_msg" style="display: none">用户名已存在span>
- td>
-
- tr>
-
- <tr>
- <td>密码td>
- <td class="inputs">
- <input name="password" type="password" id="password">
- <br>
- <span id="password_err" class="err_msg" style="display: none">密码格式有误span>
- td>
- tr>
-
-
- <tr>
- <td>验证码td>
- <td class="inputs">
- <input name="checkCode" type="text" id="checkCode">
- <img id="checkCodeImg" src="/WebServer2/checkCodeServlet">
- <a href="#" id="changeImg">看不清?a>
- td>
- tr>
-
- table>
-
- <div class="buttons">
- <input value="注 册" type="submit" id="reg_btn">
- div>
- <br class="clear">
- form>
- div>
- <script src="js/axios-0.18.0.js">script>
- <script>
- //给用户名输入框绑定 失去焦点事件
- document.getElementById("username").onblur = function () {
- //发送ajax请求
- let username = this.value;
- axios({
- method: "get",
- url: "http://localhost:8080/WebServer2/selectUserServlet?username="+ username,
- }).then(function (resp) {
- if(resp.data===true){
- //用户名存在,显示提示信息
- document.getElementById("username_err").style.display = '';
- } else {
- //用户名不存在,清除提示信息
- document.getElementById("username_err").style.display = 'none';
- }
- })
- }
- script>
- <script>
- //点击看不清按钮
- document.getElementById("changeImg").onclick = function () {
- document.getElementById("checkCodeImg").src = "/WebServer2/checkCodeServlet?" + new Date().getMilliseconds();
- }
- script>
- body>
- html>
1、利用CheckCodeUtil工具生成验证码(完整的工具包在资源中)
- /**
- * 生成随机验证码文件,并返回验证码值 (生成图片形式,用的较少)
- *
- * @param width 图片宽度
- * @param height 图片高度
- * @param os 输出流
- * @param verifySize 数据长度
- * @return 验证码数据
- * @throws IOException
- */
- public static String outputVerifyImage(int width, int height, File os, int verifySize) throws IOException {
- String verifyCode = generateVerifyCode(verifySize);
- outputImage(width, height, os, verifyCode);
- return verifyCode;
- }
2、在CheckCodeServlet中利用response和session生成并将验证码存入session
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //生成验证码
- ServletOutputStream os = response.getOutputStream();
- String checkCode = CheckCodeUtil.outputVerifyImage(100, 50, os, 4);
- //存入Session
- HttpSession session=request.getSession();
- session.setAttribute("checkCodeGen",checkCode);
- }
【效果】

(在未登录注册之前,不能对系统进行任何操作)
1、使用过滤器Filter对可访问页面进行过滤(可参考【JAVA】Filter&Listener_Lx_Hy_的博客-CSDN博客),只保留与登录注册相关的文件可以访问
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
- HttpServletRequest req = (HttpServletRequest) request;
- //判断访问的资源是否和登陆注册相关
- String[] urls = {"/login.jsp", "/imgs/", "/css/", "/loginServlet", "/register.jsp", "/registerServlet", "/checkCodeServlet","/selectUserServlet"};
- //获取当前访问的资源路径
- String url = req.getRequestURL().toString();
- //循环判断
- for (String u : urls) {
- if(url.contains(u)){
- //找到了
- //放行
- chain.doFilter(request, response);
- //没找到
- return;
- }
- }
- //判断session中是否有user
- HttpSession session = req.getSession();
- Object user = session.getAttribute("user");
- //判断user是否为null
- if (user != null) {
- //登陆过了
- //放行
- chain.doFilter(request, response);
- } else {
- //没有登录
- //req.setAttribute("login_msg", "您尚未登录");
- req.getRequestDispatcher("/login.jsp").forward(request, response);
- }
- }
以上就是JAVA实现网页的登录与注册的全部内容,如有问题,可以私信讨论,感谢阅读!