`

Spring MVC学习

 
阅读更多

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver 进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个
HandlerInterceptor 拦截器);
3、通过 HandlerAdapter 支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver 解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给HandlerExceptionResolver 来解析。

 

DispatcherServlet在web.xml中的配置:

<servlet>
  <servlet-name>chapter2</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>chapter2</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

 

该 DispatcherServlet 默认使用WebApplicationContext 作为上下文, Spring 默认配置文件为
“/WEB-INF/[servlet名字]-servlet.xml”。
我们也可以通过添加初始化参数,而非上面的默认配置文件:

<servlet>
  <servlet-name>chapter2</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-servlet-config.xml</param-value>
  </init-param>
</servlet>

 

而如果配置是Spring集成Web环境的通用配置;一般用于加载除Web 层的Bean(如DAO、Service等),以便于与其他任何Web框架集成。则是这样的通用上下文配置:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
      classpath:spring-common-config.xml,
      classpath:spring-budget-config.xml
  </param-value>
</context-param>
<listener>
  <listenerclass>
           org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>

 

创建完毕后会将该上下文放在ServletContext:
servletContext.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

 



 此图来自“跟开涛学习SpringMVC”

 

ContextLoaderListener 初始化的上下文加载的Bean 是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、Service层Bean;
DispatcherServlet 初始化的上下文加载的Bean 是只对Spring Web MVC 有效的Bean,如Controller、
HandlerMapping、HandlerAdapter等等,该初始化上下文应该只加载Web相关组件。

 

拦截的配置:

<bean id="annotationMapper" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
	<property name="interceptors"> 
	   <list>
		<ref bean="handerInterceptor1"/>					
		<ref bean="handerInterceptor2"/>									             </list> 
	</property>
</bean>

 执行的顺序:
handerInterceptor1.preHandle
handerInterceptor2.preHandle
handerAdapter
handerInterceptor1.postHandle
handerInterceptor2.postHandle
view render
handerInterceptor1.afterCompletion
handerInterceptor2.afterCompletion

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics