\
1.1 Struts1运行原理
1、 在servlet容器启动时加载web.xml,通过前端控制器ActionServlet加载struts-config.xml并进行解析。
2、 客户端发送请求,请求被ActionServlet控制器接收。
3、 ActionServlet在处理请求时,根据struts-config.xml配置关系通过访问路径找到相应的ActionForm和Action。Struts将数据封装在ActionForm中,将封装后的ActionForm传递给Action相应方法进行使用。
4、 在Action处理完请求后,通过ActionMapping中的findForward()方法返回一个ActionForward对象,通过struts-config.xml配置的forward名称找到响应的请求路径。
\
1.2 Struts2运行原理
1、 在servlet容器启动时加载web.xml,通过核心控制器FilterDispatcher加载struts.xml文件并进行解析,将解析的信息封装在ActionMapper类中。
2、 客户端发送请求,请求被核心控制器FilterDispatcher进行拦截。
3、 FilterDispatcher通过ActionMapper找到对应的ActionForm和Action中的响应方法,在访问方法前先经过Struts2设置的17个默认拦截器,其中一个拦截器的功能是将请求时的数据封装在ActionForm中,然后方法进行响应。
4、 方法处理完后返回一个字符串,通过sturts.xml配置文件中的找到响应的请求路径。
\
需要注意的两点:
(1) struts 2.1.3以后FilterDispatcher核心已标注为过时,建议使用StrutsPrepareAndExecuteFilter过滤器。
(2) struts2是基于拦截器实现的,在理解struts2运行原理时,一定要搞清楚拦截器是什么。
1.3 Hibernate运行原理
首先通过configuration去加载hibernate.cfg.xml这个配置文件,根据配置文件的信息去创建sessionFactory,sessionFactory是线程安全的,是一个session工厂,用来创建session,session是线程不安全的,相当于jdbc的connection,最后通过session去进行数据库的各种操作,在进行操作的时候通过transaction进行事务的控制。
1.4 Spring运行原理
内部最核心的就是IOC了, 动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射。反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置内部通过反射去动态的组装对象)要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)
Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了也就基本上掌握了Spring。
1.5 SpringMVC运行原理
1、 客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.
2、 DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。
3、 DispatcherServlet根据HandlerMapping找到对应的Handle,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。
4、 Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。
5、 Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。
6、 Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。