java中servlet,filter,listener为啥优先级listener>filter>servlet,面试时候怎么回答?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中servlet,filter,listener为啥优先级listener>filter>servlet,面试时候怎么回答?相关的知识,希望对你有一定的参考价值。

为什么,就是这么设计的,为了扩展性。
listener的优先级高,是因为他和filter servlet不是一个层面的东西
这三个的优先级是和request的处理周期关联的。
listener是监听事件的
比如servletRequestListner
它监听请求的建立和销毁,有request肯定是先要建立才有处理的,所以listener是第一个 。

过滤器,目的不是完成一个请求的处理,而是在处理一个请求之前进和之后进行一些其他方面的操作,比如权限的判断等,不属于处理逻辑本身,所以他是高于servlet的一个级别,他可以过滤很多个servlet的请求,必须经过层层过滤,都通过以后才能到达servlet。

servlet是真正的动作执行者,这时候请求已经经过建立、过滤,到了真正执行的时候才会到达servlet里面。
参考技术A 这个东西刚好我也研究过呵呵,给些你我的总结。呵呵希望对你有帮助。

Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。所以很简单的你可以看出是首先通过listener监听。

filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).

Servlet
通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给
Servlet,并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后, Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广
参考技术B 个人感觉哈,我也是新手一枚。
listener是监听本servlet的,那么既然是监听,那么应该是可以第一时间响应servlet,所以它第一个。
而filter是过滤,这个过滤楼主应该也学过怎么用,那么就是在跳转servlet之前他需要过滤一遍,servlet返回的时候还是得从它的类走一遍,所以它优先级比servlet也是要高的。
而上面两个都排除了,就只剩下servlet了,SO,不用我讲了吧?
以上内容纯属个人瞎掰,恳请了解的大大给予更精准的正确的回答。
参考技术C 就好像人之间的交流,先要听到命令,然后再分析命令,过滤出需要做的事,然后再具体执行。
listener先听到
filter分析、过滤
servlet执行

Java中的Filter详解 --基础篇

Filter是Servlet规范中的一个高级特性,和Servlet不同的是,他们不处理客户端请求,只用于对request,response进行修改;
 
如果要自己实现一个自定义的Filter必须实现javax.servlet.Filter接口,接口中有三个方法:
 
 
package javax.servlet;
 
import java.io.IOException;
 
/**
 * A filter is an object that performs filtering tasks on either the
 * request to a resource (a servlet or static content), or on the response
 * from a resource, or both.
 * @since Servlet 2.3
 */
 
public interface Filter {
 
    /**
     * Called by the web container to indicate to a filter that it is
     * being placed into service.
     */
    public void init(FilterConfig filterConfig ) throws ServletException;
 
 
    /**
     * The <code> doFilter</code> method of the Filter is called by the
     * container each time a request/response pair is passed through the
     * chain due to a client request for a resource at the end of the chain.
     * The FilterChain passed in to this method allows the Filter to pass
     * on the request and response to the next entity in the chain.
     */
    public void doFilter(ServletRequest request , ServletResponse response ,
                         FilterChain chain )
            throws IOException, ServletException;
 
    /**
     * Called by the web container to indicate to a filter that it is being
     * taken out of service.
     */
    public void destroy();
 
}

  

三个方法反应了Filter的生命周期,其中init(),destory()方法只在Web程序加载或者卸载的时候调用,doFilter()方法每次请求都会调用。
 
另外,Filter在web.xml中的简单配置如下:
 
 
<!-- Char encoding -->
 <filter >
       < filter-name> characterFilter </filter-name >
       < filter-class> space.ifei.wxchat.sys.CharacterFilter </filter-class >
<!--    <async-supported>true</async-supported> -->
<!--    <init- param> -->
<!--         <param-name>XXX</param-name> -->
<!--         <param-value>QQQ</param-value> -->
<!--    </init- param> -->
  </filter >
  <filter-mapping >
  <filter-name> characterFilter </filter-name > <!-- 同一个Filter,Filter的名字必须一致 -->
   <url-pattern> /* </url-pattern > <!-- Filter生效的 url规则,可以使用通配符 -->
<!--    <dispatcher>REQUEST</dispatcher> -->
<!--    <dispatcher>FORWARD</dispatcher> -->
  </filter-mapping >
 

  

 
 
其中:
“async-supported ”设置Servlet是否开启异步支持,默认不开启,详细见:http://www.ibm.com/developerworks/cn/java/j-lo-servlet30/
“init- param ”设置自定义Filter里面属性的值;
“dispatcher ”设置到达servlet的方式,方式有4种:REQUEST,FORWARD,INCLUDE,ERROR.
 
 
需要注意的是:在一个Web程序中可以配置多个Filter,Filter的执行顺序要分先后的
 
 
 

以上是关于java中servlet,filter,listener为啥优先级listener>filter>servlet,面试时候怎么回答?的主要内容,如果未能解决你的问题,请参考以下文章

java中servlet,filter,listener为啥优先级listener>filter>servlet,面试时候怎么回答?

使用java的lisener,filter,servlet.

在JAVA中filter有啥作用?

在JAVA中filter有啥作用?

Java Servlet中Filter概念的实时用法是什么? [重复]

Servlet之Filter详细讲解