struts2和springmvc的区别

时间:2023-02-26 13:13:41

这个知识点在面试之前其实我是比较模糊的,大概知道一些,但是回答得不够全面有条理。所以下来细心整理了下。当然也查了别人写的东西,我会在文末加上链接。但是我要说的思路和内容和链接文章的也略有不同。

最重要的最先说:

1.传递的参数的方式:struts2是靠action中的属性以及相应的get/set方法来传递请求数据的。

                                :springmvc是靠方法的形式参数来传递请求参数的。

其他文章里有说到:Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文。这句话是什么意思呢????

意思是说springmvc中一个controller中的业务方法是独立的,一个control可以写多个业务方法,通过@requestingmapping让一个请求对应一个方法,请求数据通过参数获取,彼此不相干扰。struts虽然也可以一个action中写多个方法,但是struts用的是action的属性来传递参数,所以一个action中的多个业务方法就可以共享这些属性数据了,就比较乱,所以通常我们会一个action类对应一个请求,。所以说:Struts2是类级别的拦截,SpringMVC是方法级别的拦截。

2.struts2中也有request,session,application对象,但是被封装成了map。

3,struts2处理多个请求时会为每一个请求创建一个实例,但是struts2和spring结合时(使用spring管理struts2的action实例对象时),scope必须配置为prototype或者session2。scope=“prototype”是为每个请求提供一个action实例。  scope=“session”是为每个会话提供一个action实例。不然就会生成单例的action,有并发问题,而springmvc就不会有这个问题。

4,两者都是基于MVC开发模式的框架,model都是javabean,dao相同。view不同,控制器不同。

    springmvc的view部分实现不一样,重定向,转发(return modelandviewer),和返回json数据(@RequestingBody)有分别的处理形式。而struts2中,重定向,转发,和返回json,或者流形式上都是:<result name="..." type="dispatcher/redirectAction/stream/json">,形式上更统一。

    控制器部分:springmvc使用servlet(dispatcherservlet+xxxcontroller),struts2使用的是(filter+xxxaction)形式类似,但是机制不一样,就是servlet和filter的区别。

5,springmvc和spring是无缝的,配置更简单。

6,另一篇文章跟我写的大同小不同,我也借鉴了很多,链接:http://blog.csdn.net/chenleixing/article/details/44570681

另外,请各位大神不吝炮轰,尽情吐槽,我也借机学习。。。。。。