这个知识点在面试之前其实我是比较模糊的,大概知道一些,但是回答得不够全面有条理。所以下来细心整理了下。当然也查了别人写的东西,我会在文末加上链接。但是我要说的思路和内容和链接文章的也略有不同。
最重要的最先说:
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
另外,请各位大神不吝炮轰,尽情吐槽,我也借机学习。。。。。。