`
gyfmp5
  • 浏览: 96676 次
社区版块
存档分类
最新评论

WebWork IoC 特性使用

    博客分类:
  • Java
阅读更多

这两天感觉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的方法如下例:

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

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”);//可以直接使用sessionWebwork框架会自行注入实例。

              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) ;

}

步骤3Action类实现组件类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,不需要自己newWebwork框架会自行注入实例。

              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里的使用方法类似前例。
分享到:
评论

相关推荐

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

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

    spring与webwork框架集成

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

    Webwork教程

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

    webwork-register.rar_webwork_webwork 验证_webwork spring

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

    WebWork 教程

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

    webwork中文 webwork中文参考 webwork中文资料 webwork学习资料

    `webwork-2.x.jar`是WebWork的核心库,而`webwork-example.war`包含了示例应用,是学习WebWork特性和最佳实践的宝贵资源。此外,`webwork-migration.jar`对于从1.x版本迁移到2.x版本非常有用,提供了必要的类文件和...

    webwork教程

    - **核心特性**: - 前端拦截器(Interceptor)机制。 - 运行时表单属性验证。 - 类型转换。 - 强大的表达式语言(OGNL—Object Graph Notation Language)。 - IoC(Inversion of Control)容器支持。 #### 二...

    webwork 2.2.7.zip打包下载

    这些JAR文件是WebWork框架运行的基础,它们包含了WebWork的核心API、AOP(面向切面编程)支持、IoC( inversion of control,控制反转)容器、以及其他必要的库,如OGNL(Object-Graph Navigation Language)表达式...

    webwork教程很好的学习教程

    - **Spring**:Spring框架提供了依赖注入等功能,可以与WebWork结合使用。 - **Hibernate**:Hibernate是一个持久层框架,可以用来处理数据库操作。 - **Xml-RPC**:允许WebWork应用与其他系统通过XML格式的数据进行...

    webwork in action

    - **依赖注入(IoC)**:第六章详细阐述了依赖注入的概念及其在WebWork中的应用,帮助开发者更好地管理和组织代码结构。 #### 四、内容展示技术 - **结果的使用**:第七章讨论了如何使用不同的结果类型来呈现数据...

    webwork+spring+hibernate 开发资料

    Spring可以通过其Action代理来管理和控制WebWork的动作,同时Spring的AOP特性可以用于处理如日志记录、事务管理等跨切面关注点。 Spring与Hibernate的整合则主要体现在数据访问层。Spring提供了HibernateTemplate或...

    webWork2.2+spring +SpringMVC组合 例子

    Spring则以其强大的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性著称,可以为整个应用提供核心服务;而Spring MVC作为Spring的一部分,是现代Web应用程序的主流选择,提供了优雅的控制器层...

    webwork spring hibernate 整合 示例 项目 完整 代码

    WebWork的核心特性包括强大的数据绑定、类型安全的参数映射、异常处理和国际化支持。 Spring 是一个全面的Java企业级应用开发框架,它通过提供IoC容器和AOP功能,简化了对象的创建和依赖管理。Spring还提供了对...

    搭建WEBWORK+SPRING+HIBERNATE框架

    - 使用Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)特性,创建Service层和DAO层,实现业务逻辑和数据访问。 - 将Service和DAO注入到WebWork的Action中,...

    Spring+hibernat+webwork2整合例子

    这三者分别是Spring作为应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,Hibernate作为ORM(Object-Relational Mapping)解决方案,而WebWork2则是一个轻量级的MVC(Model-View-...

    WebWork2开发指南

    ### WebWork2开发指南知识点概览 #### 一、WebWork2概述 ...通过本指南的学习,开发者不仅可以掌握WebWork2的基本使用方法,还能够深入了解其高级特性和最佳实践,从而在实际项目中更高效地运用这一框架。

    Webwork in action

    综上所述,“WebWork in Action”这本书不仅覆盖了WebWork的基础知识,还深入探讨了其实现细节和高级特性,非常适合希望深入了解并掌握这一框架的开发者阅读。通过本书的学习,读者可以系统地了解WebWork的各个方面...

Global site tag (gtag.js) - Google Analytics