Struts2拦截器的简单示例

来源:互联网 发布:学java月薪多少 编辑:程序博客网 时间:2024/06/13 19:52

1. 先写编写一个Action:

package com.huey.action;import com.opensymphony.xwork2.ActionSupport;/** * @version 2013-08-21 * @author Huey2672 * */public class HelloAction extends ActionSupport {/** *  */private static final long serialVersionUID = 8014451130348010868L;private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String execute() throws Exception {System.out.println("Hello, " + name);return SUCCESS;}}

2. 实现拦截器类,需要实现import com.opensymphony.xwork2.interceptor.Interceptor接口或是继承com.opensymphony.xwork2.interceptor.AbstractInterceptor(实现了Interceptor):

package com.huey.interceptor;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;/** * @version 2013-08-21 * @author Huey2672 * */public class TimerInterceptor extends AbstractInterceptor {/** *  */private static final long serialVersionUID = -2483954176172291193L;// 该name属性在定义拦截器时指定private String name;public void setName(String name) {this.name = name;}/** * 实现了拦截动作 * @param invocation 该参数可以获取被拦截的Action实例,以获得控制权 * @return 系统将跳转的逻辑视图 */public String intercept(ActionInvocation invocation) throws Exception {System.out.println(name + "开始执行拦截动作。");long startTime = System.currentTimeMillis();/* * 该方法执行前,拦截器在执行拦截动作前进行了预处理 * 该方法执行后,拦截器在执行拦截动作后进行了后处理 * 该方法调用时,执行了所拦截的Action的处理动作,并返回了该Action返回的逻辑视图 */String resultCode = invocation.invoke();long endTime = System.currentTimeMillis();System.out.println(name + "结束执行拦截动作。");System.out.println("该Action执行了" + (endTime - startTime) + "毫秒。");return resultCode;}}

3. 在struts.xml文件中配置Action和拦截器:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="hello" extends="struts-default"><!-- 定义拦截器与拦截器栈 --><interceptors><!-- 定义单个拦截器,name属性和class属性分别指定该拦截器的名字和实现类 --><interceptor name="timer" class="com.huey.interceptor.TimerInterceptor"><!-- 为拦截器指定参数,在此指定的参数为默认参数 --><!-- 也可以在使用拦截器时指定参数,若出现同名参数,会动态地覆盖默认参数 --><param name="name">计时器拦截器</param></interceptor></interceptors><action name="helloAction" class="com.huey.action.HelloAction"><param name="name">Sugar</param><!--   拦截器执行的顺序是:  在Action的控制方法执行之前,位于拦截器链前面的拦截器将先发生作用,  在Action的控制方法执行之后,位于拦截器连后面的拦截器将先发生作用。--><!-- 配置系统默认的拦截器栈 --><interceptor-ref name="defaultStack"/><!-- 配置自定义的拦截器 --><interceptor-ref name="timer"/><result name="success">hello.jsp</result></action></package></struts>

5. 对HelloAction发送请求后,在控制台会有如下输出:

计时器拦截器开始执行拦截动作。Hello, Sugar计时器拦截器结束执行拦截动作。该Action执行了94毫秒。


原创粉丝点击