Struts1与Struts2区别?
(1)Struts1执行过程:
<1>Web容器启动的时候ActionServlet被初始化,加载struts-config.xml配置文件。
<2>浏览器发送请求到ActionServlet时,ActionServlet对请求进行处理。根据请求的路劲和配置信息找到对应的Action和ActionForm。
<3>在确定将要调用的Action和对应的ActionForm后,将请求中包含的值填充到ActionForm中。在调用Action的execute方法前ActionServlet需要准备好ActionMapping参数。
<4>Action调用业务逻辑方法得到返回值,并返回ActionForward对象。
<5>控制权重新回到ActionServlet,ActionServlet根据Action返回的ActionForward对象转发到相应的页面。
<6>处理结果返回给浏览器。
(2)Struts2执行过程:
<1>当WEB容器收到一个请求时,它将请求传递给一个标准的过滤器链(如ActionContentCleanUp)。
<2>FilterDispatcher被调用,它调用ActionMapper确定请求调用哪个Action,ActionMapper返回一个收集了Action信息的ActionMapping对象
<3>FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager)从配置文件中读取配置信息,然后创建ActionInvocation对象,ActionInvocation被创建的同时,填充了需要的所有的对象和信息,它在调用Acton之前会依次调用所用配置的拦截器(Intercepter)。
<4>一旦Action执行返回结果字符串,ActionInvocation负责根据struts.xml中的配置查找结果字符串对应的Result,然后执行这个Result,一般Resul会调用一些模板(JSP)来呈现页面。
<5>之后拦截器会被再次执行(顺序和Action执行之前相反),最后响应,被返回给在web.xml中配置的哪些过滤器(FilterDispatcher等)。
(3)Struts1与Struts2区别:
<1>struts1要求Action类继承一个抽象基类,而不是接口。
struts2的action类可以实现一个action接口,也可以实现其他接口。
<2>sturts1 的action是单例模式,线程是不安全的。
struts2 的action线程是安全的,action为每一个请求都生成了一个实例。
<3>sturts1过去依赖serlet API,不容易测试。
struts2不依赖于容器,允许Action脱离容器单独被测试。
<4>Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。
Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
<5>Struts1整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL(Object Graph Notation Language)。
<6>Struts1使用标准JSP机制把对象绑定到页面中来访问。
Struts2使用ValueStack技术使taglib能够访问值而不需要把页面(view)和对象绑定起来。
<7>Struts1的ActionForm属性通常都是String类型。
Struts2使用OGNL进行类型转换提供基本和常用对象的转换器。
<8>Struts1支持在ActionForm的validate方法中手动校验,或通过Commons Validator的扩展来校验。
Struts2支持通过validate方法和XWork校验框架来进行校验。
<9>Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用。
Struts1与Struts2区别?的更多相关文章
- Struts1与Struts2的12点区别
Struts1与Struts2的12点区别 1) 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类:Struts 1的一个具体问题是使用抽象类编程而不是接口.Str ...
- Struts1和Struts2的区别和对比(完整版)
Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...
- Struts2五、Struts1与Struts2的区别
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...
- Struts1和Struts2的区别和对比
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2 ...
- struts1和struts2和springMVC的区别和介绍
MVC是web开发常用的模式,M即模型层(Model):主要由javabean来实现.V即视图层(View):主要由jsp.velocity.freemarker等.C即控制层(Controller) ...
- Struts在Web.xml中的配置及Struts1和Struts2的区别
(1)配置Struts的ActionServlet <servlet>元素来声明ActionServlet <servlet-name>元素:用来定义Servle ...
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- Struts1、Struts2和SpringMVC剖析【转载】
前段框架用了不少,今天就来做个总结.网上关于Struts1.Struts2.SpringMVC的文章有很多,这里的内容就是基于它们,来做个比较. 这三个框架是按照上面的顺序,依次出现的,它们都是对MV ...
- Struts1和Struts2对照
最近学习Struts1和Struts2.好多人.提到非常多的信息. Struts2不从Struts1进化. Struts2的前身WebWork. 呢,看了一些资料,下边就来比較比較. 一.架构分析 S ...
随机推荐
- leetcode中等题
# Title Solution Acceptance Difficulty Frequency 1 Two Sum 44.5% Easy 2 Add Two Number ...
- Python 并发网络库
Python 并发网络库 Tornado VS Gevent VS Asyncio Tornado:并发网络库,同时也是一个 web 微框架 Gevent:绿色线程(greenlet)实现并发,猴子补 ...
- Antdesign Form 实现页面控件的赋值加载
使用Antdesign Form时,当页面加载时,需要从后台获取数据,对Form中控件的默认赋值.看似比较简单的需求,而且Antdesign 官方文档中也有相应介绍,然后对于Form 的CheckBo ...
- 给Repater增加等号
//不改变数据结构的情况下,增加行号.对Application服务器压力增大,减少DB服务器压力. protected void repShow_ItemDataBound(object sen ...
- 13 Python之第一类对象闭包和迭代器
def fn(): print("我叫fn") fn() print(fn)## <function fn at 0x0000000001D12E18> f ...
- 使用python的selenium库刷超星网课
网课很多看不完呀 所以动手做了一个基础的自动答题和下一节的程序 用到了python 3 selenium Chrome 如何自动化Chrome?https://www.cnblogs.com/eter ...
- HTML 5的革新之一:语义化标签一节元素标签。
摘至于:<HTML 5的革新——语义化标签(一)> HTML 5的革新之一:语义化标签一节元素标签. 在HTML 5出来之前,我们用div来表示页面章节,但是这些div都没有实际意义.(即 ...
- python之multiprocessing多进程
multiprocessing 充分利用cpu多核一般情况下cpu密集使用进程池,IO密集使用线程池.python下想要充分利用多核CPU,就用多进程. Process 类Process 类用来描述一 ...
- C语言的unsigned做双目运算符的奇怪问题
首先看代码: #include <stdio.h> void main() { ; unsigned ; ) { printf("%d-%d=%d,大于0", num1 ...
- lemon用法
zhx精讲用法: 首先,打开 柠檬图标. 只留g++ 然后按照这个路径进入c++找编译文件: 打开后点确定. 然后在你的试题中找到后缀为cdf的文件(为试题的全部信息),然后添加到试题中,然后把选手文 ...