过滤器
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
req.setCharacterEncoding(“utf-8”);
chain.doFilter(req, resp);
HttpServletRequest request=(HttpServletRequest)req;
HttpSession session = request.getSession();
Object userName = session.getAttribute(“userName”);
System.out.println(“filter:”+userName);
if (userName!=null){
req.getRequestDispatcher(“success.jsp”).forward(req,resp);
}else {
req.getRequestDispatcher(“index.jsp”).forward(req,resp);
}
}
当向servlet发送请求时,会输出一次”filter:”+userName,并且当servlet发送响应时,回再输出一次。
除此之外,作用域中是否存放值与代码顺序没关系
当 chain.doFilter(req, resp);执行,即代表放行之后,之后的代码与servlet同步执行,则如果后台作用域存入了”userName”的值,那么这里就能获取到
也就可以进行跳转。
但是后台仍旧需要去获取数据来判断用户名和密码是否正确,如果正确存入username的用户名,那么session作用域一直存储直到作用域消失或者删除,即将该用户名缓存,下次登陆不需验证
这也是登录页面的验证,如果用户名与密码匹配,则存入数据,并且成功跳转”success.jsp”该页面,如果失败,则不存入数据并且跳转回登录页面。