快捷搜索:  汽车  科技

用户登录超时javaweb怎么实现(JavaWeb19-8案例-用户登录功能)

用户登录超时javaweb怎么实现(JavaWeb19-8案例-用户登录功能)(7)Service层将数据返回给Web层(6)Dao层把数据查询出来以后,将返回数据封装到User对象,将对象交给Service层(3)LoginServlet接收到请求和数据后,调用Service层完成根据用户名和密码查询用户对象(4)在Service层需要编写UserService类,在类中实现login方法,方法中调用Dao层的UserMapper(5)在UserMapper接口中,声明一个根据用户名和密码查询用户信息的方法

#头条创作挑战赛#

9.4 用户登录注册案例9.4.1 需求分析

需求说明:

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

用户登录超时javaweb怎么实现(JavaWeb19-8案例-用户登录功能)(1)

9.4.2 用户登录功能
  1. 需求:

用户登录超时javaweb怎么实现(JavaWeb19-8案例-用户登录功能)(2)

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

用户登录超时javaweb怎么实现(JavaWeb19-8案例-用户登录功能)(3)

(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怎么实现(JavaWeb19-8案例-用户登录功能)(4)

(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怎么实现(JavaWeb19-8案例-用户登录功能)(5)

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

用户登录超时javaweb怎么实现(JavaWeb19-8案例-用户登录功能)(6)

小结

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



猜您喜欢: