spring

springMVC的工作原理

用户向服务器发送请求,请求被Spring前端控制器Servlet DispatcherServlet捕获;

DispatcherServlet对请求URL进行拦截,根据URL,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler以及Handler对象对应的拦截器),

最后HandlerExecutionChain对象的形式返回;

DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter(如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

提取Request中的模型数据,根据配置,spring将进行一些额外的工作:

HttpMessageConverter:将请求信息(如JSON,XML数据等)转换成一个对象.将对象转换为指定的响应信息等 数据转换:如String转为Integer 数据格式化:对请求信息进行数据格式化.将字符串转换成日期类型 数据校验:验证数据的有效性.

Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象;

根据返回的ModelAndView,选择一个合适的ViewResolver对象;

ViewResolver结合ModelAndView,渲染视图;

将渲染结果返回客户端;

spring是如何使用事务的

pring的事务是通过“声明式事务”的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序。最大的好处是大大减少了代码量, 等等这类代码不用在每个方法中重复的去写,简化了程序,提高了工作效率。

springMVC中的controller是默认是单例的?如何保证线程安全

模式是单例的,只要controller中不存在实例变量就可以保证是安全的,如果需要定义静态数据可以使用prototype定义,不使用单例模式的

SpringMVC处理流程(http://www.cnblogs.com/hujiapeng/p/5765636.html\**

1)DispatcherServlet前端控制器接收发过来的请求,交给HandlerMapping处理器映射处理

2)HandlerMapping处理器映射器,根据请求路径找到对应的HandlerAdapter处理器适配器(处理器适配器就是那些对应的拦截器或者是Controller)

3)HandlerAdapter处理器映射器处理一些功能请求,返回一个ModelAndView对象(包含模型数据,逻辑视图名称)

4)ViewResolver视图解析器,现根据ModelAndView中设置的View解析对应视图

5)然后再将Model中的数据映射到View上.

spring启动过程(https://segmentfault.com/q/1010000000210417\**

首先web应用部署在容器中,容器提供了一个全局的上下文环境,这个上线问就是SevletContext,通过一个contextLoaderListener调用其 contextInitialized方法,在这个方法中spring会初始化一个启动上下文,WebApplicationContext

然后开始初始化web.xml中配置的servlet.

spring+mybatis启动过程(http://blog.csdn.net/czengze/article/details/52976599\)

Last updated