整理链接:http://blog.youkuaiyun.com/chen978616649/article/details/7599901
struts1:核心控制器:ActionServlet负责拦截用户的所有请求
三个重要组成部分:Action、ActionForm、ActionForward
struts2:核心控制器:FilterDispatcher,负责拦截用户一系列拦截器,
拦截器负责将HttpServletRequest请求中的请求参数解析出来,
传入action中,并回调Action的execuete的方法处理用户请求。
实现类方面:
strust1:要求action 继承一个抽象基类
struts2:实现一个action接口,
提供了一个 ActionSupport基类去实现常用的接口,
(action接口不是必须实现的,只有一个 execute方法的POJO类就可以做为struts2的Action)
线程模式方面:
strust1:单例模式且必须是线程安全。
struts2:为每一个请求产生一个实例,没有线程安全问题。
servlet依赖方面:
strust1:依赖于Servlet API,action的execute方法中有HttpServletRequest 和HttpServletResponse方法
struts2:不依赖于Servlet API。
可测性方面(不太明白):
strust1:因依赖于Servlet API,使得其测试依赖于Web容器,为脱离Wbe容器,需借助于第三方扩展:Struts TestCase,
该扩展下包含了系列的Mock对象(模拟HttpServletResqust和HttpServletResponse对象)
struts2:可以通过初如化、设置属性、调用方法来测试。
封装请求参数:
strust1:ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm,普通javaBean不能用作ActionForm。
struts2:使用Action属性来封装用户请求属性。还提供了ModelDriver模式,用单独的Model来封闭用户请求参数。
表达式语言方面:
strust1:整合了JSTL。
struts2:可使用JSTL,还整合了OGNL。
类型转换:
strust1:ActionFrom属性通常都是String类型。
struts2:使用了 Commons-Beanutils进行类型转换,每个类一个转换器,转换器是不可配置。
使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。
数据校验:
struts1:ActionForm重写validate方法中手动校验。通过整合Commons alidator框架来完成数据校验。
struts2:支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。