XWork是一个标准的Command模式实现,其目的是:创建一个泛化的、可重用且可扩展的命令模式框架,而不是一个特定在某个领域使用的框架,创建一个工程,下载xwork-core-2.1.6.jar
创建一个xwork.xml文件,内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 2.0//EN" "http://www.opensymphony.com/xwork/xwork-2.0.dtd">
<xwork>
<include file="xwork-default.xml" />
<package name="myPackage" extends="xwork-default" namespace="/helloWorld">
<result-types>
<result-type name="myConsole" class="ResultTest" />
</result-types>
<interceptors>
<interceptor name="helloInterceptor" class="InterceptorTest"/>
</interceptors>
<action name="actionTest" class="ActionTest">
<interceptor-ref name="helloInterceptor"/>
<result type="myConsole">
</result>
</action>
</package>
</xwork>
xwork主要的内容有Action,Interceptor,Result,可以继承它们来实现相应的功能,Action用来实现用户逻辑的功能,继承Interceptor实现拦截器的功能,Result是Action结果的视图展现,
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
public class ActionTest implements Action {
@Override
public String execute() throws Exception {
System.out.println("text execute:"+ActionContext.getContext().get("name"));
return SUCCESS;
}
}
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class InterceptorTest extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("intercept:"+ActionContext.getContext().get("name"));
return invocation.invoke();
}
}
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.ActionContext;;
public class ResultTest implements Result {
private static final long serialVersionUID = 1L;
@Override
public void execute(ActionInvocation invocation) throws Exception {
System.out.println("result execute:"+ ActionContext.getContext().get("name"));
}
}
新建一个Main.java来启动整个程序
import java.util.HashMap;
import java.util.Map;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.ActionProxyFactory;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationManager;
import com.opensymphony.xwork2.inject.Container;
public class Main {
public static void main(String args[]){
ConfigurationManager cm = new ConfigurationManager();
Configuration config = cm.getConfiguration();
Container c = config.getContainer();
ActionProxyFactory actionProxyFactory = c.getInstance(ActionProxyFactory.class);
Map<String,Object> m = new HashMap<String,Object>();
m.put("name", "bobo");
ActionProxy actionProxy = actionProxyFactory.createActionProxy(
"/helloWorld", "actionTest",null, m);
try {
actionProxy.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
执行该程序,将会得到如下结果
intercept:bobo
text execute:bobo
result execute:bobo