这两天感觉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里的使用方法类似前例。
分享到:
相关推荐
整合WebWork和Spring的主要目的是将WebWork的MVC能力和Spring的IoC/DI以及企业服务集成到一个应用中。这样,开发者可以利用WebWork的动态控制层与Spring的强大持久层和事务管理功能,实现更加高效的开发流程。 在这...
2. **WebWork2 IoC**:WebWork2 自带了简单的IoC功能,允许在 `xwork.xml` 中配置 Action 依赖的 Bean。例如,`<external-ref>` 标签用于声明 Action 对 DAO 类的依赖。 3. **集成步骤**: - **下载集成库**:需要...
12. **Other Spring Integration**:除了基本的Spring框架之外,还有哪些Spring相关的组件可以与WebWork配合使用。 13. **Spring Session Components Workarounds**:解决Spring Session组件中遇到的问题的方法。 14...
WebWork和Spring是两个在Java Web开发中广泛使用的框架,它们各自有其独特的优势,并且可以结合使用以增强应用的功能和可维护性。本项目"webwork-register.rar"显然是一个基于WebWork和Spring构建的注册管理系统,让...
随着版本演进,WebWork经历了重大变革,最新的WebWork2.x实际上是基于Xwork构建的,Xwork作为底层核心,专注于Command模式的实现,提供了诸如拦截器机制、表单验证、类型转换、OGNL表达式语言以及IoC容器等功能。...
`webwork-2.x.jar`是WebWork的核心库,而`webwork-example.war`包含了示例应用,是学习WebWork特性和最佳实践的宝贵资源。此外,`webwork-migration.jar`对于从1.x版本迁移到2.x版本非常有用,提供了必要的类文件和...
- **核心特性**: - 前端拦截器(Interceptor)机制。 - 运行时表单属性验证。 - 类型转换。 - 强大的表达式语言(OGNL—Object Graph Notation Language)。 - IoC(Inversion of Control)容器支持。 #### 二...
这些JAR文件是WebWork框架运行的基础,它们包含了WebWork的核心API、AOP(面向切面编程)支持、IoC( inversion of control,控制反转)容器、以及其他必要的库,如OGNL(Object-Graph Navigation Language)表达式...
- **Spring**:Spring框架提供了依赖注入等功能,可以与WebWork结合使用。 - **Hibernate**:Hibernate是一个持久层框架,可以用来处理数据库操作。 - **Xml-RPC**:允许WebWork应用与其他系统通过XML格式的数据进行...
- **依赖注入(IoC)**:第六章详细阐述了依赖注入的概念及其在WebWork中的应用,帮助开发者更好地管理和组织代码结构。 #### 四、内容展示技术 - **结果的使用**:第七章讨论了如何使用不同的结果类型来呈现数据...
Spring可以通过其Action代理来管理和控制WebWork的动作,同时Spring的AOP特性可以用于处理如日志记录、事务管理等跨切面关注点。 Spring与Hibernate的整合则主要体现在数据访问层。Spring提供了HibernateTemplate或...
Spring则以其强大的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性著称,可以为整个应用提供核心服务;而Spring MVC作为Spring的一部分,是现代Web应用程序的主流选择,提供了优雅的控制器层...
WebWork的核心特性包括强大的数据绑定、类型安全的参数映射、异常处理和国际化支持。 Spring 是一个全面的Java企业级应用开发框架,它通过提供IoC容器和AOP功能,简化了对象的创建和依赖管理。Spring还提供了对...
- 使用Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)特性,创建Service层和DAO层,实现业务逻辑和数据访问。 - 将Service和DAO注入到WebWork的Action中,...
这三者分别是Spring作为应用的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)容器,Hibernate作为ORM(Object-Relational Mapping)解决方案,而WebWork2则是一个轻量级的MVC(Model-View-...
### WebWork2开发指南知识点概览 #### 一、WebWork2概述 ...通过本指南的学习,开发者不仅可以掌握WebWork2的基本使用方法,还能够深入了解其高级特性和最佳实践,从而在实际项目中更高效地运用这一框架。
综上所述,“WebWork in Action”这本书不仅覆盖了WebWork的基础知识,还深入探讨了其实现细节和高级特性,非常适合希望深入了解并掌握这一框架的开发者阅读。通过本书的学习,读者可以系统地了解WebWork的各个方面...