疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java软件开发: Struts2 的拦截器如何使用


 

Struts2的拦截器该如何使用呢?这是java培训机构许多刚学习struts的学员经常请教的问题。广州java培训机构为大家整理了这样的方法,希望能对大家有帮助!
 
struts2.0拦截器 interceptor
【拦截器】

        在AOP(Aspect-Oriented Programming)中
        用于在某个方法或字段被访问之前,
        进行拦截然后在之前或之后加入某些操作。
        拦截是AOP的一种实现策略。 
        拦截器是动态拦截Action调用的对象。

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

        拦截器栈(Interceptor Stack)类似于过滤器链。
        拦截器栈就是将拦截器按一定的顺序联结成一条链。
        在访问被拦截的方法或字段时,
        拦截器栈的拦截器就会按其之前定义的顺序被调用
        也可以叫做拦截器链(Interceptor Stack),
        拦截器栈一词更明确的表名了连接器链的实现方式
【实现原理】
        Struts2的拦截器和Filter类似。在执行Action的execute方法之前,
        Struts2会首先执行在struts.xml中引用的拦截器,
        在执行完所有引用的拦截器的intercept方法后,
        会执行Action的execute方法。 
        当请求到达Struts 2的ServletDispatcher时,

        Struts 2会查找配置文件,并根据其配置实例化
        相对的拦截器对象,然后串成一个列表(list),
        最后一个一个地调用列表中的拦截器:
【Struts自带拦截器】
        Struts 2已经提供丰富多样的,功能齐全的拦截器实现。
        可以到 struts2-core-2.1.8.jar 包的 struts-default.xml 查看关
        于默认的拦截器与拦截器链的配置。 (line 122开始)
【配置使用拦截器的步骤】

        步骤1.  在应用程序struts.xml文件中通过
                     <include file="struts-default.xml" />(在package之外)
                     将struts-default.xml文件包含进来,

                     并继承其中的struts-default包(package 的extends属性)
        步骤2.   在定义 Action时,使用<interceptor-ref name="xx" />
                      引用拦截器或拦截器栈,其中xx是拦截器的名字

【普通拦截器配置文件配置如下:】
<struts>
        <include file="struts-default.xml"></include>
        <package name="interceptor" namespace="/interceptor"
                 extends="struts-default">
                <action name="Timer" 
                        class="interceptor.TimerInterceptorAction">
                        <interceptor-ref name="timer"/>        
                        ---
计时器拦截器记录这个action
                            开始到结束所用的时间

                            性能调试时相当有用
                        <interceptor-ref name="logger"/>
                        ---
记录日志拦截器记录执行的
                            是那个action输出Action的名字     
                        <result>/interceptor/Timer.jsp</result>
                </action>
        </package>
</struts>

【默认的拦截器链】

        struts-default.xml中有一个默认的链接器栈defaultStack,
        在<action>中未引用拦截器时会自动引用下列拦截器栈中的拦截器:
       
【自定义拦截器链配置如下】
<package?name="interceptor"?extends="struts-default"?>
        <interceptors>
                <interceptor-stack name="mystack">
                        <interceptor-ref name="timer" />
                        <interceptor-ref name="logger" />
                        <interceptor-ref name="params" />
                        <interceptor-ref name="staticParams" />
                </interceptor-stack>
        </interceptors>
        <action?name="first"?class="action.FirstAction">
                <param?name="who">
比尔</param>
                <interceptor-ref?name="mystack"/>
        </action>
</package>
【常用拦截器介绍】

   
拦截器
名字
说明
Alias Interceptor
alias 
在不同请求之间将请求参数在不同名字之间转换,请求内容不变
Chaining Interceptor         
chain
让前一个Action的属性可以被后一个Action访问
Checkbox Interceptor  
checkbox
添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false
Cookies Interceptor
cookies
使用配置的name,value来寻找
cookies
Create Session Interceptor
createSession
自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

Exception Interceptor 
exception
将异常定位到一个页面
File Upload Interceptor 
fileUpload
提供文件上传功能
I18n Interceptor 
i18n
记录用户选择的locale 
Parameters Interceptor
params
将请求中的参数设置到Action中去。

Prepare Interceptor 
prepare
如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。
Servlet Config Interceptor 
servletConfig
提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。
Static Parameters Interceptor
staticParams
从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中  
以上介绍的就是java拦截器如何使用的介绍了,相信能对大家都有帮助!现在java是发展得最好的编程语言,学习java有很好的市场空间。参加java培训是学习java的最好方法了,那么怎样选择java培训机构呢?选择java培训机构最好要到正规的java培训机构,只有这样才能学到真正的东西,如果你还想学习更多java知识,欢迎到疯狂java官方网站下载java视频教程