拦截器是Struts2的一个重要特性。Struts2框架的大多数核心功能都是通过拦截器来实现的,像避免表单重复提交、类型转换、对象组装、验证、文件上传等,都是在拦截器的帮助下实现的。拦截器之所以称为“拦截器”,是因为它可以在Action执行之前和执行之后拦截调用。
案例:
HelloAction.java
package action; import com.opensymphony.xwork2.ActionSupport; public class HelloAction extends ActionSupport{ /** * */ private static final long serialVersionUID = 1L; private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String add(){ message="Hello"; return SUCCESS; } public String delete(){ message="Hello"; return SUCCESS; } @Override public String execute() throws Exception { message="Hello"; return SUCCESS; } }
package util; import java.util.Date; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class MyInterceptor extends AbstractInterceptor { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println(name+"调用之前"+new Date()); long start=System.currentTimeMillis(); String result=invocation.invoke(); long end=System.currentTimeMillis(); System.out.println(name+"调用之后"+new Date()); System.out.println("用时"+(end-start)); return result; } }
package util; import java.util.Date; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; public class MethodInterceptor extends MethodFilterInterceptor { /** * */ private static final long serialVersionUID = 1L; private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override protected String doIntercept(ActionInvocation invocation) throws Exception { System.out.println(name+"调用之前" + new Date()); long start = System.currentTimeMillis(); String result = invocation.invoke(); long end = System.currentTimeMillis(); System.out.println(name+"调用之后" + new Date()); System.out.println("用时" + (end - start)); return result; } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="hello" namespace="/hello" extends="struts-default"> <!-- 声明拦截器 --> <interceptors> <interceptor name="myinterceptor" class="util.MyInterceptor"> <param name="name">简单1拦截器</param> </interceptor> <interceptor name="myinterceptor" class="util.MethodInterceptor"> <param name="name">简单2拦截器</param> </interceptor> </interceptors> <action name="*" class="action.HelloAction" method="{1}"> <result name="success"> /index.jsp </result> <interceptor-ref name="myinterceptor"> <param name="name">1</param> </interceptor-ref> <interceptor-ref name="myinterceptor"> <!-- excludeMethods-------要排除的方法。 includeMethods--------要拦截的方法。 --> <param name="excludeMethods">add,delete</param> <param name="includeMethods">execute</param> <param name="name">2</param> </interceptor-ref> </action> </package> </struts>
调用includeMethods(要拦截的方法)中的方法execute执行为:
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘ starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> ${message} </form> </body> </html>
原文:http://blog.csdn.net/yantingmei/article/details/20629083