spring mvc 处理流程:
1、用户发送请求至前端控制器DispatcherServlet;
2、DispatcherServlet收到请求后调用处理器映射器HandlerMapping;
3、HandlerMapping根据请求url找到具体的处理器,生产处理器对象和处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
4、DispatcherServlet通过处理器适配器HandlerAdapter调用处理器;
5、执行处理器Controller;
6、Controller执行完返回ModelAndView;
7、HandlerAdapter将Contorller执行结果ModelAndView返回给DispatcherServlet;
8、DispatcherServlet将ModelAndView传给视图解析器ViewResolver;
9、ViewResolver解析后返回具体view;
10、DispatcherServlet对view进行视图渲染,即将数据模型填充到视图;
11、DispatcherServlet响应用户。
struts 2 处理流程:
1、客户端向servlet容器发送一个请求;
2、请求经过一系列过滤器(如ActionContextCleanUp、SiteMesh过滤器等);
3、接着FilterDispatcher核心控制器被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
4、如果需要执行某个Action,FilterDispatcher将请求的处理委派给ActionProxy;
5、ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到需要调用Action;
6、ActionProxy创建一个ActionInvocation实例;
7、ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器;
8、一旦Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果,并跳转相应页面;
9、拦截器被再次执行;
10、过滤器被再次执行。
spring mvc 与 struts2 的区别:
1、核心控制器:spring mvc的核心控制器是servlet;struts2的核心控制器是filter;
2、控制器实例:spring mvc理论上会比struts2快一些。spring mvc是基于方法进行开发的,而struts2 是基于对象,每次发送一个请求,都会实例化一个action,每个action都会注入属性;而spring更新servlet一样,只有一个实例,每次请求执行对应的方法即可;
3、参数传递:spring mvc 请求参数传递到方法的形参;struts2 参数传递是通过类的属性,其实都是通过值站栈(ValueStack)进行传递和赋值;
4、学习难度:Struts更加很多新的技术点,比如拦截器、值栈及OGNL表达式,学习成本较高,springmvc 比较简单,比较容易上手。
5、Struts是通过值栈存储请求和响应数据,通过OGNL存取数据;spring mvc是通过参数解析器将request请求解析,并给方法形参赋值,将数据和视图封装成modelandview,最后又将modelandview中的模型数据传递到页面。