标签:des style blog io ar color os 使用 sp
1.Struts架构图
2.Struts执行过程分析
3.Interceptor拦截器过程模拟
//main.java public class Main { public static void main(String[] args) { new ActionInvocation().invoke(); } }
//ActionInvocation .java public class ActionInvocation { List<Interceptor> interceptors = new ArrayList<Interceptor>(); int index = -1; Action a = new Action(); public ActionInvocation() { this.interceptors.add(new FirstInterceptor()); this.interceptors.add(new SecondInterceptor()); } public void invoke() { index ++; if(index >= this.interceptors.size()) { a.execute(); }else { this.interceptors.get(index).intercept(this); } } }
//FirstInterceptor .java public class FirstInterceptor implements Interceptor { public void intercept(ActionInvocation invocation) { System.out.println(1); invocation.invoke(); System.out.println(-1); } }
//SecondInterceptor .java public class SecondInterceptor implements Interceptor { public void intercept(ActionInvocation invocation) { System.out.println(2); invocation.invoke(); System.out.println(-2); } }
//Interceptor .java public interface Interceptor { public void intercept(ActionInvocation invocation) ; }
//Action .java public class Action { public void execute() { System.out.println("execute!"); } }
4.定义自己的拦截器(不常用)
//MyInterceptor .java public class MyInterceptor implements Interceptor { public void destroy() { // TODO Auto-generated method stub } public void init() { // TODO Auto-generated method stub } public String intercept(ActionInvocation invocation) throws Exception { long start = System.currentTimeMillis(); String r = invocation.invoke(); long end = System.currentTimeMillis(); System.out.println("action time = " + (end - start)); return r; } }
<struts> <constant name="struts.devMode" value="true"></constant> <package name="test" namespace="/" extends="struts-default"> <interceptors> <interceptor name="my" class="com.bjsxt.interceptor.MyInterceptor"></interceptor> </interceptors> <action name="test" class="com.bjsxt.action.TestAction"> <result>/test.jsp</result> <interceptor-ref name="my"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>
5.使用token拦截器控制重复提交(很少用)
6. 类型转换
写自己的转换器:
//方法一
public class MyPointConverter extends DefaultTypeConverter{ @Override public Object convertValue(Object value, Class toType) { if(toType == Point.class) { Point p = new Point(); String[] strs = (String[])value; String[] xy = strs[0].split(","); p.x = Integer.parseInt(xy[0]); p.y = Integer.parseInt(xy[1]); return p; } if(toType == String.class) { return value.toString(); } return super.convertValue(value, toType); } }
//方法二
public class MyPointConverter extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Point p = new Point();
String[] strs = (String[])values;
String[] xy = strs[0].split(",");
p.x = Integer.parseInt(xy[0]);
p.y = Integer.parseInt(xy[1]);
return p;
}
@Override
public String convertToString(Map context, Object o) {
// TODO Auto-generated method stub
return o.toString();
}
}
三种注册方式:
i. 局部:XXXAction-conversion.properties
p(属性名称) = converter
ii. 全局:xwork-conversion.properties
com.xxx.XXX(类名)= converter (java.awt.Point=com.bjsxt.converter.MyPointConverter)
iii. Annotation
如果遇到非常麻烦的映射转换
标签:des style blog io ar color os 使用 sp
原文地址:http://www.cnblogs.com/enjoy-life-clh/p/4122146.html