`

xwork的command模式 .

    博客分类:
  • java
 
阅读更多

转载

http://blog.csdn.net/flyforlove/article/details/1661965

 

xworkcommand模式中的几个类

命令的发出者:ActionProxy

命令的传送者:ActionInvaction

命令的执行者:Action

 

当然,xwork的内部调用没有这么简单,使用xml配置文件来联系各个类。

现在用程序模拟以下xworkcomman模式工作方式。

 

首先是ActionProxy

ActionProxy.java

 

publicinterface ActionProxy {

public String execute() throws Exception;

}

 

ActionProxy是命令的发出着,也就是说client并不是直接让Action执行的,而是让ActionProxy来代理执行(虽然这儿看起来有点儿像代理模式,但是不是).

下面是ActionProxy的实现

package jp.co.wqf;

 

publicclass ActionProxyImpl implements ActionProxy {

 

Invocation invocation;

public ActionProxyImpl(Invocation invocation) {

this.invocation = invocation;

}

public String execute() throws Exception {

returninvocation.invoke();

}

 

}

要注入一个Invocation让其来传送命令。

 

接下来是ActionInvocation

ActionInvocation.java

public interface Invocation {

public String invoke() throws Exception;

}

定义一个调用方法。

它的实现为

import java.util.ArrayList;

import java.util.Iterator;

import java.util.Map;

 

publicclass InvocationImpl implements Invocation {

Iterator interceptors;

Action action;

Map resultMap;

booleanexecuted = false;

String resultCode;

public InvocationImpl(ArrayList interceptors, Action action, Map resultMap){

this.interceptors = interceptors.iterator();

this.action = action;

this.resultMap = resultMap;

}

public String invoke() throws Exception {

if(executed){

thrownew Exception("Action has been execute!");

}

if(interceptors.hasNext()) {

Interceptor interceptor = (Interceptor) interceptors.next();

interceptor.intercept(InvocationImpl.this);

}else{

resultCode = action.exectute();

}

if(!executed){

Result result = (Result) resultMap.get(resultCode);

if(result!=null)

result.execute();

executed = true;

}

returnresultCode;

}

 

}

这是一个比较主要的类,很多处理都是通过这儿来中转的,首先它通过注入递归调用来实现了方法拦截,然后再调用Action来执行真正的处理,并根据处理结果来调用不同的结果处理类(Result

 

 

最后是Action接口

Action.java

publicinterface Action {

public String exectute();

}

Action接口里定义了一个execute方法,用来执行某种操作,例如,数据库的CRUD各个操作等,用一个String的返回值来表示执行结果,比如“success”,“error”等。实际上xwork支持任何的执行方法,不仅限于execute,只要在xwork.xml文件中指定执行哪个方法就可以了

 

以下是Action接口的实现类,这儿返回一个“error”字符串。

publicclass ActionImpl implements Action {

 

public String exectute() {

System.out.println("Action Execute");

//return "success";

return"error";

}

 

}

 

另外还有InterceptorResult接口,实现类。

Interceptor.java

public interface Interceptor {

publicvoid intercept(Invocation invocation) throws Exception;

}

InterceptorImpl.java

public class InterceptorImpl implements Interceptor {

private String name;

public InterceptorImpl(String name){

this.name = name;

}

publicvoid intercept(Invocation invocation) throws Exception {

System.out.println(name+", start");

invocation.invoke();

System.out.println(name+", end");

}

 

}

Result.java

public interface Result {

publicvoid execute();

}

ResultImpl.java

public class ResultImpl implements Result {

private String name;

public ResultImpl(String name) {

this.name = name;

}

publicvoid execute() {

System.out.println("Result "+this.name+" execute!");

}

 

}

测试类如下:

public class Test {

 

/**

*@paramargs

*@throwsException

*/

publicstaticvoid main(String[] args) throws Exception {

// TODO Auto-generated method stub

ArrayList interceptors = new ArrayList();

for (int i = 0; i < 5; i++) {

Interceptor inter = new InterceptorImpl("Interceptor_"+i);

interceptors.add(inter);

}

Result result = null;

Map resultMap = new HashMap();

result = new ResultImpl("success");

resultMap.put("success", result);

result = new ResultImpl("error");

resultMap.put("error", result);

 

Action action = new ActionImpl();

Invocation invocation = new InvocationImpl(interceptors, action, resultMap);

 

ActionProxy actionProxy = new ActionProxyImpl(invocation);

actionProxy.execute();

}

 

}

 

要点:

1.comman模式

2.IOC注入

3.递归调用(使用递归调用来实现方法拦截是个比较新颖的方法)

分享到:
评论

相关推荐

    xwork-2.1.6.rar

    XWork利用了设计模式中的Command模式,将请求转换为可执行的对象,使得Action执行更加灵活。通过`com.opensymphony.xwork2.DefaultActionProxy`,我们可以看到如何创建和调度这些命令。 5. **ValueStack与OGNL** ...

    xwork-2.0.4.jar.zip

    XWork是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Navigation ...

    XWork_Core_2.3.16.2_API

    XWork是一个标准的Command模式实现,并且完全从web层脱离出来。Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Navigation ...

    xwork源码及札包

    XWork是Apache Struts框架的核心组件,它提供了一套强大的动作(Action)框架,使得开发者能够构建基于MVC(Model-View-Controller)模式的Web应用。这个资源包包含了XWork项目的源代码、文档、核心组件、插件以及...

    Xwork的源文件

    XWork的核心组件包括Action、Interceptor(拦截器)和Command设计模式。Action是业务逻辑的载体,它接收请求、处理业务并返回结果。Interceptor则提供了一种在Action执行前后插入额外逻辑的方式,例如日志记录、权限...

    Xwork源代码源文件下载

    1. **Action与Command模式**:Xwork基于设计模式中的Command模式,实现了Action接口,Action是业务逻辑的载体,接收并处理来自用户请求的数据。 2. **OGNL(Object-Graph Navigation Language)**:Xwork使用OGNL...

    struts2xwork2帮助文档

    2. **Command模式**:XWork2基于Command模式,Action作为命令对象,接收请求并执行相应操作。 3. **Type Conversion**:XWork2提供类型转换机制,自动将请求参数转换为Action字段的类型。 4. **Exception Handling...

    xwork-core

    xwork 核心jar包,XWork是一个标准的Command模式实现,并且完全从web层脱离出来。 xwork-core-2.1.6.jar

    struts2.014和xwork2.07源码下载

    3. **Command设计模式**:XWork中的Action实际上实现了Command设计模式,接收请求、执行命令并返回结果。 4. **动态方法调用**:XWork支持动态方法调用,允许通过字符串来调用Action的方法,增强了灵活性。 5. **...

    xwork2.1.6源码及其之前版本的源码

    7. **模块化设计**:XWork遵循模块化设计,源码中各模块分工明确,如Command模块负责Action的执行,Converter模块处理数据类型转换,使得代码可读性和可维护性大大提高。 8. **设计模式**:XWork源码中运用了多种...

    Xwork——Struts2核心

    Xwork最初源自WebWork项目,但随着技术的发展,它已经被抽象成一个独立的Command设计模式框架,并不再仅仅局限于Web应用开发领域。这意味着Xwork不仅可以被用于构建Web应用程序,还可以应用于非Web场景,如服务器端...

    openlogic-xwork-2.0.7-all-src-1.zip

    - **Command Pattern**: XWork采用了命令模式设计,使得请求处理过程可扩展且易于维护。 2. **工作流程** - **Dispatcher**: 调度器是XWork的核心组件,它接收请求,根据配置信息决定调用哪个Action,并管理...

    xwork-2.1.2

    XWork采用了Command模式设计,将每个Action实例视为一个命令对象,通过工作流组件执行命令。这种设计使得复杂的业务逻辑可以被分解为多个小任务,降低了耦合度。 4. **Ognl表达式语言** XWork内部使用了OGNL...

    最新Struts2 jar 架包

    xwork-core-2.1.6.jar Command模式框架,WebWork和Struts2都基于xworkcommons-logging-1.0.4.jar Java日志工具类包 freemarker-2.3.15.jar 表现层框架,定义了struts2的可视组件主题 ognl-2.7.3.jar OGNL表达式语言...

    Struts2最近几个漏洞分析&稳定利用Payload1

    http://localhost:8080/S2-016/hello.action?debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c... (省略) ``` 此payload的主要目的是绕过Struts2的安全限制,...

    javaweb后端开发ssh库包

    2. `xwork-core.jar`:XWork是Struts2的基础,提供Action、Command模式的支持。 3. `ognl.jar`:Object-Graph Navigation Language,用于表达式语言支持,用于访问和操作对象属性。 4. `freemarker.jar`:Freemarker...

    struts2-lib.zip

    - `xwork-core.jar`:XWork框架的库,它是Struts 2的基础,提供了ActionContext、Command模式等基础服务。 - `ognl.jar`:Object-Graph Navigation Language,用于表达式语言,Struts 2中的数据绑定和表达式计算依赖...

    struts2 jar包

    3. **xwork-2.0.4.jar**:XWork是Struts2的基础,提供了动作(Action)和命令(Command)模式的支持。它包含了一些基础的框架功能,如类型转换、数据绑定、异常处理等,这些功能也被Struts2框架所继承。 4. **ognl-...

    Webwork2开发

    Xwork作为基础框架,提供了核心功能,如Command模式实现、前端拦截器、表单验证、类型转换以及强大的表达式语言OGNL(Object Graph Notation Language)和IoC(Inversion of Control)容器。而Webwork2则基于Xwork,...

    webwork开发文档 struts2学习助手

    Xwork则是一个基础的Command模式框架,提供了前端拦截器、运行时表单验证、类型转换、OGNL表达式语言以及IoC容器等功能。 【Xwork详解】 Xwork作为WebWork的基础,其特点在于: 1. **前端拦截机(Interceptor)**:...

Global site tag (gtag.js) - Google Analytics