glossary
request flow

image.png
DispatcherServlet
- 根据pattern转发request
- 把request 转发到Spring MVC Controller
- 根据handler mappings 确定requests要经过的component, mappings可以配置pattern
- 根据view resolver解析具体的view
- 启动后创建Spring application context,加载配置的bean:
- controllers
- view resolvers
- handler mappings
controller
- 指定渲染的view
model
- 产生需要返回客户端的数据
view
- render the output
ContextLoaderListener
加载middle-tier和data-tier components
配置mvc
spring web application 中一般会创建两个application context:
- DispatcherServlet
- ContextLoaderListener
configuring dispatcherservlet
AbstractAnnotationConfigDispatcherServletInitializer(前提条件web服务器必须支持Servlet 3.0,Apache Tomcat 7以上) JavaConfig:
- getServletMappings(): 指定map的path
- protected Class<?>[] getServletConfigClasses(): 指定DispatcherServlet 创建的application context 使用的配置类
- protected Class<?>[] getRootConfigClasses(): 创建的ContextLoaderListener application context 使用的配置类
enabling spring mvc
- DispatcherServlet 配置:
package spittr.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.
DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.
WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.
InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan("spitter.web")
public class WebConfig
extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver =
new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable();
} }
- ContextLoaderListener
package spittr.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan(basePackages={"spitter"},
excludeFilters={
@Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)
})
public class RootConfig {
}