陈张 成都师范学院
浅析struts2和springMVC的异同
陈张 成都师范学院
struts2和springMVC都是java web开发比较主流的框架,目前企业中使用springMvc的比例已经远远超过Struts2,那么两者到底有什么区别,是很多初学者比较关注的问题。
WEB框架 struts2 springMVC
spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
第一,用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获;
第二,DispatcherServlet对请求URL进行解析,得到请求资源标识符。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象,最后以HandlerExecutionChain对象的形式返回;
第三,DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter;
第四,提取Request中的模型数据,填充Handler入参,开始执行Handler。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
HttpMessageConveter:将请求消息转换成一个对象,将对象转换为指定的响应信息;
第五,Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象;
第六,根据返回的Model AndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet;
第七,ViewResolver结合Model和View,来渲染视图;
第八,将渲染结果返回给客户端。
一个请求在Struts2框架中的处理大概分为以下几个步骤:
第一,客户端浏览器发送请求;
第二,这个请求经过一系列的过滤器(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助);
第三,接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
第四,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
第五,ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;
第六,ActionProxy创建一个ActionInvocation的实例;
第七,ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器的调用;
第八,一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
①核心控制器:对于使用过mvc框架的人来说这个词应该不会陌生,核心控制器的主要用途是处理所有的请求,然后对那些特殊的请求统一的进行处理,spring mvc核心控制器是Servlet,而Struts2是Filter。
②控制器实例:Spring Mvc会比Struts快一些(理论上)。
③管理方式:大部分的公司的核心架构中,就会使用到spring,而spring mvc又是spring中的一个模块,所以spring对于spring mvc的控制器管理更加简单方便。
④参数传递:Struts2中自身提供多种参数接受,其实都是通过进行传递和赋值,而SpringMvc是通过方法的参数进行接收。
⑤学习难度:Struts更加很多新的技术点,比如拦截器、值栈及OGNL表达式,学习成本较高,spring mvc比较简单,很较少的时间都能上手。
总体来说,springMVC对初学者来说相比较struts2更加容易上手,与spring的集成更加流畅和方便。
[1]王冠宇,赵冬生.基于J2EE下的JSF与Struts框架比较分析[J].微机发展,2005年12期
[2]陈平.基于Spring的轻量级Web框架的研究与设计[D].江苏大学,2005年
[3]孙卫琴.精通struts[M].电子工业出版社,2004年8月50-70
[4]曾云飞.基于Struts框架的电子政务研究和实现[M].东北大学出版社,2005
陈张,成都师范学院,计算机科学与技术,本科。