struts1和struts2和springMVC的区别和介绍

MVC是web开发经常使用的模式,M即模型层(Model):主要由javabean来实现。V即视图层(View):主要由jsp、velocity、freemarker等。C即控制层(Controller):主要由servlet、strtus、springmvc来实现。

 
struts1
Struts1 工做流程
1  ActionServlet接收由浏览器发出的请求后,检索和请求匹配的ActionMapping对象。若是不存在,返回请求无效的信息。
2  检索和请求匹配的ActionForm对象。若是不存在,就建立一个。把提交的表单中的数据保存在ActionForm对象中
3  根据配置信息决定是否进行校验。若是是,就进行校验。若是经过校验,进行下一步
4  ActionServlet根据ActionMapping对象包含的信息决定把请求转发给哪一个Action。若是这个Action的对象不存在,就建立一个,而后调用它的excute方法
5  Action的excute方法返回一个ActionForward对象。ActionServlet把请求转发给ActionForward指定的JSP。
6  ActionFoward对象指定的JSP生成动态网页,返回给浏览器


struts2
struts2是webwork升级版,跟struts1没有关系。struts1和servlet耦合度高,各层之间耦合度高,单元测试困难,表示层技术单一,而struts2没有和servlet耦合,更容易测试,支持更多表示层技术。
 
 
 
struts2工做流程
1)  客户端初始化一个指向Servlet容器(例如Tomcat)的请求。
2)  这个请求通过一系列的过滤器(Filter)。
3)  接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否须要调用某个Action。
4)  若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
5)  ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类。
6)  ActionProxy建立一个ActionInvocation的实例。
7)  ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。
8)  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
Struts2的核心就是拦截器。Struts.xml中全部的package都要extends="struts-default"。同理与全部的Java类都要extends自Object同样。struts-default.xml里面就是要作以上事情。
 
 

springmvcjava

1.spring mvc将全部的请求都提交给DispatcherServlet,它会委托应用系统的其余模块负责对请求进行真正的处理工做。
2.DispatcherServlet查询一个或多个HandlerMapping,找处处理请求的Controller.
3.DispatcherServlet将请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。web

 

 

struts1与struts2的比较ajax

一、struts1要求Action类继承一个抽象基类,而不是接口,struts2继承ActionSupport类或者实现Action接口。spring

二、struts1是单例模式的,Action资源必须是线程安全的或同步的,会有线程安全问题,struts2为每个请求都实例化一个对象,不存在线程安全问题。浏览器

三、struts1依赖servlet API 由于execute方法的参数有httpservletrequest和httpservletresponse对象,而struts2不用依赖servlet。安全

四、struts1依赖servlet API,因此测试要依赖web容器,测试难,struts2不依赖于容器,容许Action脱离容器单独被测试。 mvc

五、ActionForm,普通的JavaBean不能用做ActionForm,所以,开发者必须建立大量的ActionForm类封装用户请求参数,Struts 2直接使用Action属性来封装用户请求属性,避免了开发者须要大量开发ActionForm类的烦琐。Struts 2提供了ModelDriven模式,可让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继承任何Struts 2基类,是一个POJO,从而下降了代码污染。 

六、struts1 支持jsp做为表现层技术,struts2支持velocity、freemarker等表现层技术。
七、Struts1 整合了JSTL,所以使用JSTL EL。这种EL有基本对象图遍历,可是对集合和索引属性的支持很弱。 Struts2可使用JSTL,可是也支持一个更强大和灵活的表达式语言OGNL
八、Struts1支持每个模块有单独的Request Processors(生命周期),可是模块中的全部Action必须共享相同的生命周期。 Struts2支持经过拦截器堆栈(Interceptor Stacks)为每个Action建立不一样的生命周期


struts2与springmvc比较

一、spring mvc的入口是servlet,而struts2是filter 二、struts2是类级别的拦截, 一个类对应一个request上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应 三、spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每一个action都会被注入属性,而spring基于方法,粒度更细,但要当心把握像在servlet控制数据同样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就建立一个Action,而后调用setter getter方法把request中的数据注入;struts2其实是经过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。 四、spring3mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,而后直接返回响应文本便可。

相关文章
相关标签/搜索