AnnotationWorkflowInterceptor

来源:互联网 发布:伯明翰大学 知乎 编辑:程序博客网 时间:2024/05/29 17:33

Struts2 利用配置拦截器AnnotationWorkflowInterceptor 实现Action公共类

(2011-10-11 13:22:56)
转载



http://blog.sina.com.cn/s/blog_57769b7b0100ut4b.html
标签:
 

struts2

 

拦截器

 

杂谈

  

主要想实现的内容是执行一个Action时,执行用@after和@before声明的方法。
这里利用的是AnnotationWorkflowInterceptor拦截器,详细请参照官网http://struts.apache.org/2.0.11.1/docs/annotationworkflowinterceptor.html
另外例子代码可以来这里找到http://blog.sina.com.cn/s/blog_57769b7b0100unbk.html

 

-------------------------------------------------------------------------------------------

首先配置struts.xml

<package name="default" namespace="/" extends="struts-default">
 <interceptors>
  <!-- 定义拦截器  name:拦截器名称 class:拦截器类路径 -->
  <interceptor name="annotationWorkflow"
   class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" />
  <!-- 定义拦截器栈 -->
  <interceptor-stack name="mystack">
   <interceptor-ref name="annotationWorkflow" />
   <!-- 导入默认拦截器配置,不然无法取到值 -->
   <interceptor-ref name="defaultStack"/>
  </interceptor-stack>
 </interceptors>

 <!-- 将上述mystack拦截器栈设定为默认拦截器 -->
 <default-interceptor-ref name="mystack" />
</package>

 

新建CommonAction.java

import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import org.apache.struts2.interceptor.SessionAware;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.annotations.After;
import com.opensymphony.xwork2.interceptor.annotations.Before;
import com.opensymphony.xwork2.interceptor.annotations.BeforeResult;

@Controller
public abstract class CommonAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware {

    private static final long serialVersionUID = 4645378216719871106L;

    private Map<String, Object> sessionMap;

    private HttpServletRequest request;

    private HttpServletResponse response;

    //    protected Log log = LogFactory.getLog(this.getClass());
    protected Logger log = Logger.getLogger(this.getClass());

    @Before
    public void beforeMethod() {
        log.debug("●●before: - " + this.getClass().getName());
    }

    @BeforeResult
    public void beforeResultMethod() {
    }

    @After
    public void afterMethod() {
        ActionInvocation invocation = ActionContext.getContext().getActionInvocation();
        log.debug("●●after: - " + this.getClass().getName() + " Result(" + invocation.getResultCode() + ")");
    }

    public void setSession(Map<String, Object> session) {
        this.sessionMap = session;
    }

    public Map<String, Object> getSession() {
        return sessionMap;
    }

    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    public HttpServletRequest getRequest() {
        return request;
    }

    public void setServletResponse(HttpServletResponse response) {
        this.response = response;
    }

    public HttpServletResponse getResponse() {
        return response;
    }

}

 

然后修改PagingSampleAction.java

public class PagingSampleAction extends CommonAction implements ModelDriven<PagingSampleModel> {

...................................

 

运行后可以看到log

[2011-10-11 13:54:38,700] DEBUG http-8080-Processor25 leo.test.action.PagingSampleAction - ●●before: - leo.test.action.PagingSampleAction
[2011-10-11 13:54:38,778] INFO http-8080-Processor25 leo.test.action.PagingSampleAction - execute 开始
[2011-10-11 13:54:38,778] INFO http-8080-Processor25 leo.test.action.PagingSampleAction - searchCallList 开始
..............................................
[2011-10-11 13:54:39,559] INFO http-8080-Processor25 leo.test.action.PagingSampleAction - searchCallList 结束
[2011-10-11 13:54:39,559] INFO http-8080-Processor25 leo.test.action.PagingSampleAction - execute 结束
[2011-10-11 13:54:40,184] DEBUG http-8080-Processor25 leo.test.action.PagingSampleAction - ●●after: - leo.test.action.PagingSampleAction Result(success)

 

-------------------------------------------------------------------------------------------

 

可以得知,程序是按如下顺序运行的:


1.@Before定义的方法beforeMethod()
2.Action
3.@After定义的方法afterMethod()

0 0
原创粉丝点击