你的位置:首页 > 软件开发 > Java > StrutsPreparedAndExcuteFilter与Interceptor

StrutsPreparedAndExcuteFilter与Interceptor

发布时间:2017-03-12 00:00:45
StrutsPreparedAndExcutedFilter 该过滤器继承于javax.servlet.filter,首先需要对filter有一个清晰的认识filter详解Filter种类(可以进行那些预处理)用户授权的Filter:Filter负责检查用户请求 ...

StrutsPreparedAndExcuteFilter与Interceptor

StrutsPreparedAndExcutedFilter   

 该过滤器继承于javax.servlet.filter,首先需要对filter有一个清晰的认识

filter详解

Filter种类(可以进行那些预处理)
  • 用户授权的Filter:Filter负责检查用户请求,对用户访问权限的控制
  • 日志Filter:详细记录某些特殊的用户请求。
  • 负责解码的Filter:包括对非标准编码的请求解码。
  • Filter可负责拦截多个请求或响应;一个请求或响应也可被多个请求拦截。
filter

三个方法:void destory()

            void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)

            void init(FilterConfig filterConfig)

所有的filters会形成一个FilerChain,web服务器根据filter在web.

StrutsPreparedAndExcuteFilter与Interceptor

filter生命周期

与servlet基本相同

filter与servlet关系

     filter可以认为是Servlet的一种“加强版”,它主要用于对HttpServletRequest进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链(filterChain)。但它不能对请求做出响应,这是与servlet的最大区别。

 StrutsPreparedAndExcutedFilter   

     在该filer的init()方法中,会加载struts.properties文件和struts.

。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个Action执行前阻止其执行。同时也提供了一种可以提取Action中可重用的部分的方式。

 

 

Interceptor(对比filter理解)

  • void init():在该**被实例化之后,在该**执行拦截之前,系统将回调该方法。对于每个**而言,其init()方法只执行一次。因此,该方法的方法体主要用于初始化资源。
  • void destory():该方法与init()方法对应。在**实例被销毁之前,系统将回调该**的destory方法,该方法用于销毁在init方法里打开的资源。
  • String intercept(ActionInvocation invocation):这个方法具备以下2层含义:
    1. 如果**堆栈中还有其他的Interceptor,那么invocation.invoke()将调用堆栈中下一个Interceptor的执行。
    2. 如果**堆栈中只有Action了,那么invocation.invoke()将调用Action执行。

    所以,我们可以发现,invocation.invoke()这个方法其实是整个**框架的实现核心。基于这样的实现机制,我们还可以得到下面2个非常重要的推论:

    1. 如果在**中,我们不使用invocation.invoke()来完成堆栈中下一个元素的调用,而是直接返回一个字符串作为执行结果,那么整个执行将被中止。
    2. 我们可以以invocation.invoke()为界,将**中的代码分成2个部分,在invocation.invoke()之前的代码,将会在Action之前被依次执行,而在invocation.invoke()之后的代码,将会在Action之后被逆序执行。

    由此,我们就可以通过invocation.invoke()作为Action代码真正的拦截点,从而实现AOP。

StrutsPreparedAndExcuteFilter与Interceptor

 

Interceptor和Filter区别

1.filter通过chain.dofilter()进行函数回调,而Interceptor是基于java反射

2.filter存在于servlet容器中,Intercept不然

3.filter作用于servlet,即几乎对所有请求都有过滤作用,而intercepor只对action请求起作用

4.在action的生命周期中,**可以多次被调用,而过滤器只能在容器初始化时被调用一次

 


原标题:StrutsPreparedAndExcuteFilter与Interceptor

关键词:Struts

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录