Spring MVC 总结:
各部件作用:
DispatcherServlet -- 前置控制器
HandlerMapping 接口 -- 处理请求的映射
SimpleUrlHandlerMapping 通过配置文件,把一个URL映射到Controller
DefaultAnnotationHandlerMapping 通过注解,把一个URL映射到Controller类上
HandlerAdapter 接口 -- 处理请求的映射
AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上
ViewResolver接口的实现类 ,主要实现将 Controller 返回的 view映射到对应的视图上
UrlBasedViewResolver类 通过配置文件,把一个视图名交给到一个View来处理
InternalResourceViewResolver类,比上面的类,加入了JSTL的支持 ,默认的
详细流程为:
1 用户请求 首先到 DispatcherServlet
2 DispatcherServlet ,通过 HandlerMapping 找到对应的处理类
3 然后再通过 HandlerAdapter 找到对应的处理方法
4 Controller 返回对应的 ModelAndView 到 DispatcherServlet ,ViewerResolver 会根据对应的 view name 查找对应的视图信息, 根据对应Model信息 查询输出参数信息
也可以不返回ModelAndView 而 返回一个String , 然后增加一个输入Map参数 Model ,这样后续的 ViewerResolver会根据String 去查找对应的页面,然后从Model中获取对应的输出参数
5 ViewResolver 将 返回的View渲染为 真正的 视图 ,展示给客户
1 web.xml中配置 Servlet DispatchServlet ,并配置对应得URL MAPPING
<servlet>
<servlet-name>annotation</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:anno-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>annotation</servlet-name>
<url-pattern>/anno/*</url-pattern>
</servlet-mapping>
表示业务的拦截是通过spring的 DispatcherServlet 来处理, 然后调用spring mvc的流程,来处理具体的业务
2 配置另外的 DispatchServlet ,拦截 /url 参数
<servlet>
<servlet-name>urlmapping</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:url-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>urlmapping</servlet-name>
<url-pattern>/url/*</url-pattern>
</servlet-mapping>
2 配置一个 监听器 ContextLoaderListener,并指定 spring 上下文配置文件地址
<listener>
<display-name>Context Loader Listener</display-name>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:com/zhangsan/appmarket/applicationtemplate/application-context.xml</param-value>
</context-param>
3 配置 spring 配置文件 anno-context.xml
<mvc:annotation-driven /> --注解支持
<!-- 自动扫描的包名 -->
<context:component-scan base-package="com.zhangsan"></context:component-scan> --扫描包
<!-- 视图解释类 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp" /><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
</bean>
配置各种 MessageConverter ,主要是将request 或者 response 里面的信息转换为 java 对象
/******************************************************************************************************
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="byteArray_hmc" />
<ref bean="string_hmc" />
<ref bean="resource_hmc" />
<ref bean="source_hmc" />
<ref bean="xmlAwareForm_hmc" />
<ref bean="jaxb2RootElement_hmc" />
<ref bean="jackson_hmc" />
</list>
</property>
</bean>
<bean id="byteArray_hmc" class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><!-- 处理.. -->
<bean id="string_hmc" class="org.springframework.http.converter.StringHttpMessageConverter" /><!-- 处理.. -->
<bean id="resource_hmc" class="org.springframework.http.converter.ResourceHttpMessageConverter" /><!-- 处理.. -->
<bean id="source_hmc" class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /><!-- 处理.. -->
<bean id="xmlAwareForm_hmc" class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" /><!-- 处理.. -->
<bean id="jaxb2RootElement_hmc" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /><!-- 处理.. -->
<bean id="jackson_hmc" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /><!-- 处理json-->
******************************************************************************************************/
Tomcat容器初始化 spring 过程
/****************************************************************
1 web.xml 中指定一个 ContextLoaderListener ,表示容器启动时加载 spring 上下文
该监听器,默认读取/WEB-INF/下的 applicationContext.xml文件,若不放在这个问题,可以通过context-param指定配置文件路径后,
便会去你指定的路径下读取对应的配置文件,并进行初始化。
2 配置业务 servlet , 对应处理类为spring的 DispatcherServlet, 然后调用spring的处理流程来处理用户请求
******************************************************************/