struts2:
面向切面编程的思想在Strut2中也有了很好的体现。最重要的体现就是拦截器的使用。拦截器就是一个一个的小功能单位,用户可以将这些拦截器合并成一个大的拦截器,也就是拦截器栈。只要配置为默认。所有action都可以使用
这些拦截器使用struts2相对servlet
1.参数封装更方便。可以使用属性驱动或者模型驱动实现。
2.文件上传只需要注意form表单的要求。提供对应的file属性和fileName即可完成文件上传
3.其拦截器封装了国际化和输入校验功能,实现更简洁。编写响应配置文件即可。但是使用较少。校验使用JS代码校验给用户体验更好。例如信息的效果展示。
4.获取servletAPI更加简便。可以直接使用ActionContext.getContext()/getSession()/getApplication().操作相应的域。也可以直接使用servletActionContext.getRequest()/getResponse()/getServletContext()来操作
- 基于MVC架构,框架结构清晰,开发过程中只需要关注业务层的数据获取封装到对应的POJO中再根据对应的result返回到对应的view展示。
6.struts2拥有独自的一套taglib标签库。从struts2的值栈获取数据使用非常方便。但是该标签与struts2框架耦合紧密。如果需要项目改造页面改动将十分麻烦。工作量巨大。 7。struts2的action是多实例的,因此再与spring整合的时候需要配置为多例。否则值栈数据会混乱。action和页面取值将会错误
springMVC 1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、执行处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户
truts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入
struts2实际上是通过setter getter方法与request打交道的
struts2中,一个Action对象对应一个request上下文
spring3 mvc不同,spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去
在spring3mvc中,一个方法对应一个request上下文
spring3mvc的方法之间基本上独立的,方法之间不共享变量 ,
而struts2虽然方法之间也是独立的,但Action变量是共享的 这不会影响程序运行,却给我们编码 读程序时带来麻烦
由于Struts2需要针对每个Request进行封装,把Request,Session等Servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全。所以在原则上,是比较耗费内存的