在我的印象中,开发一个web项目首选当然是springmvc,而配置springmvc无非就是web.xml里配置其核心控制器DispatcherServlet.然后把所有的请求都交给它处理,再配个视图解析器,一个注解扫描和一个注解的驱动差不多一个基于springmvc的web项目就搞定了,这么一总结感觉好麻烦啊;然后最近在spring实战一书里刚好看到了基于java的springmvc的配置,感觉瞬间简单高大上了许多,下面记录下如何基于java来搭建springmvc的环境
首先当然是配置Spring MVC的核心DispatcherServlet了,按照传统的方式,像DispatcherServlet这样的Servlet会配置在web.xml文件中,但是,借助于Servlet 3规范和Spring 3.1的功能增强,我们完全可以基于java来配置它,下面是关键代码:
/** * @author * @date 2018/9/4 14:57 * @description 使用java(非xml)为项目配置DispatcherServlet */ public class ExcepCollAppInitilizer extends AbstractAnnotationConfigDispatcherServletInitializer { /** * 此方法返回的带有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下文中的bean * @return */ @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{RootConfig.class}; } /** * 此方法返回的带有@Configuration注解的类将会用来定义DispatcherServlet应用上下文中的bean * @return */ @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{WebConfig.class};// 指定配置类 } @Override protected String[] getServletMappings() { return new String[]{"/"}; //将DispatcherServlet映射到"/" } }
其中RootConfig和WebConfig使我们自己写的配置类,我们重点关注WebConfig,它相当于我们使用xml配置时项目里的springmvc.xml,可以开启组件扫描、配置视图解析器等功能;下面是其代码:
@Configuration @EnableWebMvc //启用springmvc @ComponentScan("com.darling") // 开启组件扫描 public class WebConfig extends WebMvcConfigurerAdapter { /** * 配置JSP试图解析器 * @return */ @Bean public ViewResolver viewResolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setExposeContextBeansAsAttributes(true); return resolver; } /** * 配置静态资源的处理 * 要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,而不是使用DispatcherServlet本身来处理此类请求 * @param configurer */ @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } }
RootConfig的代码:
/** * @author 董琳琳 * @date 2018/9/4 16:05 * @description */ @Configuration @ComponentScan(basePackages = {"com.darling"},excludeFilters = {@Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)}) public class RootConfig { }
至此,我们基本上已经可以开始使用Spring MVC了,下面是我写的测试类:
@Controller @RequestMapping("/test") public class TestController { @RequestMapping("/testJson") @ResponseBody public String test(){ return "HELLO,SPRING MVC"; } @RequestMapping("testJsp") public String test1(){ return "index"; } }
测试效果
跳转到JSP页面:
返回json: