Filter与Listener

来源:互联网 发布:韦东山linux视频第2期 编辑:程序博客网 时间:2024/06/16 22:49
Servlet过滤器Filter:
    能够对Servlet容器的请求和响应对象进行检查和修改。
    Servlet过滤器本身不生成请求和响应对象,它只提供过滤作用,
    Servlet过滤器可以在Servlet被调用之前检查Request对象,修改Request Header和Request内容
    在Servlet被调用之后检查Response对象,修改Response Header和Response内容。
    Servlet过滤器负责过滤的web组件可以是Servlet、jsp或Html文件。


所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。
    这个接口含有3个过滤器类必须实现的方法:
    -- init(Filter Config)
    -- doFilter(ServletRequest, ServletResponse, FilterChain)
    -- destroy()




要在web.xml中配置过滤器:
    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>com.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
    </filter-mapping>


有些初始的界面不用过滤器来验证,方法是在LoginFilter类的doFilter()方法中:
    HttpServletRequest r = (HttpServletRequest)request;
    String requestURL = r.getRequestURL();
    if(requestURL.endsWith("login.jsp") || requestURL.endsWith("MyLoginServlet")){
        chain.doFilter(request, response);
return;
    }


验证未登录时返回到登录界面,在LoginFilter类的doFilter()方法中:
    HttpServletRequest r = (HttpServletRequest)request;
    HttpSession session = r.getSession();
    if(null == session.getAttribute("user")){
        ((HttpServletResponse)response).sendRedirect("login.jsp");
return;
    } else {
        chain.doFilter(request, response);
    }
    




通过调用FilterConfig的getSevletContext()方法获得ServletContext,在调用ServletContext的getAttribute()方法业获得application范围内的共享数据。




Listener:Servlet监听器,可以监听客户端的请求、服务端的操作等,通过监听器,可以自动激发一些操作。
    监听用户数量:当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1;


    常用的监听接口有:
        1>:ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性;
2>:ServletContextListener监听ServletContext。
    当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;
    当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法;
0 0