JSP+Servlet培训班作业管理系统[10]--登录功能完整实现

简介: 本文目录1. 本章任务2. 用户访问登录页面3. LoginServlet调用LoginService验证登录信息4. LoginService调用UserDao验证用户信息5. 测试验证

1. 本章任务

之前的登录,没有真正的访问数据库,在上一章节我们已经实现了真实数据库的操作模块,所以本章就完整的实现下登录功能。


整体流程是:


用户访问登录页面login.jsp

输入用户名、密码后提交表单给LoginServlet

LoginServlet调用LoginService检查登录信息是否正确

LoginService调用UserDao访问数据库,拼装sql执行

登录成功后跳转后台页面index.jsp

2. 用户访问登录页面

登录页面login.jsp显示输入用户名、密码、提交按钮即可。


   <form id="mainForm" method="post" action="/HomeworkSystem/LoginServlet">

   请输入用户名:<input type="text" name="userName" />

   <br/>

   请输入密码:<input type="password" name="userPassword"/>

   <br/>

   <input type="submit" value="登录"/>

  </form>

1

2

3

4

5

6

7

3. LoginServlet调用LoginService验证登录信息

LoginServlet获取表单输入信息后,调用LoginService验证登录信息


 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 处理post请求

 // 设置输入输出格式、编码

 response.setContentType("text/html");

 request.setCharacterEncoding("utf-8");

 response.setCharacterEncoding("utf-8");

 // 获取用户在网页输入的用户名和密码

 String userName = request.getParameter("userName");

 String userPassword = request.getParameter("userPassword");


 LoginService lc = new LoginService();

 User user = null;

 String tipInfo = "";// 提示内容

 String page = "";// 跳转页面

 try {

  user = lc.checkLogin(userName, userPassword);

  if (user == null) {

   // 跳转到错误提示页面,并提示用户不存在

   tipInfo = "用户不存在";

   page = "tip.jsp";

  } else {

   // 登录成功,记录用户信息到Session,同时跳转管理后台页面

   request.getSession().setAttribute("loginUser", user);

   page = "index.jsp";

   // 设置菜单

   String[][] loginMenus = Constants.roleMenuMap.get(user.getUserRole());

   request.getSession().setAttribute("loginMenus", loginMenus);

  }

  // 根据用户角色显示不同内容

 } catch (Exception e) {

  // 跳转到错误提示页面,并提示相应错误信息

  tipInfo = e.getMessage();

  page = "tip.jsp";

 }

 request.setAttribute("tipInfo", tipInfo);// 设置同手信息

 request.getRequestDispatcher("/" + page).forward(request, response);// 跳转到page页面

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

4. LoginService调用UserDao验证用户信息

首先在UserDao内开发方法,通过用户名、密码获取用户信息。


/**

 * 通过用户名、密码获取用户

 */

public List<User> getUser(String name, String password) {

 Connection conn = null;

 PreparedStatement ps = null;

 ResultSet rs = null;

 List<User> users = new ArrayList<User>();

 try {

  conn = DbUtils.getConnection();

   String sql = "select * from user where user_name=? and user_password=?";

  ps = conn.prepareStatement(sql);

  ps.setString(1, name);

  ps.setString(2, password);

  rs = ps.executeQuery();

  while (rs.next()) {

   users.add(makeOneUser(rs));

  }

 } catch (SQLException e) {

 } finally {

  DbUtils.releaseConnection(rs, ps, conn);

 }

 return users;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

然后在LoginService内完善验证用户信息的方法。


public class LoginService {

public User checkLogin(String userName, String userPassword) throws Exception {

 if (userName.equals("") || userPassword.equals("")) {

  // 抛出输入信息异常

  throw new Exception("用户名和密码不能为空");

 }

 User user = null;

 try {

  UserDao userDao = new UserDao();

  List<User> list = userDao.getUser(userName, userPassword);

  if (list.size() == 1) {// 只有匹配出一个用户时,才是合法登录

   user = list.get(0);

  }

 } catch (Exception e) {

  // 抛出数据库异常

  throw new Exception("数据库操作异常:" + e.getMessage());

 }

 return user;// 返回查询结果

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

5. 测试验证

在数据内构造几条测试数:


INSERT INTO `homework`.`user`(`user_id`, `user_role`, `user_name`, `user_password`) VALUES (1, 'master', '赵校长', '123');

INSERT INTO `homework`.`user`(`user_id`, `user_role`, `user_name`, `user_password`) VALUES (2, 'teacher', '钱老师', '123');

INSERT INTO `homework`.`user`(`user_id`, `user_role`, `user_name`, `user_password`) VALUES (3, 'student', '孙学生', '123');



1

2

3

4

5

然后启动项目,以孙学生+123登录即可。


需要注意的是,登录后左侧的菜单是根据用户角色决定的,此处用户角色为student,所以根据Constants常量类配置,对应菜单为{ "页面1", "page1.jsp" }, { "页面2", "page2.jsp" }, { "不存在页面", "xxxx.jsp" }。


public class Constants {

// 用于保存角色及对应的菜单信息

public static HashMap<String, String[][]> roleMenuMap = new HashMap<String, String[][]>();

static { // 使用static代码块对roleMenuMap进行初始化

 // 注意,二位数组中的每一组表示一个菜单的信息,又通过map建立了角色名和菜单直接的对应关系

 roleMenuMap.put("student", new String[][] { { "页面1", "page1.jsp" }, { "页面2", "page2.jsp" }, { "不存在页面", "xxxx.jsp" } });

}

}

相关文章
|
Java 容器
【学习笔记】Jsp与Servlet技术
【学习笔记】Jsp与Servlet技术
288 0
|
SQL Java 数据库
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
该博客文章介绍了在JSP应用中使用Servlet查询SQL Server数据库的表信息,并通过JavaBean封装图书信息,将查询结果展示在Web页面上的方法。
jsp中使用Servlet查询SQLSERVER数据库中的表的信息,并且打印在屏幕上
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
161 1
|
供应链 前端开发 Java
服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】
该博客文章介绍了一个使用Mybatis、Layui、MVC和JSP技术栈开发的服装库存管理系统,包括注册登录、权限管理、用户和货号管理、库存管理等功能,并提供了源码下载链接。
服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】
|
供应链 前端开发 Java
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
这篇文章通过一个服装库存管理系统的实例,展示了在Spring Boot项目中使用Ajax、JSON、layui、MVC架构和iframe等技术,涵盖了注册登录、权限管理、用户管理、库存管理等功能,并提供了系统运行环境和技术要求的详细说明。
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
203 3
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
204 1
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
327 12
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
320 10
|
缓存 小程序 前端开发
Java服务器端技术探秘:Servlet与JSP的核心原理
【6月更文挑战第23天】Java Web开发中的Servlet和JSP详解:Servlet是服务器端的Java小程序,处理HTTP请求并响应。生命周期含初始化、服务和销毁。创建Servlet示例代码展示了`doGet()`方法的覆盖。JSP则侧重视图,动态HTML生成,通过JSP脚本元素、声明和表达式嵌入Java代码。Servlet常作为控制器,JSP处理视图,遵循MVC模式。优化策略涉及缓存、分页和安全措施。这些技术是Java服务器端开发的基础。
313 9