1.配置DispatcherServlet
DispatcherServlet是Spring MVC的核心。在这里请求会第一次 接触到框架,它要负责将请求路由到其他的组件之中。
使用Java将DispatcherServlet配置在Servlet容器中,而不 会再使用web.xml文件。
SpittrWebAppInitializer.java
1 package spittr.config; 2 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 3 4 public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 5 6 @Override 7 protected Class<?>[] getRootConfigClasses() { 8 // TODO Auto-generated method stub 9 return new Class<?>[] { RootConfig.class }; 10 } 11 12 @Override 13 protected Class<?>[] getServletConfigClasses() { 14 // TODO Auto-generated method stub 15 return new Class<?>[] { WebConfig.class }; 16 } 17 18 @Override 19 protected String[] getServletMappings() { // 将DispatcherServlet映射到“/” 20 // TODO Auto-generated method stub 21 return new String[] { "/" }; 22 } 23 24 }
扩 展AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动地 配置Dispatcher-Servlet和Spring应用上下文,Spring的应用上下 文会位于应用程序的Servlet上下文之中。
2.Spring MVC配置类
WebConfig.java
1 package spittr.config; 2 3 import org.springframework.context.annotation.Bean; 4 import org.springframework.context.annotation.ComponentScan; 5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.web.servlet.ViewResolver; 7 import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; 8 import org.springframework.web.servlet.config.annotation.EnableWebMvc; 9 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 10 import org.springframework.web.servlet.view.InternalResourceViewResolver; 11 12 @Configuration 13 @EnableWebMvc // 启用Spring MVC 14 @ComponentScan("spitter.web") // 启用组件扫描 15 public class WebConfig extends WebMvcConfigurerAdapter { 16 @Bean // 配置JSP视图解析器 17 public ViewResolver viewResolver() { 18 InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 19 resolver.setPrefix("/WEB-INF/view/"); 20 resolver.setSuffix(".jsp"); 21 resolver.setExposeContextBeansAsAttributes(true); 22 return resolver; 23 } 24 25 @Override // 配置静态资源处理 26 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 27 // TODO Auto-generated method stub 28 configurer.enable(); 29 } 30 31 }
上面的代码中第一件需要注意的事情是WebConfig现在添加了 @Component-Scan注解,因此将会扫描spitter.web包来查找组件。稍后编写的控制器将会带有@Controller注 解,这会使其成为组件扫描时的候选bean。因此,不需要在配置 类中显式声明任何的控制器。
然后添加了一个ViewResolver bean。更具体来讲, 是Internal-ResourceViewResolver。功能是查找JSP文件,在查找的 时候,它会在视图名称上加一个特定的前缀和后缀。
最后,新的WebConfig类还扩展了WebMvcConfigurerAdapter 并重写了其configureDefaultServletHandling()方法。通过 调用DefaultServlet-HandlerConfigurer的enable()方法,要求DispatcherServlet将对静态资源的请求转发到Servlet容 器中默认的Servlet上,而不是使用DispatcherServlet本身来处理 此类请求。
3.RootConfig.java
因为主要聚焦于Web开 发,而Web相关的配置通过DispatcherServlet创建的应用上下文 都已经配置好了,因此现在的RootConfig相对很简单
1 package spittr.config; 2 3 import org.springframework.context.annotation.ComponentScan; 4 import org.springframework.context.annotation.ComponentScan.Filter; 5 import org.springframework.context.annotation.Configuration; 6 import org.springframework.context.annotation.FilterType; 7 import org.springframework.web.servlet.config.annotation.EnableWebMvc; 8 9 @Configuration 10 @ComponentScan(basePackages = { "spitter" }, excludeFilters = { 11 @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) }) 12 public class RootConfig { 13 14 }