- 浏览: 919334 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
struts1 truts1中的mvc :
2001年6月发布struts1
struts1的核心是控制器,由两部分组成:核心控制器和业务逻辑控制器,核心控制器是ActionServlet,由struts1提供;业务逻辑控制是用户自定义的action,由应用开发者提供。
整个应用由客户端请求驱动,客户端向web发送的请求被struts1的核心控制器ActionServlet拦截,ActionServlet根据请求 决定是否调用业务逻辑控制器处理用户请求(事实上,业务逻辑控制器还是控制器,它只是负责调用模型来处理用户请求),当用户请求处理完后,其处理结果通过 jsp呈现给用户。
如果用户只是希望得到某个url资源,得有ActionServlet将被请求的资源转发给用户。
1)struts1的model部分主要由底层的业务逻辑组件充当,这些业务逻辑组件封装了底层数据库访问、业务逻辑方法实现。对于一个成熟的企业应用而 言,model部分不是一个简单的javabean所能完成的。总之,model部分封装了整个应用的所有业务逻辑,但整个部分并不是struts1提供 的,struts1也没有为实现model组件提供任何支持。
2)struts1的view部分采用jsp实现。提供了标签库,能减少脚本的使用。标签库可以输出控制器的处理结果。
但struts1锁支持的表现层技术非常单一:既不支持FreeMarker、Velocity等模版技术,也不支持JasperReports等报表技术
3)struts1的核心控制器ActionServlet继承HttpServlet类,因此可配置为标准的servlet,负责拦截所有的http请求
业务逻辑控制器负责处理用户请求,但其自身并不具有处理能力,而是调用model来处理请求
不得不佩服struts1设计者高度解耦的设计:控制器并没有直接转发请求,而仅仅返回一个ActionForward对象(可理解为逻辑视图名)--实 际的转发放在配置文件struts-config.xml中进行管理,配置文件中定义了逻辑视图名与视图资源之间的对应关系。当 ActionServlet得到处理器返回的ActionForward对象后,根据对应关系,将视图资源呈现给用户。
struts1的种种缺陷 :
1)支持的表现层技术单一
struts1只支持jsp作为表现层技术,不提供表现层技术的整合。出现年代太早,当时还没有出现FreeMarker、Velocity等技术
2)与servlet API严重耦合,难于测试
因为struts1是在model2的基础上发展起来的,因此它完全是基于Servlet API的,所以在struts1的业务逻辑控制器内,充满了大量的servlet API
action中的参数,通常web容器负责初始化,HttpServletRequest和HttpServletResponse都是servlet API,严重依赖web服务器,因此,一旦脱离web容器,测试action非常困难。
Action代码片段:
3)代码严重依赖struts1 API,属于侵入式设计
struts1的action类必须继承struts1的action基类,实现处理方法时,又包含了大量的struts1 API:ActionMapping、ActionForm、ActionForward。
这种侵入式设计的最大弱点在于,一旦系统需要重构,这些action类将完全没有利用价值,成为废品。
可见,struts1的action类的这种侵入式设计 导致了较低的代码复用。
------------------------------
webwork
采用更加松耦合的设计,系统的action和servlet API不在耦合,使单元测试更方便,允许系统从B/S结构向C/S结构转换
webwork支持更多的表现层技术,如velocity,freemarker和xslt等
webwork可以脱离web应用使用,webwork有自己的控制反转(Inversion of Control)容器,通过控制反转,能让测试更简单
从处理流程上来看,webwork与struts1很相似,核心都是控制器组成:
1)核心控制器ServletDispatcher,由框架提供
2)业务逻辑控制器Action,由程序员提供
相对于struts1,webwork优点
1)action无需与Servlet API耦合,更容易测试
2)action无需与webwork耦合,代码重用率高
仅仅实现webwork的action接口,包含了一个execute方法。
实现一个接口和继承一个类是完全不同的概念,实现一个接口对类的污染小的多,该类可以实现其他任意接口,还可以继承一个父类;但一旦已经继承了一个父类,则意味着该类不能在继承其他父类。
3)支持更多的表现层技术,有更好的适应性
----------------
struts2
2006年
struts2的大致处理流程如下:
1)浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf
2)核心控制器FilterDispatcher根据请求决定调用合适的Action
3)webwork的拦截器链自动对请求应用通用功能,例如:workfolw、validation或文件上传等功能
4)回调Action的execute方法,该execute方法先获取用户请求参数。实际上,因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求
5)Action的execute方法处理结果信息将被输出到浏览器中,此时支持的视图技术非常多。
struts2的配置文件有两份:
1)配置Action的struts.xml文件
2)配置struts2全局属性的struts.properties
定义action的处理结果时,可以指定多个result,result元素指定execute方法返回值和试图资源之间的映射关系。
<result name="cancel" type="redirect-action">Welcome</result>
定义result元素时,可以指定两个属性:type和name,其中name指定execute方法返回的字符串,type指定转向的资源类型,可以是 jsp,也可以是freemarker等,甚至是另一个action,这也是struts2可以支持多种视图技术的原因。
struts2的控制器组件:
所有的MVC框架都是以控制器组件为核心,struts2的控制器有两部分组成:FilterDispatcher和业务控制器Action。
实际上,struts2中起作用的业务控制器不是用户定义的Action,而是系统生成的Action代理,但该Action代理以用户定义的Action为目标。
通过查看action代码发现,struts2的action比webwork的action更彻底,该action无需实现任何父接口,无需实现任何struts2基类,该action完全是一个POJO(普通、传统的java对象),具有很好的复用性。
归纳起来,struts2的action具有如下优势:
1)action类完全是一个pojo,因此具有很好的代码复用性;
2)action类无需与servlet API耦合,因此进行单元测试非常简单
3)action类的execute方法就仅返回一个字符串作为处理结果,该处理结果可映射到任何的结果,甚至是另一个action
-------------------------
struts1和struts2的简要对比:
1)action实现类方面的对比:struts1要求action类继承一个抽象基类,是使用抽象类编程而不是接口;struts2 action类可以实现一个action接口,也可以实现其他接口,使可选和定制的服务成为可能。struts2提供一个ActionSupport基类 去实现常用的接口。但即使是这个action接口也不是必须实现的,只要是一个包含execute方法的pojo类,都可以用作struts2的action 。
2)线程模版方面的对比:struts1 action是单例模式并且必须是线程安全的,因为仅有action的一个实例来处理所有请求。单例策略限制了struts1 action能做的事,并且要在开发式特别小心。action资源必须是线程安全的;struts2 action为每一个请求产生一个实例,因此没有线程安全问题。
3)servlet依赖方面的对比:struts1 action依赖servlet API;struts2 action不在依赖于servlet api,从而允许action脱离web容器运行,降低测试难度。
4)可测性方面的对比:struts1 action的容器,脱离web容器测试struts1 action需要借助于第三方扩展 struts testcase;struts2 action可通过初始化,设置属性,调用方法来测试。
5)封装请求参数的对比
6)表达式语言方面的对比:struts1 整合了JSTL ,struts2也可以使用JSTL,而且整合了一种更强大和灵活的表达式语言:OGNL
7)绑定值到视图的对比:struts1使用标准JSP机制把对象绑定到视图页面;struts2使用“ValueStack”技术,使标签库能访问值,而不需要把对象和视图页面绑定到一起。
8)类型转换的对比:Stuts1的actionForm的属性通常都是String类型,struts1使用comments-beanutils进行 类型转换,每个类一个转换器,转换器是不可配置的;struts2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。
9)数据校验对比:struts1支持在actionFrom重写validate方法中手动校验,或者通过整合Commons alidator框架来完成数据校验。struts2支持重写validate方法进行校验,也支持整合xwork校验框架进行校验。
10)action执行控制的对比:struts1支持为每个模块对应一个请求(即生命周期的概念),但模块中的所有action必须共享相同的生命周 期。struts2支持通过连接器堆栈(Interceptor Stacks)为每个action创建不同的生命周期。
-------------------
发表评论
-
struts中通过action跳转到外网(框架页面)
2010-04-26 16:26 2308HttpSession session = arg2.getS ... -
struts中利用ExceptionHandler处理异常
2010-02-03 18:14 704在Struts1.X的版本中加入了对异常的处理 ... -
Struts+spring, 多模块Struts配置文件
2010-01-13 10:41 11821. web.xml ... <init-param&g ... -
struts1.2多模块开发
2010-01-13 10:24 1469一、多个配置文件的支持和模块的支持支持多个配置文件,是指你能够 ... -
struts1.2与spring整合手记
2010-01-12 16:51 1062相关文章: spring入门编程问题集锦 ... -
Struts action mapping (controller的inputforward属性)
2010-01-12 16:22 31351. Full action 这可以说是Struts ac ... -
Struts1.2 控制流程----面试时可用
2010-01-12 15:34 1089有的同学问我如何向面 ... -
深入Struts1.1(下)
2010-01-12 15:21 995在Struts 1.1中,除了DynaActionForm以外 ... -
深入Struts1.1(中)
2010-01-12 15:19 760ActionServlet 我们首先来 ... -
深入Struts 1.1(上)
2010-01-12 15:18 916作为基于MVC模式的Web应 ... -
struts1.x执行流程分析
2010-01-12 14:49 1463先来整体的了解一下Struts的工作流程. 在实现一个基于S ... -
一步一步学习 Struts
2009-11-05 16:22 820专栏: 一步一步跟我学Struts2 (17) 如何学习S ... -
Struts2 OGNL
2009-11-05 15:27 1265众所周知,Strut 2的Action类通过属性可以获得所有相 ... -
struts2验证信息重复出现解决方案
2009-10-17 10:33 1277今天遇到一个很蠢的问题,所以写下来给自己留个教训。 ... -
STRUTS2.0影射REST风格地址
2009-10-14 14:40 1069[摘要]: 介绍如何改写Struts2的Restful2Act ... -
strust2标签实践总结
2009-10-06 00:42 14491:输出action中属性值,在jsp页面中显示用:<s ... -
关于Spring , Struts结合学习
2009-09-30 13:28 884关于Spring , Struts结合学习。 一、前言 刚 ...
相关推荐
### Struts1与Struts2的主要区别 #### 概述 Apache Struts 是一个用于构建企业级Java Web应用的开源框架。它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在...
Struts2 和 Struts1 是两个著名的 Java Web 开发框架,它们都出自 Apache Software Foundation,但有着显著的区别。Struts1 是早期的 MVC 框架,而 Struts2 则是在 WebWork 框架的基础上发展起来的,它吸收了 Struts...
Struts1和Struts2是两个非常著名的Java Web框架,它们都由Apache软件基金会开发,用于构建MVC(Model-View-Controller)架构的应用程序。虽然它们在目标上相似,但在设计模式、功能特性和使用体验上存在显著差异。...
Struts 2整合Struts 1,允许开发者利用Struts 1已有的投资,同时享受Struts 2带来的优势,如增强的类型安全和更强大的拦截器机制。 在《Struts 2权威指南--基于WebWork核心的MVC开发》这本书中,作者李纲深入浅出地...
Struts1和Struts2是两个不同的版本,它们各自拥有独特的特性和功能,但在Java Web开发领域都扮演了重要角色。 **Struts1** Struts1是最早的版本,它在2001年发布,是基于ApacheJakarta项目的一个框架。Struts1的...
Struts1和Struts2是两个著名的MVC框架,它们都是Apache软件基金会的Apache Struts项目的一部分,用于构建基于Java的Web应用程序。然而,两者在设计和实现上有显著的差异。 1. **架构模式的区别** - **Struts1.x** ...
Struts1和Struts2是两个非常著名的Java Web框架,它们在设计模式、可测试性、输入处理和表现层等方面存在显著的区别。 首先,Action类的设计有所不同。在Struts1中,Action类需要继承一个抽象基类,这限制了Action...
### Struts1与Struts2的主要区别 #### 一、Action执行机制的不同 - **Struts1**: 在Struts1框架中,Action是基于单例模式的,这意味着所有的请求都会共享同一个Action实例。这就导致了如果在Action中保存实例变量...
struts1 和 struts2所需jar包。主要包含以下内容: struts-1.3.10-all.zip struts-1.3.10-apps.zip struts-1.3.10-lib.zip struts-1.3.10-src.zip struts-2.3.4.1-all.zip struts.rar
Struts1 和 Struts2 是两个非常著名的Java Web框架,由Apache软件基金会开发,用于构建企业级的MVC(Model-View-Controller)应用程序。这两个框架在Java开发领域有着广泛的应用,极大地提高了开发效率和代码的可...
1. OGNL(Object-Graph Navigation Language)表达式注入:这是Struts2最著名的漏洞类型,由于框架在处理用户输入时没有进行充分的过滤和验证,攻击者可以通过构造恶意的OGNL表达式来执行任意代码,从而导致远程代码...
1. **struts2-core.jar**:这是Struts2的核心库,包含了框架的主要组件,如Action、Result、Interceptor等。它定义了请求处理的流程,提供了ActionContext、ValueStack等关键对象。 2. **xwork-core.jar**:XWork是...
Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试Struts2漏洞测试...
2. **数据绑定**:Struts1使用Form Bean,Struts2使用OGNL,后者更强大,支持动态数据绑定。 3. **异常处理**:Struts2的异常处理更直观,可以配置全局异常处理。 4. **性能**:Struts2在某些方面比Struts1更快,...
struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...
1. 灵活性:Struts2 框架提供了一个灵活的架构,可以根据项目的需求进行定制。 2. 可扩展性:Struts2 框架提供了一个可扩展的架构,可以轻松地添加新的功能。 3. 高效性:Struts2 框架提供了一个高效的架构,可以...
struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...
Struts2是Struts1的升级版,它在Struts1的基础上引入了许多改进和新特性,提高了开发效率和应用性能。 Struts1是一个经典的MVC框架,它的核心组件包括Action、Form Bean、Action Mapping和Tiles等。Action是业务...
- **定义与特点**:Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,它继承了Struts1的优点,同时在设计上更加灵活、易用,支持拦截器、类型转换、文件上传等特性。Struts2使用过滤...