Spring3.0 – 学习笔记 –MVC装配
------转载请注明出处 作者:小魔头
(未完待续)
1.Spring MVC 请求流程
DispatcherServlet是绝对的核心控制在整个流程中
2. 配置方式:
a.JavaConfig和自动隐式装配
b.xml装配
3.JavaConfig显示和自动隐式装配Spring MVC
3.1 DispatcherServlet及config
a.在servlet3.0中,服务器容器根据查找javax.servlet.ServletContainerInitializer的实现来配置servlet容器,具体spring如何实现这里不深入研究
b.只需要继承Spring的AbstractAnnotationConfigDispatcherServletInitializer, 并且重写如下3个方 法,就可以将DispatcherServlet配置到servlet容器中,其实上面的spring父类会同时创建DispatcherServlet and ContextLoaderListener,作用如下:
Protected String getServletMapping(){
return new String[]{"/"};//MVC总入口,接受所有请求
}
//ContextLoaderListener 将会配置RootConfig中的业务逻辑bean(service,DB)
Protected Class<?> getRootConfigClasses(){
return new Class<?>{RootConfig.class};
}
Protected Class<?> getRootConfigClasses(){
return new Class<?>{RootConfig.class};
}
c. 配置WebConfig,显示的声明配置控制器,视图解析器和处理器映射bean
i.add @Configuration
ii.add @EnableWebMvc -- 如果采用xml配置可以由<mvc:annotation-driven>来同样启动 springmvc注解相关的组件
iii.add@ComponentScan({"com.package1","com.package2"})启动组件扫描,这样不仅可以加载在WebConfig中显示声明的控制器,同样可以载入外部@Controller注解的控制器
iiii.显示配置视图解析器,代码如下,视图解析器就是根据servlet传入的视图名("home"),解析生成完整的视图路径("/WEB-INF/web/home.jsp")
iiiii.配置静态资源处理servlet, 继承WebMvcConfigurerAdapter 并且重写configureDefaultServletHanding方法并且调用enable()方法来开启静态资源开关代码如下
public class WebConfig extends WebMvcConfigurerAdapter{
@bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/web/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
public void configureDefaultServletHanding(DefaultServletHandlerConfigurer configurer){
configurer.enable();
}
}
d.配置RootConfig,就是显示声明业务逻辑bean,同样add @ComponentScan来加载外部bean
3.2 自动隐式Controller --控制器在处理完业务逻辑后,返回给servlet数据模型和视图名("home")
a.add @Controller在类声明前,其实@Controller和@Component起到的作用是相同,只是语义更加明确
b.add @RequestMapping(value="/service", method=GET),定义映射逻辑及方法,DispatcherServlet会根据映射器找到对应的controller