zoukankan      html  css  js  c++  java
  • 9.初识拦截器

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html

    拦截器能在action被调用之前和被调用之后执行一些“代码”。Struts2框架的大部分核心功能都是通过拦截器来实现的,如防止重复提交、类型转换、对象封装、校验、文件上传、页面预装载等等,都是在拦截器的帮助下实现的。每一个拦截器都是独立装载的(pluggable),我们可以根据实际的需要为每一个action配置它所需要的拦截器。

    myStruts2项目下,重新对配置文件作如下修改:
    <package name="myFirst" namespace="/" extends="struts-default">

    <interceptors>

    <interceptor name="timer"

                                class="com.opensymphony.xwork2.interceptor.TimerInterceptor" />


           <interceptor name="params"                                                                                                                           class="com.opensymphony.xwork2.interceptor.ParametersInterceptor" />

           </interceptors>

     

                  <action name="login" class="com.asm.LoginAction">

                         <interceptor-ref name="timer"></interceptor-ref>

                         <interceptor-ref name="params"></interceptor-ref>

                         <result name="loginSuccess">/success.jsp</result>

                         <result name="loginFailure">/failure.jsp</result>

                  </action>

           </package>

    首先在package中定义了两个拦截器,然后在login action中引用了这两个拦截器,需要说明的是这里使用的拦截器都是系统自带的拦截器。其实在extends所继承的struts-default中就包含了很多拦截器,也包括我们这里所用的拦截器,但如果在此action中不使用params拦截器,将会报空指针错,因为params拦截器的作用是传递表单参数,如果不使用此拦截器就不能在action中得到表单参数,所以引用时会报空指针错。虽然extends继承的strust-default自带有params拦截器,但是当我们自己引用了拦截器时,继承struts-default将不会再为我们分配默认的拦截器(有点类似构造器),但是我们仍然可以通过<interceptor-ref name="defaultStack"/>来继续使用struts-defalut的拦截器。补充:由于上面的package继承于struts-default,而我们这里所用到的timer和params都是在struts-defalut中定义过,所以即使我们在<interceptors>中没有定义过这两个拦截器,也可以直接在action中引用。

    使用</interceptor-stack>组合多个拦截器:比如我们想把上面的params和timer这两个拦截器组合:

           <interceptor-stack name="timer_param">

                                <interceptor-ref name="timer" />

                                <interceptor-ref name="params" />

           </interceptor-stack>

    然后再在action引用<interceptor-ref name="timer_param"/>”,效果和分别引用两个是一样的。其实我们使用strtus-default中的<interceptor-ref name="defaultStack"/>也是使用interceptor-stack方式。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法提高 P0404
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    Java实现 蓝桥杯VIP 算法训练 排列问题
    关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)
  • 原文地址:https://www.cnblogs.com/sharpest/p/5580568.html
Copyright © 2011-2022 走看看