SpringMVC工作原理

        Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

SpringMVC原理图

        

SpringMVC接口解释
DispatcherServlet接口:
        
        Spring提供的前端控制器,所有的请求都有经过它来统一分发。在DispatcherServlet将请求分发给Spring Controller之前,需要借助于HandlerMapping定位到具体的Controller。它的本质是一个实现了J2EE标准中定义的HttpServlet,通过在web.xml配置<servlet-mapping>来实现对request的监听。
1
2
3
4
5
6
7
8
9
< servlet >  
     < servlet-name >springTestServlet</ servlet-name >  
     < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class >  
     < load-on-startup >2</ load-on-startup >  
</ servlet >  
< servlet-mapping >  
     < servlet-name >springTestServlet</ servlet-name >  
     < url-pattern >*.do</ url-pattern >  
</ servlet-mapping >
 以.do结尾的request都会由springTestServlet来处理。

HandlerMapping接口:

        能够完成客户请求到Controller映射。在第2和3部,当接受到request的时候,DispatcherServlet根据HandlerMapping的配置调用相应的Controller来对request进行业务处理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
< bean  id = "simpleUrlMapping"  class = "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
     < property  name = "mappings" >
         < props >
             < prop  key = "/login.do" >loginController</ prop >
         </ props >
     </ property >
</ bean >
< bean  id = "loginController"  class = "com.test.spring.mvc.contoller.LoginController" >
     < property  name = "sessionForm" >
         < value >true</ value >
     </ property >
     < property  name = "commandName" >
         < value >loginCommand</ value >
     </ property >
     < property  name = "commandClass" >
         < value >com.test.spring.mvc.commands.LoginCommand</ value >
     </ property >
     < property  name = "authenticationService" >
         < ref  bean = "authenticationService" />
     </ property >
     < property  name = "formView" >
         < value >login</ value >
     </ property >
     < property  name = "successView" >
         < value >loginDetail</ value >
     </ property >
</ bean >
        以login.do结尾的request由loginController来处理。<property name="formView">配置的是Controller接收到HTTP请求的时候需要显示的逻辑视图名,本例是显示login.jsp。<property name="successView">配置的是在接收到HTTP请求的时候需要显示的逻辑视图名,在本例中即login.jsp提交的时候(successView)需要显示名为loginDetail的逻辑视图.

Controller接口:

        需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。 Controller将处理用户请求,这和Struts Action扮演的角色是一致的。一旦Controller处理完用户请求,则返回ModelAndView对象给DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和视图(View)。 从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型(Model)和视图(View)。

ViewResolver接口:

        Spring提供的视图解析器(ViewResolver)在Web应用中查找View对象,从而将相应结果渲染给客户。第六七步,,DispatcherServlet根据ViewResolver的配置将逻辑view转换到真正要显示的View,如JSP等.
1
2
3
4
5
6
7
8
9
10
11
< bean  id = "viewResolver"  class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >  
     < property  name = "viewClass" >  
         < value >org.springframework.web.servlet.view.JstlView</ value >  
     </ property >  
     < property  name = "prefix" >  
         < value >/jsp/</ value >  
     </ property >  
     < property  name = "suffix" >  
         < value >.jsp</ value >  
     </ property >  
</ bean >  
        **其作用是将Controller中返回的ModleAndView解析到具体的资源(JSP文件),如上例中的return "successView";按照上面ViewResolver配置,会解析成/jsp/loginDetail.jsp.规则为prefix+ModelAndView的第二个参数+suffix.

SpringMVC运行原理

  1. 客户端请求提交到DispatcherServlet
  2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
  3. DispatcherServlet将请求提交到Controller
  4. Controller调用业务逻辑处理后,返回ModelAndView
  5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
  6. 视图负责将结果显示到客户端
  7. DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值