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