基于Struts2拦截器的使用总结

来源:互联网 发布:数据库搭建步骤 编辑:程序博客网 时间:2024/05/24 04:47

Struts2 中的拦截器和 servelt 中的过滤器是非常的相似的。如果学过过滤器的话,肯定能够感觉的到,尽管有些微的不同。可是struts2的拦截器到底如何使用呢,为什么会有这些配置呢? 接下来一一来看。

过滤器和拦截器是非常相似的,过滤器 public interface Filter 接口里面有三个方法:
• init(FilterConfig filterConfig),
• destroy(),
• doFilter(ServletRequest request, ServletResponse response, FilterChain chain),
这里面的 doFilter() 方法是最重要的,在 struts2 中 String intercept(ActionInvocation invocation)就相当于此方法。

如何完成一个拦截器呢?在 struts2 中要实现一个接口,里面也有三个方法,有 init, destroy 和 intercept 三个方法,而在 struts2 里面的所有的拦截器都继承这个接口!

实现如下 Java代码       package com.interceptor;      import com.opensymphony.xwork2.ActionInvocation;      import com.opensymphony.xwork2.interceptor.Interceptor;           public class MyInterceptor implements Interceptor{          private String string;        public String getString() {            return string;        }        public void setString(String string) {            this.string = string;        }         public void init() {             System.out.println("init");          }          public String intercept(ActionInvocation invoker) throws Exception {             System.out.println("intercept");                  String result=invoker.invoke();               return result;          }                 public void destroy() {             System.out.println("destory");          }      }  

intercept 方法返回一个字符串,这个里面最重要的是 ActionInvocation 也是个抽象的接口,里面有个 invoke() 方法
作用:Invokes the next step in processing this ActionInvocation. 即调用下一个拦截器,如果有的话!
拦截器进行了实现,但是如何让struts2知道我们写了个拦截器呢,此时必须在struts.xml中配置一下。如下所示

Xml代码  1.  <struts>  2.     <package name="struts2" extends="struts-default">  3.        <interceptors>  4.           <interceptor name="myinterceptor" class="com.interceptor.MyInterceptor">  5.                <param name="string">world</param>  6.           </interceptor>  7.        </interceptors>  8.     </package>  9.  <struts>  

这里为了测试,用了一个虚拟的注册页面register.jsp 和 RegisterAction

Xml代码   1.  <action name="register" class="com.test.action.RegisterAction" >  2.        <result name="input">/register.jsp</result>  3.        <result name="success">/success.jsp</result>  4.  </action>  

将上面的配置整合起来就是:

ml代码  1.  <struts>  2.     <package name="struts2" extends="struts-default">  3.        <interceptors>  4.           <interceptor name="myinterceptor" class="com.interceptor.MyInterceptor">  5.                <param name="hello">world</param>  6.           </interceptor>  7.        </interceptors>  8.    9.        <action name="register" class="com.test.action.RegisterAction" >  10.          <result name="input">/register.jsp</result>  11.          <result name="success">/success.jsp</result>  12.          <interceptor-ref name="myinterceptor"></interceptor-ref>  13.       </action>  14.    </package>  15. <struts>  

接着上面result后面添加一个把!

Xml代码   1.  <interceptor-ref name="defaultStack"></interceptor-ref>  

为拦截器添加参数
好了,到了这里,让我们来处理上面为myinterceptor拦截器添加的参数问题吧
Xml代码

    <param name="hello">world</param>  

这里我们可以通过配置文件,给拦截器添加一个参数,那这个在拦截器中怎么取得的呢?
了解过滤器的朋友都知道,里面有个init(FilterConfig filterConfig)方法在这里可以取值,而在struts2中没有这么麻烦,做法吗,上面其实已经给出来了! get和set方法
写个变量,然后加上get和set方法,当然变量的名字必须和设定的参数是相同的,这个是赋值成功的前提条件

“`

1 0