1. 本章任务
上一篇已经完成了后台管理页面布局和样式。本篇来实现点击登录后显示用户信息,并且将登录用户的信息记录下来,以便在管理后台页面右上角显示登录用户的名字。
2. 点击登录后记录用户信息
Java Web项目支持使用Session保存用户信息,Session是非常神奇的,它标志着会话。
也就是说每个用户和Servlet之前都是唯一的Session,它能区分不同的用户与服务端的会话。一般直到浏览器关闭,Session才会销毁。所以特别适合用来保存用户信息。
好的,我们修改下LoginServlet
,等用户登录成功后,将用户信息保存到Session中,代码如下:
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);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
// 根据用户角色显示不同内容
} catch (Exception e) {
// 跳转到错误提示页面,并提示相应错误信息
tipInfo = e.getMessage();
page = "index.jsp";
}
request.setAttribute("tipInfo", tipInfo);// 设置同手信息
request.getRequestDispatcher("/" + page).forward(request, response);// 跳转到page页面
}
解释下:
- 登录成功后,user对象中包含登录成功的用户对象,将其以loginUser为名字保存到Session中。这样在会话过程中,随时可以从Session中取出当前用户信息。
- 如果登录成功,则令
page="index.jsp";
,即跳转管理后台页面。
3. 构造测试用户对象
由于服务类中检查登录方法并未真正访问数据库,所以此时我们直接模拟返回一个从用户信息,便于测试。修改LoginService代码如下:
public User checkLogin(String userName, String userPassword) throws Exception {
if (userName.equals("") || userPassword.equals("")) {
// 抛出输入信息异常
throw new Exception("用户名和密码不能为空");
}
User user = null;
try {
// 从数据库中执行查询,此处暂时用一个固定对象代替
user = new User();
user.setUserId(1);
user.setUserName("猫哥");
user.setUserPassword("1234");
user.setUserRole("student");// 学生
} catch (Exception e) {
// 抛出数据库异常
throw new Exception("数据库操作异常:" + e.getMessage());
}
return user;// 返回查询结果
}
此时随意输入用户名,密码点击登录,即可进入index.jsp页面。
4. 显示登录用户信息
既然用户信息已经放到名为loginUser的Session中,我们可以在jsp页面中直接取出其userName属性并显示。
修改index.jsp页面如下:
<div id="top">
<!-- 标题部分 -->
<div id="top_title">猫哥培训班作业管理系统</div>
<!-- 登录用户信息部分 -->
<div id="top_info">欢迎您,尊敬的:${loginUser.userName}</div>
</div>
5. 测试
登录后效果如下,大功告成!