这两天跟着老师做一个小作品,作品里面设置了登录功能和监听器功能,其中在登录功能中使用了监听器监听功能监听用户的登录,下面是Servlet中判断登录逻辑的一个方法:
private void login(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
// 1. 获取参数
String userName = request.getParameter("userName");
String pwd = request.getParameter("pwd");
// 封装
Admin admin = new Admin();
admin.setUserName(userName);
admin.setPwd(pwd);
try {
// 2. 调用service处理业务
Admin loginInfo = adminService.findByNameAndPwd(admin);
// 判断:
if (loginInfo == null) {
// 登陆失败
uri = "/login.jsp";
} else {
// 登陆成功
// 先,保存数据到session
request.getSession().setAttribute("loginInfo", loginInfo);
//【在线列表: 1. 先从servletContext中拿到在线列表集合; (onLineUserList)
// 2. 当前用户放入“在线列表集合中”】
// 实现1:先得到servletContext对象
ServletContext sc = getServletContext();
// 实现2: 再获取在线列表集合
List<Admin> onlineList = (List<Admin>) sc.getAttribute("onlineList");
// 判断
if (onlineList != null){
// 实现3: 添加当前登陆者
onlineList.add(loginInfo);
//sc.setAttribute("onlineList", onlineList); // 对象引用传递,不需要写也可以
}
// 再,跳转到首页显示servlet(/index)
uri = "/index";
}
} catch (Exception e) {
// 测试
e.printStackTrace();
// 错误
uri = "/error/error.jsp";
}
// 3. 跳转
request.getRequestDispatcher(uri).forward(request, response);
}
如果没有使用监听器在ServletContext里头设置onlinelist的话,Tomcat会报错如下:
十一月 19, 2017 10:09:14 上午 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/emp_sys] has started
十一月 19, 2017 10:09:14 上午 org.apache.catalina.loader.