配置文件配置springmvc
spring-mvc.xml 前端控制器 配置文件(controller控制层用到的东西)
spring-root.xml spring容器 配置文件(service服务层和Repository持久层用到的东西)
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!-- 开启监听 -->
<context:component-scan base-package="com.etoak">
<!-- 扫描@Controller、@RestController -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
<context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
<!-- 排除@Service、@Repository -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<!-- mvc配置 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 由servlet容器处理静态文件 -->
<mvc:default-servlet-handler/>
<mvc:resources location="file:d:/upload/" mapping="/pics/**" />
<!-- 视图解析器 -->
<!-- SpringResourceTemplateResolver -->
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver" >
<!-- 页面位置:页面可以放webapp下也可放在classpath下 -->
<property name="prefix" value="/templates/" />
<!-- 页面后缀 -->
<property name="suffix" value=".html"></property>
<!-- 模板设置(默认html) -->
<property name="templateMode" value="HTML"></property>
<!-- 编码 -->
<property name="characterEncoding" value="UTF-8"></property>
<!-- 是否缓存页面内容 -->
<property name="cacheable" value="false"></property>
</bean>
<!-- SpringTemplateEngine -->
<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"></property>
</bean>
<!-- ThymeleafViewResolver -->
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 允许上传文件大小 字节为单位 -->
<property name="maxUploadSize" value="1048576"></property>
</bean>
<mvc:view-controller path="/" view-name="index" />
<!-- -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/user/to_login"/>
<mvc:exclude-mapping path="/user/login"/>
<mvc:exclude-mapping path="/pics/**"/>
<mvc:exclude-mapping path="/static/**"/>
<bean class="com.etoak.interseptor.LoginIntersepter" />
</mvc:interceptor>
</mvc:interceptors>
</beans>
spring-root.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">
<!-- 开启监听 -->
<context:component-scan base-package="com.etoak">
<!-- 注解做隔离 -->
<!-- 扫描@Service、@Repository -->
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<!-- 排除@Controller、@RestController -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.RestController"/>
<context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
<!-- SqlSessionFactoryBean -->
<!-- 数据源、typeAliasespackage -->
<!-- 读取properties -->
<context:property-placeholder location="classpath:db.properties" />
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" >
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.pwd}" />
</bean>
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- -->
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.etoak.bean" />
<property name="mapperLocations" value="classpath:mappers/*.xml" />
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<!-- 扫描指定包下的接口,为接口创建代理对象 并将代理对象注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
<property name="basePackage" value="com.etoak.mapper" />
</bean>
<!-- 事务管理器 -->
<bean id="tx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事务注解驱动 -->
<tx:annotation-driven transaction-manager="tx" />
</beans>
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!-- -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-root.xml</param-value>
</context-param>
<!-- 加载spring容器,默认加载/WEBINFO/applicationContext.xml -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- post请求编码过滤器 -->
<filter>
<filter-name>encoding</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>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 将表单的post请求转换成PUT和DELETE请求 -->
<filter>
<filter-name>rest</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>rest</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 前端控制器 -->
<servlet>
<servlet-name>dispatcher</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>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
MvcConfig.java
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring5.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
/**
* spring-mvc.xml
* <context:component-scan base-package></context:component-scan>
* <mvc:annotation-driven></mvc:annotation-driven>
* <mvc:default-servlet-handler />
* <mvc:resources location="" mapping="" />
*
* Thymeleaf
* - SpringResourceTemplateResolver
* - SpringTemplateEngine
* - ThymeleafViewResolver
*/
@Configuration
@ComponentScan(basePackages = "com.etoak",
includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {
Controller.class, RestController.class, ControllerAdvice.class,
EnableWebMvc.class
})},
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {
Service.class, Repository.class
})}
)
@EnableWebMvc // <mvc:annotation-driven></mvc:annotation-driven>
public class MvcConfig implements WebMvcConfigurer {
/**
* <mvc:default-servlet-handler />
* @param configurer
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**
* <mvc:resources></mvc:resources>
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 访问本地文件图片
// <mvc:resources location="file:d:/upload/" mapping="/pics/**" />
registry.addResourceHandler("/pics/**")
.addResourceLocations("file:d:/upload/");
// 静态文件放到classpath
// <mvc:resources location="classpath:/static/" mapping="/**" />
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/");
}
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new
SpringResourceTemplateResolver();
resolver.setPrefix("classpath:/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCharacterEncoding("UTF-8");
resolver.setCacheable(false);
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(this.templateResolver());
return engine;
}
@Bean
public ThymeleafViewResolver viewResolver (
@Qualifier("templateEngine") SpringTemplateEngine templateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
}
RootConfig.xml
import com.alibaba.druid.pool.DruidDataSource;
import com.github.pagehelper.PageInterceptor;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.Properties;
/**
* spring-root.xml
* <context:component-scan base-package></context:component-scan>
* 数据源
* SqlSessionFactoryBean
* MapperScannerConfigurer
* 事务管理器
* <tx:annotation-driven />
*/
@Configuration
@ComponentScan(basePackages = "com.etoak",
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {
Controller.class, RestController.class, ControllerAdvice.class,
EnableWebMvc.class
})},
includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {
Service.class, Repository.class
})}
)
@PropertySource(value = "classpath:db.properties") // 读取属性文件
@MapperScan(basePackages = "com.etoak.mapper") // MapperScannerConfigurer
@EnableTransactionManagement
public class RootConfig {
// 读取属性文件中的内容
@Value("${db.driver}")
private String driver;
@Value("${db.url}")
private String url;
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(this.driver);
dataSource.setUrl(this.url);
dataSource.setUsername(this.username);
dataSource.setPassword(this.password);
// 初始化连接数
dataSource.setInitialSize(20);
// 最大连接数
dataSource.setMaxActive(50);
return dataSource;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactory(
@Qualifier("dataSource")DataSource dataSource) {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
// 数据源、typeAliasesPackage、mapperLocations、plugins
factoryBean.setDataSource(dataSource);
factoryBean.setTypeAliasesPackage("com.etoak.bean");
ResourcePatternResolver resolver = new
PathMatchingResourcePatternResolver();
try {
Resource[] resources = resolver.getResources("classpath:mappers/*.xml");
factoryBean.setMapperLocations(resources);
} catch (IOException e) {
e.printStackTrace();
}
// 设置分页插件
PageInterceptor pageInterceptor = new PageInterceptor();
Properties props = new Properties();
props.setProperty("reasonable", "true");
pageInterceptor.setProperties(props);
factoryBean.setPlugins(new Interceptor[]{pageInterceptor });
return factoryBean;
}
/**
* 事务管理器
* @param dataSource
* @return
*/
@Bean
public PlatformTransactionManager transactionManager(
@Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
WebMvcInitializer.java
import com.etoak.config.MvcConfig;
import com.etoak.config.RootConfig;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
/**
* 相当于web.xml
*/
public class WebMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* spring root容器
* @return
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfig.class };
}
/**
* spring mvc容器
* @return
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {MvcConfig.class };
}
/**
* DispatcherServlet拦截地址
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
return new Filter[] {encodingFilter};
}
}