首先用户发送请求-------->DispatcherServlet,前端控制器收到请求后本身不进行处理,而是委托给其余的解析器进行处理,做为同一访问点,进行全局的流程控制html
DispatcherServlet--------->HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器),经过策略模式,很容易添加新的映射策略前端
DispatcherServlet---------->HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配设计模式的应用,从而很容易支持不少类型的处理器web
HandlerAdapter------------->处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理,并返回一个ModelAndView对象spring
ModelAndView的逻辑视图名-------->ViewResolver,ViewResolver将把逻辑视图解析为具体的View,经过这种策略模式,很容易更换其余视图技术设计模式
View------>渲染,View会根据传进来的Model模型进行渲染,此处的Model实际是一个Maptomcat
返回控制权给DispatcherServlet,有DispatcherServlet返回响应给用户服务器
DispatcherServlet充当SpringMVC的前端控制器。与其余Servlet同样,DispatcherServlet必须在Web应用程序的web.xml文件中进行配置架构
web.xml配置mvc
<!-- springmvc会过滤掉.html的 致使视图解析器没法找到 若是只是使用jsp资源而未使用html的话能够不配置该项 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 初始化参数:配置Springmvc配置文件的位置和名称 默认配置文件为:/WEB-INF/<servlet-name>-servlet.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 处理静态资源 --> <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"></mvc:resources> <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"></mvc:resources> <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"></mvc:resources>
由于DispatcherServlet的
配置<mvc:default-servlet-handler/>来解决,做用是处理静态资源,将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,会对进行DispatcherServlet的请求进行筛选,若是发现是没有通过映射的请求,就将请求交给WEB服务器默认的Servlet来处理,不然交由DispatcherServlet来处理
default-servlet-name默认是default,若是不是default须要显式的进行配置(看所使用的web服务器,tomcat是default
<mvc:default-servlet-handler default-servlet-name="default"/>
须要注意的是,配置了<mvc:default-servlet-handler/>以后,@RequestMapping的映射会失效,须要加上<mvc:annotation-driven/>配置
spring自带了多个处理器映射实现
BeanNameUrlHandlerMapping 根据控制器Bean的名字将控制器映射到URL
ControllerBeanNameHandlerMapping 与BeanNameUrlHandlerMapping相似
ControllerClassNameHandlerMapping 经过使用控制器的类名做为URL基础将控制器映射到URL
DefaultAnnotationHandlerMapping 将请求映射给使用@RequestMapping注解的控制器和控制器方法
SImplerUrlHandlerMapping 使用定义在Spring应用上下文的集合将控制器映射到URL
<!-- 开启注解 --> <mvc:annotation-driven/> <bean id="defaultAnnotationHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<bean id="annotationMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
InternalResourceViewResolver将逻辑视图名称解析为View对象,架构该对象渲染的任务委托给Web应用程序上下文的一个模板
<!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean>
因为自己的博客百度没有收录,博客地址http://zhhll.icu