关于自动登录的过滤器操作。
过滤所有的请求和相应。
要获得路径,(request.getRequestUrl)对象。
然后看路径里面是否包含登录或者,登录servlet
if包含,就放行。
否则request.getSession(false);判断session是否为空。
空的话,跳转到登录页面。
否则。判断是否含有指定名字的session。
如果为空跳转到登录页面
否则。放行。
放行的意思是说。先访问主页面,但是没有session,会跳转到登录页面,
登录成功,会放行到主页面。(这样用户的体验会更好。)
也可以把放行改为跳转到指定的页面,
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String requestURI = request.getRequestURI();
//如果当前浏览器路径访问的是login(loginServlet)或者login.jsp时放行
if(requestURI.contains("login") || requestURI.contains("login.jsp")){
chain.doFilter(request,response);//放行
}else{
//如果访问的是其他路径
//首先判断session
//获取session
HttpSession session = request.getSession(false);
//判断session
if (session == null){
//跳转到登录页面
response.sendRedirect(request.getContextPath()+"/login.jsp");
}else{
//如果seesion不为空,判断session中的user
if(session.getAttribute("user") == null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
}else {
//如果不为空,证明已经登录过了,session默认有效期为30分钟
chain.doFilter(request,response);
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
// 模拟一个登录的过程
// User user = UserService.login(username, password);
//User user = null;
if ("admin".equals(username) && "123456".equals(password)) {
User user = new User(username, password);
request.getSession().setAttribute("user",user.getUsername());
request.getRequestDispatcher("index.jsp").forward(request,response);
} else {
request.setAttribute("msg","用户名或密码错误");
request.getRequestDispatcher("login.jsp").forward(request,response);
}
// Cookie cookie = new Cookie("userInfo", username + "#" + password);
// response.addCookie(cookie);
// response.sendRedirect("aaa.html");
}
Java的事件监听机制
1、事件监听涉及到三个组件:事件源、事件参数、事件监听器
2、当事件源上发生某一个动作时,它会调用事件监听器的一个方法,并在调用该方法时把事件参数对象传递进去,
开发人员在监听器中通过事件参数对象,就可以拿到事件源,从而对事件源进行操作。
什么是监听器
监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计访问人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等
监听器类型
生命周期监听器:**
1 ServletContext上下文监听器
ServletContextListener接口
内部方法:
初始化:contextInitialized
销毁:contextDestroyed
2 Session监听器
HttpSessionListener
内部方法:
sessionCreated:监听Session对象的创建
sessionDestroyed:监听Session对象的销毁
3 request监听器
ServletRequestListener
监听request对象的初始化和销毁
内部方法:
1、requestInitialized:监听request对象的初始化
2、requestDestroyed:监听request对象的销毁
属性变化监听器:**
1 ServletContext属性变化监听器
ServletContextAttributeListener接口
内部的方法:
attributeAdded:监听属性的添加
attributeRemoved:监听属性的移除
attributeReplaced:监听属性的修改
2 session属性变化监听器
HttpSessionAttributeListener
监听HttpSession的内容的变化
内部的方法:
attributeAdded:监听属性的添加
attributeRemoved:监听属性的移除
attributeReplaced:监听属性的修改
3 request属性变化监听器
ServletRequestAttributeListener
监听属性内容变化
内部方法:
attributeAdded:监听属性的添加
attributeRemoved:监听属性的移除
attributeReplaced:监听属性的修改
监听器的2种配置
xml的配置
在web.xml中进行配置
<listener>
<!--直接写出自定义的监听器的类名即可-->
<listener-class>com.qf.web.listener.RequestLeftListener</listener-class>
</listener>
1.3.2注解式配置
Servlet3.0之后新增的,使用注解@WebListener进行监听器的注册