Filter与Listener 过滤器与监视器

本文介绍了JSP中的过滤器与监听器的工作原理及使用方法。过滤器可以拦截客户端请求并处理后再转发给目标资源,而监听器则用于监听特定事件的发生,如ServletContext的创建与销毁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过滤器

再JSP的web应用程序中,过滤器是一种在服务端运行的web组件程序,它可以截取客户端给服务器发的请求,也可以截取服务器给客户端的响应。

当web容器获得一个对资源的请求时,web容器判断是否存在过滤器和这个资源关联,如果有存在关联就把请求交给过滤器去除刘,在过滤器中可以对请求的内容作出改变,然后再将请求转交给被请求的资源。当被请求的资源作出响应时,我把容器同样会将响应先转发给过滤器,在过滤器中可以对响应作出处理然后再将响应发送给客户端。再这整个过程中客户端和目标资源是不知道过滤器的存在的。

需要注意的是再过滤器中不一定必须将请求发送给请求资源,也可以直接给客户端作出xiangying。

开发一个过滤器必须实现javax.servlet.Filter接口:

public class FirstFilter implements Filter{
    public void init(FilterConfig arg0) throws ServletException{
        }
      public void destroy(){
        }
       public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{
        }
    }
  1. 由web容器来调用init方法完成过滤器的初始化工作。
  2. 由web容器来调用destroy方法来释放资源。
  3. doFilter方法类似于Servlet中的service 方法,当客户端请求于此过滤器关联的目标对象时,就会调用过滤器的doFilter方法。在这个方法中利用FilterChain接口中的doFilter方法将请求交给下个过滤器来处理,如果该过滤器是过滤器链中的最后一个过滤器,则将请求交给被请求资源。也可以直接给客户端返回响应信息。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>javaweb_filter</display-name>
 
   <filter>
    <filter-name>logFiletr</filter-name>
    <filter-class>com.java12.web.filter.LogFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>logFiletr</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
  1. <filter>节点描述该F莱特人对应的类是哪一个。
  2. <filter-mapping>中的<filter-name>必须和<filter>节点中的<filter-name>值相同,<url-pattern>指定该过滤器关联的URL样式,比如/*指的是对所有资源过滤,/admin/*指的是对admin目录下的所有资源进行过滤。

怎么来确定一个过滤器在过滤器链中的顺序呢?

这个根据过滤器在web.xml中配置的上下顺序来决定的。

监听器

监听器的作用是监听web应用程序中某一个对象,并根据应用程序的需求做出相应的处理,java web 应用程序中,servlet容器提供了多种监听器,常见的有:request对象的监听servletRequestAttributeListenter和ServletRequestListener、HttpSessionAttributeListener和HttpSessionListener、ServletContextAttributeListener和ServletContextListener。

首先来看下ServletContextListener,当一个雷实现了ServletContextListener接口,就可以监听ServletContext的创建与销毁工作。

public class ServletContextListenerImpl implements ServletContextListener{
        public void contextDestroyed(ServletContextEvent arg0){  ①
            System out println("ServletContext销毁了");
        }
        public void contextInitialized(ServletContextEvent arg0){  ②
            System out println("ServletContext创建了");
        }
}

① 当web容器关闭时,ServletContext被销毁会调用监听器的contextDestroyed方法。

② 当web容器启动时,ServletContext被创建会调用监听器的contextInitialized方法。

<listener>
    <listener-class>
        com.java.listener.ServletContextListenerImpl
    </listener-class>
</listener>

HttpSessionListener接口则是监听Session的创建与销毁的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值