- 浏览: 2602146 次
- 来自: 杭州
文章分类
- 全部博客 (1190)
- webwork (4)
- 网摘 (18)
- java (104)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (15)
- 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 (8)
- 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)
最新评论
-
Aqu415:
,默认是netty还是hassion?
dubbo入门 -
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介
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 3102在web应用经常需要要对用户提交的表单进行验证 webwork ... -
webwork2入门(二.1)
2007-03-21 17:43 3175这一节,我们要掌握的东西 webwork操作session w ... -
webwork2入门(一)
2007-03-15 15:53 2381本文采用一个用户注册的例子,起到一个最简单的webwok2 ...
相关推荐
用于集成WebWork2.1和Spring的一个jar文件,编译级别jdk1.4, 已测试过,可以整合
webwork2.2.7+spring+hibernate+Mysql集成开发用到的包,其中包括了spring Junit4测试包。
绝对能用的jar包经过本人测试的,目前有些人的上传的包是不能用的,我把我自己配置好的 共享出来给大家分享
2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以...
数据库使用的是oracle。 其中的数据库连接需要根据你的实际进行修改。 测试类里面的操作数据库的信息需要做一些相应的更改,对应你要操作的测试表进行建javaban。
a) Struts2是以web work优秀的设计思想为核心,吸收了struts1的部分优点,建立了一个基于webwork和struts1的MVC框架。 二、 优点: a) 结构清晰,使开发者只关注业务逻辑实现即可。 b) 提供了丰富的标签,大大提高了...
1、是mvc的基础,其他的框架比如struts1,struts2,webwork都是从servlet基础上发展过来的。所以掌握servlet是掌握mvc的关键。 2、Servlet把最底层的api暴漏给程序员,使程序员更能清楚的了解mvc的各个特点。 3、...
│深入浅出STRUTS 2 Struts Ti却发现了二者在技术与开发人员这两个层面上的共同之处,不久之后,两个项目就在WebWork的技术基础上进行了合并2。 当我们说起WebWork的时候,我们实际上说的是两个项目——XWork和...
由传统Struts1和WebWork两个经典框架发展而来 Struts2框架=Struts2+XWork Strust2 核心功能 允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,没有实现,getter,setter方法)对象 作为Action,没有耦合 ...
用户可以自由选择Struts、Spring/MVC,Webwork,Taperstry、JSF这几个web框架。采用TDD的开发方式,使用JUnit测试各层,甚至测试 jsp 输出的 w/o 错误。为了简化开发,预定义好了一套目录结构、基类、用来创建数据库...
16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...
亲自做了一个struts2后台接收前台jsp页面传来的数组参数demo,因为参考网上的资源如用webwork表单提交等集成到项目有问题,所以做了一个单独的demo,经测试,用表单提交类似users[0].name,users[1].name的数组参数是...
用户可以自由选择Struts、Spring/MVC,Webwork,Taperstry、JSF这几个web框架。采用TDD的开发方式,使用JUnit测试各层,甚至测试 jsp 输出的 w/o 错误。为了简化开发,预定义好了一套目录结构、基类、用来创建数据库...
16.2协同使用spring和webwork2/struts2 16.3集成spring和tapestry 16.3.1集成spring和tapestry3 16.3.2集成spring和tapestry4 16.4协同使用spring和jsf 16.4.1解析jsf管理的属性 16.4.2解析springbean 16.4.3...
自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。...如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用其他标记语言。
用户可以自由选择Struts、Spring/MVC,Webwork,Taperstry、JSF这几个web框架。采用TDD的开发方式,使用JUnit测试各层,甚至测试 jsp 输出的 w/o 错误。为了简化开发,预定义好了一套目录结构、基类、用来创建数据库...
16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...
2. **关键策略**:Spring框架的关键策略包括低侵入性编程、松耦合和DI(依赖注入)。这些策略有助于提高代码的可维护性和可测试性。 3. **模块和特性**:Spring框架由多个模块组成,包括核心容器、数据访问/集成、...
毕业论文使用jsp+webwork+spring+jdbctemplete+MySQL开发 而jsp运用了大量的jstl,吸收了freemarker的大部分精华 毕业论文包括以下模块: 登录、注册、用户管理、角色管理、权限管理,用户角色,角色权限,模块...