Spring MVC的配置方式
-
注解配置
- XML配置
1:XML配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>projectName</display-name>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
<!-- 配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:spring-security.xml</param-value>
</context-param>
<!-- log4j日志 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>30</param-value>
</context-param>
<!-- 中文过滤 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- hibernate session -->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- 验证码 -->
<servlet>
<servlet-name>RandomCodeServlet</servlet-name>
<servlet-class>com.sfkj.base.common.RandomCode</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RandomCodeServlet</servlet-name>
<url-pattern>/imgcode</url-pattern>
</servlet-mapping>
<!-- spring监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 日志监听 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- mvc -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- session过期时间 -->
<session-config>
<session-timeout>0</session-timeout>
</session-config>
<!-- 验证码(一定要在security之前) -->
<filter>
<filter-name>validateFilter</filter-name>
<filter-class>com.sfkj.base.filter.ValidateFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>validateFilter</filter-name>
<url-pattern>/j_spring_security_check</url-pattern>
</filter-mapping>
<!-- security -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/views/login.jsp</welcome-file>
</welcome-file-list>
</web-app>
2:注解配置
@Configuration @EnableWebMvc @ComponentScan(basePackages = {"top.cqscrb.courage.controller"}) public class DispatcherConfig extends WebMvcConfigurerAdapter {//注解配置 @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); List<MediaType> supportedMediaTypes = new ArrayList<MediaType>(); supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); supportedMediaTypes.add(MediaType.TEXT_HTML); fastJsonHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures( // 保留map空的字段 SerializerFeature.WriteMapNullValue, // 将String类型的null转成"" SerializerFeature.WriteNullStringAsEmpty, // 将Number类型的null转成0 SerializerFeature.WriteNullNumberAsZero, // 将List类型的null转成[] SerializerFeature.WriteNullListAsEmpty, // 将Boolean类型的null转成false SerializerFeature.WriteNullBooleanAsFalse, // 避免循环引用 SerializerFeature.DisableCircularReferenceDetect); fastJsonHttpMessageConverter.setFastJsonConfig(config); fastJsonHttpMessageConverter.setDefaultCharset(Charset.forName("UTF-8")); converters.add(fastJsonHttpMessageConverter); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/files/**") .addResourceLocations("/files/"); } @Bean public MultipartResolver multipartResolver(){ return new StandardServletMultipartResolver(); } @Bean public InternalResourceViewResolver viewResolver() {//视图配置 InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver(); internalResourceViewResolver.setPrefix("WEB-INF/jsp/"); internalResourceViewResolver.setSuffix(".jsp"); internalResourceViewResolver.setExposeContextBeansAsAttributes(true); return internalResourceViewResolver; } }
添加dispatcgerServlet
public class StartServletInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext){ AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.register(WebBlackConfig.class); servletContext.addListener(new ContextLoaderListener(rootContext)); AnnotationConfigWebApplicationContext servlet = new AnnotationConfigWebApplicationContext(); servlet.register(SpringMVCInterceptor.class); servlet.register(SpringMvcConfig.class); ServletRegistration.Dynamic dispatcherServlet = servletContext.addServlet("dispatcherServlet", new DispatcherServlet(servlet));//添加dispatcherServlet dispatcherServlet.addMapping("/*");//拦截路径 dispatcherServlet.setLoadOnStartup(1);//启动时机 dispatcherServlet.setInitParameter("throwExceptionIfNoHandlerFound", "true"); FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter());//字符编码配置 encodingFilter.setInitParameter("encoding", "UTF-8"); encodingFilter.setInitParameter("forceEncoding", "true"); encodingFilter.addMappingForUrlPatterns(null, false, "/*"); } }
public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { /** * 配置上下文 * @return */ @Override protected Class<?>[] getRootConfigClasses() { return null; } /** * 启动组件扫描,配置试图解析器,配置静态资源等等, * 相当于springmvc-servlet.xml中的配置 * @return */ @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{SpringMvcConfig.class}; } /** * 拦截url请求 * 把DispatchServlet映射到对应的请求路径上 * 相当于xml中的 <servlet-mapping></servlet-mapping> * @return */ @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
xml中配置的内容,在注解配置中,都可以创建对应的对象,以返回bean的方式交给spring去管理。
例如:
spring-mvc.xml中文件上传的配置
<!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> <property name="maxUploadSize" value="10099884032"/>//上传文件大小 </bean>
注解配置中可以这样配置
@Bean public MultipartResolver multipartResolver() {//注解开启文件上传 MultipartResolver multipartResolver = new CommonsMultipartResolver(); return multipartResolver; }