- 浏览: 2663416 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
webwork2分为webwork和xwork,通过webwork和xwork的解耦,我们的测试已经可以脱离HTTP协议了
比如我们有一个简单的用户注册功能,
Domain Object: User类
Business Object: UserDao类
Action :RegisterAction
- package mypackage;
- public class User {
- private String username;
- private String password;
- private String age;
- private String tel;
- User(){
- }
- public String getAge() {
- return age;
- }
- public void setAge(String age) {
- this.age = age;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getTel() {
- return tel;
- }
- public void setTel(String tel) {
- this.tel = tel;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- }
UserAction:
- package mypackage;
- import com.opensymphony.xwork.Action;
- public class UserAction implements Action {
- private User user = new User();
- public String execute() throws Exception {
- System.out.println("begin execute!......");
- UserDao.saveUser(user);
- return SUCCESS;
- }
- public User getUser() {
- return user;
- }
- }
- package mypackage;
- public class UserDao {
- public static void saveUser(User user) {
- System.out.println("save User");
- }
- }
如果是平时测试,可能需要打开web server来测试,但是由于webwork2采用xwork核心,它不与特定的面向HTTP的Servlet发生关联,所以我们测试的时候完全不需要打开web服务器,我们只需要提供一个map就可以达到测试的要求
- package test;
- import java.util.HashMap;
- import java.util.Map;
- import junit.framework.TestCase;
- import com.opensymphony.xwork.ActionProxy;
- import com.opensymphony.xwork.ActionProxyFactory;
- public class TestWebWork extends TestCase {
- Map items;
- protected void setUp() throws Exception {
- super.setUp();
- items = new HashMap();
- items.put("user.username", "sanyun");
- items.put("user.password", "123456");
- }
- public void testWebwork() throws Exception {
- ActionProxyFactory factory = ActionProxyFactory.getFactory();
- // 第一个参数表示namesapce
- // 第二个参数表示action name
- // 第三个参数表示是否执行返回的结果,如果result返回是action就可能需要再次执行,这里就不需要
- // 第三个参数表示是否清理Context
- ActionProxy proxy = factory.createActionProxy("default", "register",
- items, false, true);
- // 执行action,控制台会打印 begin execute!......表示Action确实执行了
- String result = proxy.execute();
- String uaername = (String) proxy.getInvocation().getStack().findValue(
- "user.username");
- String passwork = (String) proxy.getInvocation().getStack().findValue(
- "user.password");
- assertEquals("success", result);
- assertEquals("sanyun", uaername);
- assertEquals("123456", passwork);
- }
- protected void tearDown() throws Exception {
- super.tearDown();
- }
- }
这里没有看不到一个HttpServletRequest, HttpServletResponse,因为xwork不会和特定的Servlet打交道(也许是FTP,JMS,都有可能),webwork才会和具体的HttpServlet打交道 webwork通过com.opensymphony.webwork.dispatcher.FilterDispatcher把application,session,parameter,等等都放在一个HashMap中,以后在xwork中就只会操作map里面的数据了
配置文件:必须放在classpath的根目录下
- <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN"
- "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
- <xwork>
- <include file="webwork-default.xml" />
- <package name="default" extends="webwork-default">
- <action name="register" class="mypackage.RegisterAction">
- <interceptor-ref name="params"/>
- <result name="success" >success.jsp</result>
- </action>
- </package>
- </xwork>
简单说明:package name就是 namespace,interceptor-ref表示拦截器,,webwork使用拦截器来实现控制反转.,比如 对于每个action都有可能需要获取请求页面的参数,记录日志,等等,这些任务并不和本身的业务逻辑沾边, 我们把这些系统级的任务称为基础设施,我们可以把这些基础设施抽象出来,如果我们的客户程序需要用到获取请求页面的功能,只需要在配置文挡里面配置就可以了,客户程序不需要显示的调用getParameter("username"),这就是为什么我们Action里面没有这些方法的原因了. 拦截器是通过动态代理来实现的.
最后需要配置web.xml,主要是把com.opensymphony.webwork.dispatcher.FilterDispatcher设置成前端分发器,处理所有的页面请求而已.
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd">
- <web-app>
- <display-name>Acme Corp</display-name>
- <filter>
- <filter-name>webwork</filter-name>
- <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher
- </filter-class>
- </filter>
- <filter-mapping>
- <filter-name>webwork</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
评论
集成spring进行测试的情况,需要自己加载spring context.Action也需要从spring context中取出。
发表评论
-
JFace Text Editor完全掌握之终极指南(4)
2009-09-01 18:15 0错误标识(Error Marking) Error Marki ... -
clipse
2009-09-01 15:19 0JFace Text Editor是JFace里面一个功能强大 ... -
webwork2入门(二.2)
2007-03-22 11:41 3160在web应用经常需要要对用户提交的表单进行验证 webwork ... -
webwork2入门(二.1)
2007-03-21 17:43 3213这一节,我们要掌握的东西 webwork操作session w ... -
webwork2入门(一)
2007-03-15 15:53 2414本文采用一个用户注册的例子,起到一个最简单的webwok2 ...
相关推荐
WebWork2的核心设计原则是减少样板代码,提高开发效率,并提供更好的可测试性。 首先,让我们来看看WebWork2的控制器层。WebWork2的动作(Action)是处理用户请求的核心组件,它接收HTTP请求,执行业务逻辑,并将...
9. **测试工具**:WebWork2提供了单元测试和集成测试的支持,便于开发者进行质量保证。 10. **最佳实践和示例**:官方文档会包含一系列最佳实践指导和示例代码,帮助开发者快速上手并避免常见陷阱。 通过阅读...
9. **测试与调试**:WebWork2提供了良好的测试支持,你可以配置Action的模拟对象以进行单元测试,同时通过日志配置来帮助调试。 10. **安全设置**:WebWork2允许你配置安全性相关的设置,如防止XSS攻击、CSRF防护等...
根据提供的文件信息,我们可以推断出这是一篇关于Java私塾中的Spring框架讲解与WebWork2整合教程的文章。下面将围绕这些关键词展开详细的讲解。 ### Spring框架基础 #### Spring简介 Spring是一个开源框架,最初由...
8. **测试与调试**:提供关于单元测试、集成测试和调试WebWork2应用的方法,可能包括JUnit和Mockito的使用。 9. **最佳实践与性能优化**:分享一些开发WebWork2应用的最佳实践,以及如何优化应用程序性能,如减少...
Webwork2支持依赖注入,有助于降低组件之间的耦合度,提高代码的可测试性和可维护性。 10. **最佳实践和设计模式** "Webwork2开发指南"可能涵盖了如何遵循最佳实践来开发Webwork2应用,包括如何合理划分Action...
通过“Webwork2_guide.pdf”,读者将能够深入学习如何利用Webwork2的各种特性,包括Action的设计、拦截器的编写、配置文件的配置、异常处理和测试方法等,从而成为一名熟练的Webwork2开发者。这个指南对于初学者和...
WebWork2 的设计目标是简化Web开发,提高代码的可维护性和可测试性,同时保持高度的定制能力。本指南将深入探讨WebWork2 的核心概念、特性以及最佳实践。 一、WebWork2 核心概念 1. MVC模式:WebWork2 遵循MVC架构...
6. **依赖注入(Dependency Injection,DI)**:WebWork2支持依赖注入,允许开发者通过配置文件或注解来管理对象的创建和依赖关系,提高代码的可测试性和解耦度。 7. **Ognl(Object-Graph Navigation Language)**...
Webwork2支持单元测试和集成测试,可以使用JUnit和其他测试工具进行动作类和业务逻辑的测试。 为了深入了解Webwork2,阅读《Webwork2 开发指南》和《webwork深入浅出.pdf》是非常有帮助的。这两份文档会详细解释...
Spring框架作为企业级应用的主流框架之一,与Webwork2的结合可以实现更为强大的业务逻辑管理和依赖注入,进一步增强应用的灵活性和可测试性。 #### WebWork 配置说明 Webwork2的配置是框架应用的关键,正确的配置...
11. **测试**:WebWork支持单元测试和集成测试,文档会讲解如何编写和运行针对WebWork应用的测试。 12. **最佳实践**:除了技术细节,文档还会提供一些开发和设计的最佳实践,帮助开发者遵循良好的编程习惯。 通过...
WebWork2是一个基于Java的轻量级Web应用框架,它为开发人员提供了强大的MVC(模型-视图-控制器)架构支持,简化了Web应用程序的开发。本学习笔记将深入探讨WebWork2的核心概念、主要特性以及如何在实际项目中应用。 ...
- **测试与调试**:通过HTTP客户端工具或浏览器测试应用,利用WebWork2提供的日志和调试工具进行问题排查。 **3. 学习资源** "Webwork2开发指南"这本书可能涵盖了如下主题: - WebWork2的安装和配置 - MVC模式的...
为了提高开发效率,WebWork2支持模拟请求进行单元测试,开发者无需启动服务器即可测试Action。此外,其内置的日志系统和调试工具提供了丰富的信息,帮助开发者定位问题。 七、Maven集成与插件扩展 WebWork2可以很好...
用于集成WebWork2.1和Spring的一个jar文件,编译级别jdk1.4, 已测试过,可以整合
### WebWork2开发指南概述 WebWork框架,作为OpenSymphony组织下的开源项目,一度在Apache Struts等框架的光环下显得低调而神秘。然而,它凭借着强大的功能和灵活的设计,逐渐吸引了众多开发者的眼球。WebWork框架...
10. **测试支持**:WebWork1.4版本提供了JUnit集成,便于进行单元测试和集成测试,确保代码的质量。 "www.pudn.com.txt"可能是一个文档,可能包含了一些关于WebWork的学习资源或教程链接。而"webwork"这个文件可能...