JavaWeb监听器和过滤器

Posted 海之浪子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb监听器和过滤器相关的知识,希望对你有一定的参考价值。

JavaWeb监听器

ServletContextListener监听器

Servlet的上下文监听,它主要实现监听ServletContext的创建和销毁。可以完成自己想要的初始化工作。主要包括下面两个方法

//启动服务的时候调用该方法
public void contextInitialized(ServletContextEvent sce);

//销毁该服务的时候调用该方法
public void contextDestroyed(ServletContextEvent sce);
ServletRequestListener监听器

监听ServletRequest域创建与销毁的监听器。ServletRequest的生命周期:每一次请求都会创建request,请求结束则销毁。主要包括下面两个方法

//访问服务器的任何资源都会调用该方法
public void requestDestroyed(ServletRequestEvent sre);


//当服务器对本次请求作出相应的时候,调用该方法
public void requestInitialized(ServletRequestEvent sre);
HttpSessionListener监听器

监听Httpsession域的创建与销毁的监听器。HttpSession对象的生命周期:第一次调用request.getSession时创建;销毁有以下几种情况(服务器关闭、session过期、 手动销毁)主要包括下面两个方法


//session创建的时候调用该方法
public void sessionCreated(HttpSessionEvent se);

//session销毁的时候调用该方法
public void sessionDestroyed(HttpSessionEvent se);
ServletContextAttributeListener监听器

主要实现监听ServletContext属性的增加,删除和修改。主要包括下面三个方法

/**
 * Receives notification that an attribute has been added to the
 * ServletContext.
 *
 * @param event the ServletContextAttributeEvent containing the
 * ServletContext to which the attribute was added, along with the
 * attribute name and value
 */
public void attributeAdded(ServletContextAttributeEvent event);

/**
 * Receives notification that an attribute has been removed
 * from the ServletContext.
 *
 * @param event the ServletContextAttributeEvent containing the
 * ServletContext from which the attribute was removed, along with
 * the attribute name and value
 */
public void attributeRemoved(ServletContextAttributeEvent event);

/*
 * Receives notification that an attribute has been replaced
 * in the ServletContext.
 *
 * @param event the ServletContextAttributeEvent containing the
 * ServletContext in which the attribute was replaced, along with
 * the attribute name and its old value
 */
public void attributeReplaced(ServletContextAttributeEvent event);
ServletRequestAttributeListener监听器

主要包含下面三个方法

/**
 * Receives notification that an attribute has been added to the
 * ServletRequest.
 *
 * @param srae the ServletRequestAttributeEvent containing the 
 * ServletRequest and the name and value of the attribute that was
 * added
 */
public void attributeAdded(ServletRequestAttributeEvent srae);

/**
 * Receives notification that an attribute has been removed from the
 * ServletRequest.
 *
 * @param srae the ServletRequestAttributeEvent containing the 
 * ServletRequest and the name and value of the attribute that was
 * removed
 */
public void attributeRemoved(ServletRequestAttributeEvent srae);

/**
 * Receives notification that an attribute has been replaced on the
 * ServletRequest.
 *
 * @param srae the ServletRequestAttributeEvent containing the 
 * ServletRequest and the name and (old) value of the attribute
 * that was replaced
 */
public void attributeReplaced(ServletRequestAttributeEvent srae);
HttpSessionListener监听器

HTTP会话监听,该接口实现监听HTTP会话创建、销毁。主要包括下面两个方法

/** 
 * Receives notification that a session has been created.
 *
 * @param se the HttpSessionEvent containing the session
 */
public void sessionCreated(HttpSessionEvent se);

/** 
 * Receives notification that a session is about to be invalidated.
 *
 * @param se the HttpSessionEvent containing the session
 */
public void sessionDestroyed(HttpSessionEvent se);

还有下面两个监听器

HttpBindingListener监听器

接口实现监听HTTP会话中对象的绑定信息。它是唯一不需要在web.xml中设定Listener的

HttpSessionAttributeListener监听器

该接口实现监听HTTP会话中属性的设置请求

可以通过下面的代码来查看前三个监听器的区别

MyHttpSessionListener

public class MyHttpSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {

        System.out.println("MyHttpSessionListener.sessionCreated 的方法啦");
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("MyHttpSessionListener.sessionDestroyed 的方法啦");
    }
}

MyServletContextListerner

public class MyServletContextListerner implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //比如可以在这里实现数据库连接的初始化等操作
        System.out.println("MyServletContextListerner.contextInitialized 方法被调用啦");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("MyServletContextListerner.contextDestroyed 方法被调用啦");

    }
}

MyservletRequestListner

public class MyServletRequestListener implements ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {

        System.out.println("MyServletRequestListener.requestDestroyed 方法被调用啦");
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("MyServletRequestListener.requestInitialized 方法被调用啦");
    }
}

在web中配置监听器

<listener>
  <listener-class>com.rookie.bigdata.Listener.MyServletContextListerner</listener-class>
  <listener-class>com.rookie.bigdata.Listener.MyServletRequestListener</listener-class>
  <listener-class>com.rookie.bigdata.Listener.MyHttpSessionListener</listener-class>
</listener>

javaWeb Filter

filter与servlet在很多的方面极其相似,但是也有不同,例如filter和servlet一样都又三个生命周期方法,同时他们在web.xml中的配置文件也是差不多的、 但是servlet主要负责处理请求,而filter主要负责拦截请求和放行。

FIlter接口有三个方法

//服务器启动的时候执行该方法
public void init(FilterConfig filterConfig) throws ServletException;


//执行过滤
public void doFilter(ServletRequest request, ServletResponse response,
                     FilterChain chain)
        throws IOException, ServletException;


//服务器停止的时候执行该方法
public void destroy();
Filter的执行顺序
  1. 客户端发出请求,先经过过滤器, 如果过滤器放行,那么才能到servlet
  2. 如果有多个过滤器, 那么他们会按照注册的映射顺序 来 排队。 只要有一个过滤器, 不放行,那么后面排队的过滤器以及咱们的servlet都不会收到请求。
  3. init方法的参数 FilterConfig , 可以用于获取filter在注册的名字 以及初始化参数。 其实这里的设计的初衷与ServletConfig是一样的。
  4. 如果想放行,那么在doFilter 方法里面操作,使用参数 chain
    chain.doFilter(request, response);// 放行, 让请求到达下一个目标。
  1. /* 写法格式与servlet一样。
  • 全路径匹配 以 / 开始

    /LoginServlet

  • 以目录匹配 以 / 开始 以 * 结束

    /demo01/*

  • 以后缀名匹配 以 * 开始 以后缀名结束

    .jsp .html *.do

以上是关于JavaWeb监听器和过滤器的主要内容,如果未能解决你的问题,请参考以下文章

过滤器与监听器 ----javaweb-10

JavaWeb学习——监听器和过滤器

JavaWEB过滤器和监听器技术

JavaWeb详解(第三篇)之Servlet基础简介-过滤器Filter&Listener监听器

JavaWeb day06 过滤器监听器Web项目路径

如何快速读懂项目源码javaWeb