四、编写 SpringMVC 配置类
使用springframework框架搭建web项目时,传统上需要配置web.xml和spring-servlet.xml文件。
项目中现在使用servlet 4.0,可以使用 WebApplicationInitializer 来替代原来的web.xml配置,代码如下:
public class WebInitializer implements WebApplicationInitializer {
private static final Logger logger = LogManager.getLogger(WebInitializer.class);
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
logger.info("-------->开始启动web应用");
/*
* Log4jConfigListener: log4j 2日志配置,配置文件为 classpath:log4j2.xml
*/
logger.info("-------->载入log4j2配置");
servletContext.addListener(new Log4jServletContextListener());
Log4jServletFilter log4jServletFilter = new Log4jServletFilter();
servletContext.addFilter("log4jServletFilter", log4jServletFilter);
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
// spring-mvc 上下文
context.register(WebMvcConfig.class);
context.setServletContext(servletContext);
/*
* 创建并注册 DispatcherServlet
*/
DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcherServlet", dispatcherServlet);
dynamic.setLoadOnStartup(1);
dynamic.addMapping("/");
servletContext.addListener(new ContextLoaderListener(context));
/*
* CharacterEncodingFilter: 解决中文乱码问题
*/
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("utf-8");
FilterRegistration characterEncodingfilterRegistration =
servletContext.addFilter("characterEncodingFilter", characterEncodingFilter);
characterEncodingfilterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");
logger.info("-------->web应用启动完成.");
}
}
可以用 WebMvcConfigurer 替代原来的spring-servlet.xml配置文件,项目前端采用html,只配置了json解析,不使用jsp解析,如果项目开发需要其他解析,再视情况增加。代码如下:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.xxxyyyzzz",
includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = {Controller.class})}
)
public class WebMvcConfig implements WebMvcConfigurer{
private static final Logger logger = LogManager.getLogger(WebMvcConfig.class);
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
logger.info("MVC配置:启用静态资源解析-------->DefaultServletHandlerConfigurer");
configurer.enable();
}
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
logger.info("MVC配置:JSON解析-------->MappingJackson2HttpMessageConverter");
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
List<MediaType> mediaTypes = new ArrayList<MediaType>();
mediaTypes.add(new MediaType("utf-8"));
converter.setSupportedMediaTypes(mediaTypes);;
return converter;
}
}
项目中使用 Mybatis管理数据库,以下仅为必要配置项,比如druid资源池配置,应需要更详细的配置。数据库配置类代码如下:
@Configuration
@PropertySource({"classpath:/resources.properties"}) // 资源文件
@EnableTransactionManagement(proxyTargetClass = true)
@MapperScan({"com.xxxyyyzzz.**.dao", "com.xxxyyyzzz.**.mapper"}) // 扫描的包
public class MybatisConfig {
private static final Logger logger = LogManager.getLogger(MybatisConfig.class);
/*
* 绑定资源属性
*/
@Value("${connection.driverClassName}")
String driverClass;
@Value("${connection.url}")
String url;
@Value("${connection.username}")
String username;
@Value("${connection.password}")
String password;
@Bean(name = "dataSource")
public DataSource dataSource() throws PropertyVetoException {
logger.info("DataSource配置:载入-------->Druid DataSource配置");
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setInitialSize(1);
return dataSource;
}
@Bean
public DataSourceTransactionManager txManager() throws PropertyVetoException {
logger.info("DataSource配置:载入-------->事务管理配置");
return new DataSourceTransactionManager(dataSource());
}
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory() throws Exception {
logger.info("Mybatis配置:载入-------->sqlSessionFactory配置");
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setConfigLocation(resolver.getResource("classpath:mappers.xml"));
return sessionFactory.getObject();
}
}