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方式。

  • 相关阅读:
    当tp5项目上传到服务器之后遇见的各种bug(不定期更新)
    解决LAMP下 服务器IP无法访问
    thinkphp5多图上传+同时删除本地文件
    from提交表单后 数据提交到后台 但不跳转页面 非ajax 用iframe
    window7 安装sass和compass
    开源操作系统课程设计
    Hadoop伪分布式搭建实验总结
    排序集合
    快排
    邻接矩阵
  • 原文地址:https://www.cnblogs.com/sharpest/p/5580568.html
Copyright © 2011-2022 走看看