这两天感觉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中文使用手册
WebWork 是一款基于 Java 的 MVC(Model-View-Controller)框架,它提供了强大的标签库来简化JSP页面的开发。这些标签使得开发者能够更高效地处理业务...使用WebWork,开发者可以创建出结构清晰、易于维护的Web应用。
整合WebWork和Spring的主要目的是将WebWork的MVC能力和Spring的IoC/DI以及企业服务集成到一个应用中。这样,开发者可以利用WebWork的动态控制层与Spring的强大持久层和事务管理功能,实现更加高效的开发流程。 在这...
9. **版本控制**:WebWork 有多个版本,每个版本都有其特定的功能和改进,例如WebWork 2.x是WebWork的经典版本,而Struts2其实是WebWork与Struts1合并后的产物,继承了WebWork的许多优秀特性。 在提供的"Webwork2 ...
WebWork教程提供了关于如何使用WebWork框架开发Web应用程序的详细指导。它包括了WebWork基础、安装指南、HelloWorld示例、Action动作的介绍以及如何进行Action的单元测试等。此外,还涵盖了ResultType(结果类型)的...
2. **WebWork2 IoC**:WebWork2 自带了简单的IoC功能,允许在 `xwork.xml` 中配置 Action 依赖的 Bean。例如,`<external-ref>` 标签用于声明 Action 对 DAO 类的依赖。 3. **集成步骤**: - **下载集成库**:需要...
在"WebWork22new.doc"和"WebWork2_2_new.ppt"这两个文件中,读者可以深入了解到WebWork 2.2的新特性、使用方法以及实际应用案例。通过详细阅读和实践,开发者可以充分利用这些新特性来提高开发效率,构建出更加健壮...
本指南将深入探讨WebWork2的基础知识、快速入门方法以及高级特性,以帮助开发者更好地理解和应用这一框架。 一、WebWork2基础知识 1. MVC模式:WebWork2遵循MVC设计模式,其中模型(Model)负责处理业务逻辑,视图...
本文详细介绍了WebWork框架的基本概念、工作原理、安装过程以及一些关键特性。通过阅读本文,读者应该能够获得足够的知识来开始使用WebWork开发Web应用。此外,还探讨了一些高级主题,如拦截器框架、验证机制以及与...
这个“webWork中文教程”旨在帮助开发者深入理解WebWork框架的原理、特性和实践方法。下面,我们将详细介绍WebWork的核心概念、主要功能以及如何通过学习文档来提升开发技能。 一、WebWork概述 WebWork是由Apache...
12. **Other Spring Integration**:除了基本的Spring框架之外,还有哪些Spring相关的组件可以与WebWork配合使用。 13. **Spring Session Components Workarounds**:解决Spring Session组件中遇到的问题的方法。 14...
6. **视图渲染**:WebWork使用JSP、FreeMarker或其他模板引擎作为视图技术,通过ActionSupport类和结果类型来决定如何渲染视图,使得视图层与控制层解耦。 7. **标签库**:WebWork提供了一套自定义的JSP标签,如`...
2. **依赖的IoC容器**:WebWork经常与Inversion of Control (IoC) 框架结合使用,例如Spring。`spring-beans.jar`和`spring-context.jar`等文件可能包含Spring框架的相关组件,用于管理对象的生命周期和依赖关系。 ...
WebWork2是一款基于Java的开源MVC(Model-View-Controller)框架,它为构建企业级Web应用...对于那些已经熟悉其他MVC框架(如Spring MVC或Struts)的开发者来说,这个文档也是一个了解WebWork2特性和优势的重要资源。
随着版本演进,WebWork经历了重大变革,最新的WebWork2.x实际上是基于Xwork构建的,Xwork作为底层核心,专注于Command模式的实现,提供了诸如拦截器机制、表单验证、类型转换、OGNL表达式语言以及IoC容器等功能。...
这允许在 JSP 页面中使用 WebWork 的标签,如 `<s:form>`、`<s:textfield>` 等。 3. **welcome-file-list**:定义了当用户访问目录而不是具体文件时,服务器应该显示的默认欢迎页面。在这个例子中,如果用户访问...
本讲解将围绕WebWork2.0的核心概念、主要特性、配置以及实际应用等方面进行详细介绍。 一、WebWork2.0核心概念 1. MVC模式:WebWork2.0遵循MVC设计模式,将业务逻辑、视图展示和数据控制分离,使得开发者可以独立地...
WebWork和Spring是两个在Java Web开发中广泛使用的框架,它们各自有其独特的优势,并且可以结合使用以增强应用的功能和可维护性。本项目"webwork-register.rar"显然是一个基于WebWork和Spring构建的注册管理系统,让...