Struts2是从Struts1发展而来,但实际上Struts2与Struts1在框架的设计思想上面还是有很大的区别,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强;而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对Stuts1来说慢一点。
Servlet 依赖: Struts1 严重依赖于Servlet Struts 2 不依赖于容器
因此对Struts1的Action进行测试的时候是很困难的,需要借助与其他的测试工具,Struts2的Action可以象测试其他的一些Model层的Service类一样进行测试
控制器:
struts1的前端控制器是一个Servlet,名称为ActionServlet
struts2的前端控制器是一个filter,名称为FilterDispatcher,在struts2.1中叫StrutsPrepareAndExecuteFilter。
请求参数
在struts1中使用formbean封装请求参数
在struts2中直接使用action的属性来封装请求参数
Struts1的运行原理
1)客户端向容器(如Tomcat)提交一个请求
2)核心控制器ActionServlet解析struts-config.xml
3)找到相对应的Action
4)Action处理完业务,跳到相应的jsp页面
5)jsp响应给客户端
struts2的运行原理
1、tomcat 启动的时候会加载 web.xml 、核心控制器FilterDispatcher 会加载并解析 struts.xml
2、客户端会发送一个请求到 action 、FilterDispatcher 会根据后缀名进行拦截
3、FilterDispatcher根据struts.xml 的配置文件信息 找到 某个action 对应的某个类里的指定方法
4、执行相关的业务逻辑最后返回 一个String
5、<action/>里配置<result/> name的属性值与返回的String进行匹配,跳转到指定的jsp 页面
Struts1的Action是单实例的,
一个Action的实例处理所有的请求
Struts2的Action是一个请求对应一个实例
每次请求时都新new出一个对象