mio4 Java Web & Web Security

JavaWeb基础(10):listener&filter

2018-10-16
mio4

阅读:


JavaWeb三大组件:Servlet 、Filter、 Listener

(一)listener

(1)监听对象

  • Listener(监听器):一个接口
    • 作用:监听对象
    • 比如:ServletContextListener、ServletRequestListener
  • ServletContextListener
    • 作用:服务器启动时调用函数,可在函数中加载配置文件
public class MyServletContextListener implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent sce){
		System.out.println("ServletContext创建"); //服务器启动时调用
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce){
		System.out.println("ServletContext销毁"); //服务器关闭时调用
	}
}
  • 同样需要在web.xml中配置
    <listener>
        <listener-class>com.mio4.web.listener.MyServletContextListener</listener-class>
    </listener>
  • ServletRequestListener:监听单个Request的生命周期
    • public void requestDestroyed(ServletRequestEvent sre)
    • public void requestInitialized(ServletRequestEvent sre)
  • HttpSesssionListener:监听Session的生命周期
    • public void sessionCreated(HttpSessionEvent hse)
    • public void sessionDestroyed(HttpSessionEvent hse)

注意Listener也需要配置web.xml文件

(2)监听属性

  • ServletContextAttributeListener 监听ServletContext的属性变化
    • public void attributeAdded(ServletContextAttributeEvent scae)
    • public void attributeRemoved(ServletContextAttributeEvent scae)
    • public void attributeReplaced(ServletContextAttributeEvent scae)

(3)监听JavaBean

  • JavaBean需要实现HttpSessionBindingListener接口
    • public void valueBound(HttpSessionBindingEvent event) //检测到JavaBean对象绑定在Sesion域中
    • public void valueUnbound(HttpSessionBindingEvent event) //检测解绑
  • 检测JavaBean的序列化和反序列化

(二)filter

  • Filter(过滤器):一个接口
    • 在HttpServletRequest到达Servlet之前拦截检查
    • 在HttpServletResponse到达客户端之前拦截检查
  • 功能:过滤敏感词汇、统一编码、实现网站自动登录
  • Filter也需要在web.xml中进行配置,其中url-pattern的地址对应Servlet的地址,表示在请求到达对应Servlet之前会先到过滤器
    <filter>
        <filter-name>HelloFilter</filter-name>
        <filter-class>com.mio4.web.filter.HelloFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HelloFilter</filter-name>
        <url-pattern>/helloFilter</url-pattern>
    </filter-mapping>

(1)生命周期

  • public void init(FilterConfig config) throws ServletException :服务器启动时调用
  • public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException :执行业务逻辑
  • public void destroy(): Filter被移除或服务器关闭时调用

(2)FilterChain

  • chain.doFilter(request,response);
    • 将请求放行到下一个过滤器

(3)url-pattern配置

  • 匹配方式
    • 完全匹配: 必须以”/”开始
    • 目录匹配:必须以”/”开始,”*“结束
    • 后缀名匹配:比如”.jsp”
  • 在web.xml中的filter-mapping的先后会影响过滤器执行的先后顺序

(4)应用

  • 比如:保持网站的登录状态

Comments

Content