javaweb登录注册功能是如何实现的 (javaweb登录入门)

#头条创作挑战赛#

9.4 用户登录注册案例

9.4.1 需求分析

需求说明:

  1. 完成用户登录功能,如果用户勾选“记住用户” ,则下次访问登录页面 自动 填充用户名密码
  2. 完成注册功能,并实现 验证码 功能

javaweb登录注册功能是如何实现的,javaweb注册登录功能实现

9.4.2 用户登录功能

  1. 需求:

javaweb登录注册功能是如何实现的,javaweb注册登录功能实现

  • 用户登录成功后,跳转到列表页面,并在页面上展示当前登录的用户名称
  • 用户登录失败后,跳转回登录页面,并在页面上展示对应的错误信息
  1. 实现流程分析

javaweb登录注册功能是如何实现的,javaweb注册登录功能实现

(1)前端通过表单发送请求和数据给Web层的LoginServlet

(2)在LoginServlet中接收请求和数据[用户名和密码]

(3)LoginServlet接收到请求和数据后,调用Service层完成根据用户名和密码查询用户对象

(4)在Service层需要编写UserService类,在类中实现login方法,方法中调用Dao层的UserMapper

(5)在UserMapper接口中,声明一个根据用户名和密码查询用户信息的方法

(6)Dao层把数据查询出来以后,将返回数据封装到User对象,将对象交给Service层

(7)Service层将数据返回给Web层

(8)Web层获取到User对象后,判断User对象,如果为Null,则将错误信息响应给登录页面,如果不为Null,则跳转到列表页面,并把当前登录用户的信息存入Session携带到列表页面。

  1. 具体实现

(1)完成Dao层的代码编写

(1.1)将 04-资料\1. 登录注册案例\2. MyBatis环境\UserMapper.java 放到com.itheima.mapper`包下:

 public interface UserMapper {
     /**
      * 根据用户名和密码查询用户对象
      * @param username
      * @param password
      * @return
      */
     @Select("select * from tb_user where username = #{username} and password = #{password}")
     User select(@Param("username") String username,@Param("password")  String password);
 
     /**
      * 根据用户名查询用户对象
      * @param username
      * @return
      */
     @Select("select * from tb_user where username = #{username}")
     User selectByUsername(String username);
 
     /**
      * 添加用户
      * @param user
      */
     @Insert("insert into tb_user values(null,#{username},#{password})")
     void add(User user);
 }

(1.2)将 04-资料\1. 登录注册案例\2. MyBatis环境\User.java 放到 com.itheima.pojo 包下:

 public class User {
 
     private Integer id;
     private String username;
     private String password;
 
     public Integer getId() {
         return id;
     }
 
     public void setId(Integer id) {
         this.id = id;
     }
 
     public String getUsername() {
         return username;
     }
 
     public void setUsername(String username) {
         this.username = username;
     }
 
     public String getPassword() {
         return password;
     }
 
     public void setPassword(String password) {
         this.password = password;
     }
 
     @Override
     public String toString() {
         return "User{" +
                 "id=" + id +
                 ", username='" + username + '\'' +
                 ", password='" + password + '\'' +
                 '}';
     }
 }

(1.3)将 04-资料\1. 登录注册案例\2. MyBatis环境\UserMapper.xml 放入到resources/com/itheima/mapper`目录下:

 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.itheima.mapper.UserMapper">
 
 </mapper>

(2)完成Service层的代码编写

(2.1)在 com.itheima.service 包下,创建UserService类

 public class UserService {
     //1.使用工具类获取SqlSessionFactory
     SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();
     /**
      * 登录方法
      * @param username
      * @param password
      * @return
      */
     public User login(String username,String password){
         //2. 获取SqlSession
         SqlSession sqlSession = factory.openSession();
         //3. 获取UserMapper
         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
         //4. 调用方法
         User user = mapper.select(username, password);
         //释放资源
         sqlSession.close();
 
         return  user;
     }
 }

(3)完成页面和Web层的代码编写

(3.1)将 04-资料\1. 登录注册案例\1. 静态页面 拷贝到项目的 webapp 目录下:

javaweb登录注册功能是如何实现的,javaweb注册登录功能实现

(3.2)将login.html内容修改成login.jsp

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <!DOCTYPE html>
 <html lang="en">
 
 <head>
     <meta charset="UTF-8">
     <title>login</title>
     <link href="css/login.css" rel="stylesheet">
 </head>
 
 <body>
 <div id="loginDiv" style="height: 350px">
     <form action="/brand-demo/loginServlet" method="post" id="form">
         <h1 id="loginMsg">LOGIN IN</h1>
         <div id="errorMsg">用户名或密码不正确</div>
         <p>Username:<input id="username" name="username" type="text"></p>
         <p>Password:<input id="password" name="password" type="password"></p>
         <p>Remember:<input id="remember" name="remember" type="checkbox"></p>
         <div id="subDiv">
             <input type="submit" class="button" value="login up">
             <input type="reset" class="button" value="reset">   
             <a href="register.html">没有账号?</a>
         </div>
     </form>
 </div>
 </body>
 </html>

(3.3)创建LoginServlet类

 @WebServlet("/loginServlet")
 public class LoginServlet extends HttpServlet {
     private UserService service = new UserService();
 
     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         //1. 获取用户名和密码
         String username = request.getParameter("username");
         String password = request.getParameter("password");
    
         //2. 调用service查询
         User user = service.login(username, password);
 
         //3. 判断
         if(user != null){
             //登录成功,跳转到查询所有的BrandServlet
             
             //将登陆成功后的user对象,存储到session
             HttpSession session = request.getSession();
             session.setAttribute("user",user);
             
             String contextPath = request.getContextPath();
             response.sendRedirect(contextPath+"/selectAllServlet");
         }else {
             // 登录失败,
             // 存储错误信息到request
             request.setAttribute("login_msg","用户名或密码错误");
             // 跳转到login.jsp
             request.getRequestDispatcher("/login.jsp").forward(request,response);
 
         }
     }
 
     @Override
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         this.doGet(request, response);
     }
 }

(3.4)在brand.jsp中 <body>标签下添加欢迎当前用户的提示信息:

 <h1>${user.username},欢迎您</h1>

(3.5) 修改login.jsp,将错误信息使用EL表达式来获取

 修改前内容:<div id="errorMsg">用户名或密码不正确</div>
 修改后内容: <div id="errorMsg">${login_msg}</div>

(4)启动,访问测试

(4.1) 进入登录页面,输入错误的用户名或密码

javaweb登录注册功能是如何实现的,javaweb注册登录功能实现

(4.2)输入正确的用户和密码信息

javaweb登录注册功能是如何实现的,javaweb注册登录功能实现

小结

  • 在LoginServlet中,将登录成功的用户数据存入session中,方法在列表页面中获取当前登录用户信息进行展示
  • 在LoginServlet中,将登录失败的错误信息存入到request中,如果存入到session中就会出现这次会话的所有请求都有登录失败的错误信息,这个是不需要的,所以不用存入到session中