`
Raistlin
  • 浏览: 19175 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[原创]WebWork IoC 特性使用

    博客分类:
  • J2EE
阅读更多

      这两天感觉WebWork的IoC特性还是很有用的,记录下来,避免忘记。

 

WebWork相对于Struts支持部分IoC特性,可以减少各组件间的耦合,配合接口编程可以给系统带来更大的灵活性。另一方面,也方便了单元测试。

第一种、使用WebWork默认提供的对JSP隐含对象的注入支持,不用进行太多的设置就可以在Action中直接使用request,session,application等对象。

对应接口常用的包括:

ParameterAware  页表表单中传递的参数,经WebWork转换成Map类型。

SessionAware  session对象接口,经WebWork转换成Map类型。

ApplicationAware  application对象接口,经WebWork转换成Map类型。

ServletRequestAware  HttpServletRequest对象接口。

只要在Action中加入相应变量,并实现接口方法,就可以在Action中直接使用,不需要手工生成和管理对象。

不使用IoC时调用JSP对象使用方法:

        ActionContext ctx = ActionContext.getContext();

        HttpServletRequest request = ServletActionContext.getRequest();

        HttpSession session = request.getSession();

这种手工获取隐含对象的方法必须依赖Web容器,不便于进行单元测试。

使用IoC的方法如下例:

步骤1、Action实现需要访问的相应对象接口。

AlarmRecordAction.java

public class AlarmRecordAction extends ActionSupport implements SessionAware {

       private Map session = null;//定义session变量

       public void setSession(Map arg0) {

              this.session = arg0;

       }

       public String execute() throws Exception {

              String str = session.get(“testName”);//可以直接使用session,Webwork框架会自行注入实例。

              System.out.println(“JSP Session对象中的变量testName::” + str);

       }

}

步骤2、设置xwork.xml文件。

Xwork.xml

<action name="AlarmRecordAction" class="AlarmRecordAction">

       <result name="error" type="redirect">

              <param name="location">error.jsp</param>

       </result>

       <result name="success" type="redirect">

              <param name="location">success.jsp</param>

       </result>

       <interceptor-ref name="defaultStack"/>

</action>

在写JUnit测试用例时,如下:

AlarmRecordActionTest.java

public class AlarmRecordActionTest extends MockObjectTestCase {

AlarmRecordAction action;

protected void setUp() throws Exception {

super.setUp();

action = new AlarmRecordAction();

}

public void testExecute() throws Exception {

action.setSession(new HashMap());

assertEquals("success", action.execute());

}

}

这样就可以传入需要的session,完成Action单元测试。

 

第二种、使用components,实现自定义组件的依赖注入。

步骤1、建立需要在其它类中调用的组件类,可以是实现业务的功能类,也可以是POJO,需要提供无参数的构造函数。

AlarmRecord.java

public class AlarmRecord {

private String AlarmRecordID;

private String AlarmRecordType;

public AlarmRecord() {

}

public void setAlarmRecordID(String id) {

this.AlarmReordID = id;

}

public String getAlarmRecordID() {

return this.AlarmRecordID;

}

}

步骤2、建立组件类的Aware接口。

AlarmRecordAware.java

public interface AlarmRecordAware {

    public void setAlarmRecord(AlarmRecord alarm) ;

}

步骤3、Action类实现组件类Aware接口。

AlarmRecordAction.java

public class AlarmRecordAction extends ActionSupport implements AlarmRecordAware {

    ....

private AlarmRecord alarm;//定义组件对象

public void setAlarmRecord(AlarmRecord alarm) {

this.alarm = alarm;

}

       public String execute() throws Exception {

              String str = alarm.getAlarmRecordID();//可以直接使用alarm,不需要自己new,Webwork框架会自行注入实例。

              System.out.println(“alarm id ::” + str);

       }

...

}

步骤4、编辑components.xml文件,注册组件。

<components>

<component>

    <!—组件存在范围,可以是request,session,application-->

        <scope>session</scope>

    <!—组件类-->

        <class>AlarmRecord</class>

    <!—组件类的Aware接口-->

<enabler>AlarmRecordAware</enabler>

    </component>

</components>

步骤5、编辑web.xml文件,加入相关特性支持。

<filter>

      <filter-name>container</filter-name>

      <filter-class>com.opensymphony.webwork.lifecycle.RequestLifecycleFilter</filter-class>

    </filter>

 

    <filter-mapping>

      <filter-name>container</filter-name>

      <url-pattern>*.action</url-pattern>

    </filter-mapping>

 

    <listener>

      <listener-class>com.opensymphony.webwork.lifecycle.SessionLifecycleListener</listener-class>

    </listener>

 

    <listener>

   <listener-class>com.opensymphony.webwork.lifecycle.ApplicationLifecycleListener</listener-class>

    </listener>

步骤6、编辑xwork.xml文件,让Action支持组件注入。

<action name="AlarmRecordAction" class="AlarmRecordAction">

       <result name="error" type="redirect">

              <param name="location">error.jsp</param>

       </result>

       <result name="success" type="redirect">

              <param name="location">success.jsp</param>

       </result>

<interceptor-ref name="component"/>

           <interceptor-ref name="defaultStack"/>

</action>

    这样就实现了组件注入支持。 JUnit里的使用方法类似前例。

 

分享到:
评论

相关推荐

    webwork2.17中文使用手册

    webwork2.17中文使用手册

    webwork标签的使用和介绍

    WebWork 是一款基于 Java 的 MVC(Model-View-Controller)框架,它提供了强大的标签库来简化JSP页面的开发。这些标签使得开发者能够更高效地处理业务...使用WebWork,开发者可以创建出结构清晰、易于维护的Web应用。

    webwork+spring整合例子 内带使用说明 以及webwork文档(中文)

    整合WebWork和Spring的主要目的是将WebWork的MVC能力和Spring的IoC/DI以及企业服务集成到一个应用中。这样,开发者可以利用WebWork的动态控制层与Spring的强大持久层和事务管理功能,实现更加高效的开发流程。 在这...

    webwork

    9. **版本控制**:WebWork 有多个版本,每个版本都有其特定的功能和改进,例如WebWork 2.x是WebWork的经典版本,而Struts2其实是WebWork与Struts1合并后的产物,继承了WebWork的许多优秀特性。 在提供的"Webwork2 ...

    WebWork教程

    WebWork教程提供了关于如何使用WebWork框架开发Web应用程序的详细指导。它包括了WebWork基础、安装指南、HelloWorld示例、Action动作的介绍以及如何进行Action的单元测试等。此外,还涵盖了ResultType(结果类型)的...

    spring与webwork框架集成

    2. **WebWork2 IoC**:WebWork2 自带了简单的IoC功能,允许在 `xwork.xml` 中配置 Action 依赖的 Bean。例如,`&lt;external-ref&gt;` 标签用于声明 Action 对 DAO 类的依赖。 3. **集成步骤**: - **下载集成库**:需要...

    WebWork 2.2新特性的PPT.rar

    在"WebWork22new.doc"和"WebWork2_2_new.ppt"这两个文件中,读者可以深入了解到WebWork 2.2的新特性、使用方法以及实际应用案例。通过详细阅读和实践,开发者可以充分利用这些新特性来提高开发效率,构建出更加健壮...

    webwork2开发指南

    本指南将深入探讨WebWork2的基础知识、快速入门方法以及高级特性,以帮助开发者更好地理解和应用这一框架。 一、WebWork2基础知识 1. MVC模式:WebWork2遵循MVC设计模式,其中模型(Model)负责处理业务逻辑,视图...

    webwork详细讲解.doc

    本文详细介绍了WebWork框架的基本概念、工作原理、安装过程以及一些关键特性。通过阅读本文,读者应该能够获得足够的知识来开始使用WebWork开发Web应用。此外,还探讨了一些高级主题,如拦截器框架、验证机制以及与...

    webWork

    这个“webWork中文教程”旨在帮助开发者深入理解WebWork框架的原理、特性和实践方法。下面,我们将详细介绍WebWork的核心概念、主要功能以及如何通过学习文档来提升开发技能。 一、WebWork概述 WebWork是由Apache...

    Webwork教程

    12. **Other Spring Integration**:除了基本的Spring框架之外,还有哪些Spring相关的组件可以与WebWork配合使用。 13. **Spring Session Components Workarounds**:解决Spring Session组件中遇到的问题的方法。 14...

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    6. **视图渲染**:WebWork使用JSP、FreeMarker或其他模板引擎作为视图技术,通过ActionSupport类和结果类型来决定如何渲染视图,使得视图层与控制层解耦。 7. **标签库**:WebWork提供了一套自定义的JSP标签,如`...

    webwork所需要的包

    2. **依赖的IoC容器**:WebWork经常与Inversion of Control (IoC) 框架结合使用,例如Spring。`spring-beans.jar`和`spring-context.jar`等文件可能包含Spring框架的相关组件,用于管理对象的生命周期和依赖关系。 ...

    webwork2官方文档中文版

    WebWork2是一款基于Java的开源MVC(Model-View-Controller)框架,它为构建企业级Web应用...对于那些已经熟悉其他MVC框架(如Spring MVC或Struts)的开发者来说,这个文档也是一个了解WebWork2特性和优势的重要资源。

    WebWork 教程

    随着版本演进,WebWork经历了重大变革,最新的WebWork2.x实际上是基于Xwork构建的,Xwork作为底层核心,专注于Command模式的实现,提供了诸如拦截器机制、表单验证、类型转换、OGNL表达式语言以及IoC容器等功能。...

    WEBWORK

    这允许在 JSP 页面中使用 WebWork 的标签,如 `&lt;s:form&gt;`、`&lt;s:textfield&gt;` 等。 3. **welcome-file-list**:定义了当用户访问目录而不是具体文件时,服务器应该显示的默认欢迎页面。在这个例子中,如果用户访问...

    WebWork2.0讲解说明

    本讲解将围绕WebWork2.0的核心概念、主要特性、配置以及实际应用等方面进行详细介绍。 一、WebWork2.0核心概念 1. MVC模式:WebWork2.0遵循MVC设计模式,将业务逻辑、视图展示和数据控制分离,使得开发者可以独立地...

    webwork-register.rar_webwork_webwork 验证_webwork spring

    WebWork和Spring是两个在Java Web开发中广泛使用的框架,它们各自有其独特的优势,并且可以结合使用以增强应用的功能和可维护性。本项目"webwork-register.rar"显然是一个基于WebWork和Spring构建的注册管理系统,让...

Global site tag (gtag.js) - Google Analytics