`
dongivan
  • 浏览: 6851 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类

Hello, XWork Interceptor

阅读更多

XWork是一个通用的Command模式框架,对它的关注始于我对Interceptor结构了解的需要。对于起步而言,Hello World级的东西总是最为快捷的选择。

在XWork中,Action用以处理核心的逻辑,下面就是一个:

HelloAction.java

java 代码
  1. import com.opensymphony.xwork.Action;   
  2.   
  3. public class HelloAction implements Action {   
  4.     public String execute() throws Exception {   
  5.         System.out.println("Hello, World");   
  6.         return SUCCESS;   
  7.     }   
  8. }  

然后是调用这个Action,如果直接调用的话,一来代码显得没有多大意义,二来后面的戏就没法继续了。于是写出这样的代码:

Main.java

java 代码
  1. import com.opensymphony.xwork.ActionProxyFactory;   
  2. import com.opensymphony.xwork.ActionProxy;   
  3.   
  4. public class Main {   
  5.     public static void main(String[] args) throws Exception {   
  6.         ActionProxyFactory factory = ActionProxyFactory.getFactory();   
  7.         ActionProxy proxy = factory.createActionProxy("""hello"null);   
  8.         proxy.execute();   
  9.     }   
  10. }   
  11.   

AcionProxy,我们可以将它看作Action的一个壳,它的调用最终会作用在Action身上,因此它拥有了“proxy”的美名。而ActionProxyFactory,名字就体现出了它的作用,制造AcitonProxy。
先别忙着运行程序,智慧如你一定会想到,这个proxy怎么和前面的HelloAction关联在一起。我们还需要一个配置文件:

xwork.xml

  1. <!---->
  2.  "http://www.opensymphony.com/xwork/xwork-1.0.dtd">  
  3. <xwork>  
  4.     <package name="default">  
  5.         <action name="hello" class="HelloAction">               
  6.         action>  
  7.     package>  
  8. xwork>  

“Hello”,这样一个字符串起到“一桥飞架南北,天堑变通途”的作用,一端它在ActionProxyFactory创建ActionProxy时,作为传入参数连接起proxy,另一端它在配置文件中,与具体类型相连,找到了具体的Action。
既然困难已经排除,还等什么?就这样,“Hello, World”出现了。也许会有些无关大雅的警告,说明我们没有为HelloAction返回success进行处理,忽略它。

blog的标题提醒我,终极目标是Interceptor。Interceptor是这样一种架构模式,它允许将服务透明地添加到框架之中,当我们关注的事件发生时,就会自动触发这个服务。JBoss之所以灵活,其核心架构就是Interceptor。对了,XWork的来源于WebWork,而WebWork的创造者便是大名鼎鼎的Rickard Oberg,而他正是JBoss灵活的架构正是出自他的手笔。J2EE开发者的工具箱中还有一件工具也采用了Interceptor的实现,它便是Servlet Filter。了解Interceptor对于理解AOP有着相当的好处,因为二者之间存在太多的相似,以致于有人专门站出来声明“AOP != Interceptor”。

对于程序员而言,任何话语都没有代码来得实惠,下面就是一个Interceptor:

HelloInterceptor.java

java 代码
  1. import com.opensymphony.xwork.interceptor.Interceptor;   
  2. import com.opensymphony.xwork.ActionInvocation;   
  3.   
  4. public class HelloInterceptor implements Interceptor {   
  5.     public void init() {           
  6.     }   
  7.   
  8.     public void destroy() {           
  9.     }   
  10.   
  11.     public String intercept(ActionInvocation invocation) throws Exception {   
  12.         System.out.println("Hello, Interceptor");   
  13.            
  14.         return invocation.invoke();   
  15.     }   
  16. }   

省略用以管理声明周期的init和destroy,我们把焦点放在intercept方法。除了一句将用以证明它存在的打印语句之外,这个方法中还有一条语句:
   

java 代码
  1. return invocation.invoke();  


在通常的Interceptor实现中,各个Interceptor往往会形成一条链,这句invocation.invoke()就是把控制权交出的方式,调用便是沿着这条链一步步向后面走去,熟悉设计模式的朋友一眼便能看出,这是职责链的一种实现,而它恰恰是Interceptor架构的关键。

为了让它发光发热,我们还需要在配置文件里做一些修改,先是加上一个Interceptor:

xml 代码
  1. <interceptors>  
  2.     <interceptor name="helloInterceptor" class="HelloInterceptor"/>  
  3. interceptors>  


接着,要让action知道它的存在,我们还要修改Action:

xml 代码
  1. <action name="hello" class="HelloAction">  
  2.     <interceptor-ref name="helloInterceptor"/>  
  3. action>  

至于主文件,就不再修改了,否则如何体现“透明”的添加服务呢!
再次运行程序,劳动成果得到了体现:
Hello, Interceptor
Hello, World

来自 http://dreamhead.blogbus.com/logs/2004/12/549553.html

分享到:
评论

相关推荐

    Struts2入门之HelloWorld

    在我们的"HelloWorld"示例中,我们需要创建一个Action类,继承自`org.struts2.dispatcher.ng.ExecuteAction`或实现`com.opensymphony.xwork2.Action`接口。 2. **配置文件**:Struts2的核心配置文件是`struts.xml`...

    Struts2之Hello World | #struts2

    Struts2框架通过拦截器(Interceptor)机制来处理HTTP请求,这些拦截器可以进行预处理和后处理,如日志记录、权限验证等。Action类是业务逻辑的载体,它实现了接口`com.opensymphony.xwork2.Action`,并负责处理请求...

    Struts2系列(一)——永远的HelloWorld

    import org.apache.struts2.interceptor.MessageStoreInterceptor; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { private String message; public ...

    struts2hello

    6. **扩展性**:Struts2的强大在于其高度可扩展性,可以集成其他技术,如Spring、Hibernate等,提供拦截器(Interceptor)机制进行业务逻辑的预处理和后处理,以及丰富的插件支持。 通过学习和实践"struts2hello",...

    xworks核心文件

    这部分内容可能是一个简单的示例,演示如何使用XWork2构建一个“Hello World”应用程序。 #### XWork Validation XWork内置了一套验证机制,可以轻松地验证用户输入的有效性,支持多种验证类型,如必填验证、长度...

    webWork2.26 的helloWorld 例子

    3. **配置文件**:WebWork的配置文件通常命名为`struts-config.xml`或`xwork.xml`,在这个例子中可能是`WebWorkHelloWorld`目录下的某个配置文件。配置文件定义了Action的映射、拦截器链等信息。 4. **...

    struts2官方教程(一)--hello world

    4. **拦截器(Interceptor)**:Struts2的拦截器机制使得在Action调用前后可以插入额外的功能,如日志、权限检查等。默认的拦截器栈包含了诸如参数绑定、异常处理等功能。 5. **表达式语言(OGNL)**:Struts2使用...

    xworkdocs 对struts2学习有帮助

    - **XWork2 HelloWorld Tutorial**:一个简单的入门示例,演示了如何使用XWork来构建Web应用。 #### 七、其他相关信息 - **XWork Configurations**:进一步扩展了配置方面的内容,包括高级配置选项。 - **XWork ...

    Struts 2 自学之路: 1 准备工作及helloworld

    1. 创建一个Action类,如`HelloWorldAction.java`,实现`com.opensymphony.xwork2.Action`接口: ```java public class HelloWorldAction implements Action { @Override public String execute() { return ...

    Struts2.0拦截器总结

    要创建一个自定义拦截器,需要实现`com.opensymphony.xwork2.interceptor.Interceptor`接口。该接口包含三个方法:`init()`、`destroy()`和`intercept(ActionInvocation invocation)`。 ```java package ...

    Struts2学习笔记(一) 环境的搭建与HelloWorld程序

    在后续的学习中,你将更深入地了解Struts2的特性,包括Interceptor拦截器、结果类型、OGNL表达式、动态方法调用、插件扩展等。此外,还会涉及如何与Spring、Hibernate等其他框架集成,以构建更复杂的Java Web应用...

    struts-helloworld.zip

    4. **拦截器(Interceptor)**:拦截器是Struts2的一大特色,它们在Action调用前后执行,可以实现日志记录、权限验证、数据校验等功能。通过在`struts.xml`中配置,可以灵活地组合和调整拦截器栈。 5. **OGNL...

    快速入门struts2.0的一个简单的例子

    拦截器通过实现`com.opensymphony.xwork2.interceptor.Interceptor`接口或扩展`com.opensymphony.xwork2.DefaultInterceptor`来创建。拦截器可以用于日志记录、权限验证、事务管理等。 **4. 配置文件** Struts2的...

    struts2.0之action

    &lt;interceptor-ref name="defaultStack"/&gt; ``` 在上述配置中,Struts 2.0将调用`HelloWorld`类的`customMethod`而不是默认的`execute`方法。 总的来说,Struts 2.0的Action机制更加灵活,允许开发者自由...

    Struts 2.0的Action讲解

    Struts 2还提供了多种方式来改变Action的执行逻辑,比如通过配置Action的`result`元素,或者使用拦截器(Interceptor)来改变Action的执行流程。拦截器可以用于实现通用的功能,如登录检查、权限验证等,这样就不...

    struts2学习笔记

    如果希望改变默认的`execute()`调用行为,Struts2提供了拦截器(Interceptor)机制。拦截器可以插入到Action执行流程中,执行自定义逻辑,如日志、权限检查等,甚至可以改变Action的执行路径。这类似于Struts1中的...

    webwork开发文档 struts2学习助手

    1. **前端拦截机(Interceptor)**:允许在Action执行前后进行拦截操作,如登录验证、性能监控等。 2. **运行时表单属性验证**:支持动态验证表单字段,确保输入数据的有效性。 3. **类型转换**:自动将用户输入的...

    webwork2教程

    &lt;default-interceptor-ref name="defaultStack"/&gt; &lt;result name="success" type="dispatcher"&gt;ex01-success.jsp &lt;/xwork&gt; ``` - **Action 配置**:这里定义了一个名为 `helloWebWorld` 的 Action,其实现类...

    struts2.0之helloword

    4. **编写Action**:创建一个Java类,实现`com.opensymphony.xwork2.ActionSupport`接口,并重写`execute()`方法。在这个方法中,你可以编写"Hello, World"的输出逻辑。 5. **配置Action**:由于我们使用的是...

    struts2拦截器

    1. 创建拦截器类:首先,你需要创建一个实现`com.opensymphony.xwork2.interceptor.Interceptor`接口的Java类。这个类需要实现`intercept()`方法,这是拦截器的核心逻辑,会在Action执行前和后被调用。 ```java ...

Global site tag (gtag.js) - Google Analytics