在上一个 demo 的基础上,实现了拦截器。
MyInterceptor.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package com.demo; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor { private String hello="1"; public String getHello() { return hello; } public void setHello(String hello) { this.hello = hello; } @Override public void destroy() { System.out.println("destroy"); } @Override public void init() { System.out.println("init"); } @Override public String intercept(ActionInvocation invoker) throws Exception { //invoke() 方法,若有多个拦截器,执行此方法后则调用下一个拦截器。若无,则返回给视图 String result=invoker.invoke(); System.out.println(result+","+hello); return result; } } |
struts.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?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="any" extends="struts-default" namespace="/"> <interceptors> <!-- 定义拦截器 --> <interceptor name="interceptor_test" class="com.demo.MyInterceptor"> <!-- 设置拦截器初始化时的参数 --> <param name="hello">world</param> </interceptor> <!-- 把定义的拦截器加入到拦截链(栈) --> <interceptor-stack name="mystack"> <interceptor-ref name="interceptor_test"></interceptor-ref> <!-- 此为 struts2 默认的拦截器栈,必须手动将其引入。 --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 设置默认拦截器 ,设置后,每个 action 都会被该拦截器拦截 --> <!-- <default-interceptor-ref name="mystack"></default-interceptor-ref> --> <action name="logindo" class="com.demo.UserAction" method="execute"> <!-- 插入拦截器 --> <interceptor-ref name="mystack"></interceptor-ref> <result name="success">success.jsp</result> <result name="fail">fail.jsp</result> </action> </package> </struts> |
其他代码不变。则实现了 struts2 的核心,拦截器。