SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。
SSM 则指的是 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。
共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。
不同点:1.Struts2 和 SpringMVC 控制器(controller)控制视图和模型的交互机制的不同,
Struts2是Action类级别,SpringMVC是方法级别,更容易实现RESTful风格。
SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernate与Mybatis)。SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便;而SSH较注重配置开发,其中的Hibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛稍高。
Struts2的工作原理
1 客户端初始化指向Servlet容器的请求
2 这个请求经过一系列的过滤器(filter)
3 StrutsPrepareAndExecuteFilter被调用, 然后去询问ActionMapping 决定这个请求是否需要调用某个Action
4 如果ActionMapping 决定需要调用某个Action,StrutsPrepareAndExecuteFilter把这个请求的处理交给ActionProxy
5 ActionProxy通过ConfigurationManager询问配置文件找到需要的Action类
6 ActionProxy 创建一个ActionInvocation的实例
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
Struts2核心组件
ActionMapper :通过method 参数将请求发到具体的action
ActionProxy:是一个action的一个代理类,Action的调用时通过动态代理实现的,其实调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation。invoke()方法,最后调用的是DefaultActionInvocation().invokeAction()方法
ActionInvocation:Action的调用者,ActionInvocation在Action的执行过程中,负责 Interceptor丶Action丶Result等一系列元素的调度
Interceptor拦截器:是Struts 2的一个强有力的工具,有许多功能(feature)都是构建于它之上
SpringMVC 的工作原理
1 客户端请求提交到DispatcherServlet
2 DispatcherServlet 控制器查询一个或者多个handlerMapping,找到请求的contorller
3 DispatcherServlet 将请求交给contorller
4 contorller 调用业务层,返回 modelAndView
5 DispatcherServlet 查找到 一个或者多个modelAndView 视图解析器,找到modelAndView指定的视图
6 视图负责将结果显示在客户端