1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">


    <!--定义了WEB应用的名字-->
    <display-name>springMVC</display-name>

    <!-- 指定欢迎页-->
    <!-- <welcome-file>用来指定首页文件名称。<welcome-file-list>元素能够包含一个或多个<welcome-file>子元素。-->
    <!-- 若是在第一个<welcome-file>元素中没有找到指定的文件,Web容器就会尝试显示第二个,以此类推。-->
    <welcome-file-list>
        <welcome-file>/WEB-INF/jsp/login.jsp</welcome-file>
    </welcome-file-list>


    <!-- Spring自身的配置-->


    <!-- 1、指定Spring配置文件的位置-->
    <!--web.xml中不写<context-param>配置信息的话,其默认的路径是/WEB-INF/applicationontext.xml-->
    <!--若是要自定义文件名和文件位置,需要在web.xml里加入contextConfigLocation这个参数-->

    <context-param>
        <!-- 参数名 名字为contextConfigLocation -->
        <param-name>contextConfigLocation</param-name>
        <!--这里指定相应的xml文件名,若是有多个xml文件,能够写在一块儿并以“,”号分隔-->
        <param-value>classpath:application*.xml</param-value>
    </context-param>

    <!--
        加载spring的监听器,其中ContextLoaderListener的作用就是启动Web容器时,自动装配applicationContext.xml的配置信息,
        去初始化Spring容器
    -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!-- Spring自身的配置结束-->

    <!--
    在web.xml配置springMvc步骤

    1、实例化核心控制器  DispatcherServlet  整个前端的控制器,一般情况下会过滤所有的请求
    2、配置对应的mapping
    -->
    <servlet>
        <!--自定义的Servlet的别名-->
        <servlet-name>springmvc</servlet-name>
        <!-- 标签中配置的当前Servlet类的全类名(包名.类名),将来服务器根据访问路径找到全类名,
        	 再利用反射+全类名可以获取当前Servlet类的实例-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--加载SpringMVC的控制文件,从而找到映射关系,知道哪些请求需要被哪个controller拦截-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!-- 1表示启动的时候就立即加载-->
        <load-on-startup>1</load-on-startup>
    </servlet>


    <!--作用:拦截相应路径的请求,并交给servlet-name中定义的servlet处理-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <!-- / 表示拦截所有请求-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    
    <!-- 配置过滤器,每一次的浏览器请求都要进行过滤,可以解决从页面传来的字符串中文乱码 -->
    
    <filter>
        <!--用来定义过滤器的名称,该名称在整个程序中都必须惟一-->
        <filter-name>encodingFilter</filter-name>
        <!--指定过滤器类的完整类名,即Filter的实现类。-->
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <!-- <init-param>为Filter配置参数-->
        <init-param>
            <!--encoding设置成utf-8就相当于request.setCharacterEncoding("UTF-8");-->
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <!-- foreEncoding设置成true就相当于response.setCharacterEncoding("UTF-8");-->
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <!--这个过滤器的<filter>和<filter-mapping>必须具备相同的<filter-name>-->
        <filter-name>encodingFilter</filter-name>
        <!-- 指定该Filter所拦截的URL。-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>


</web-app>

2、applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">



    <!-- 声明要扫描的带有Spring注解的包-->
    <context:component-scan base-package="smbms.service" />


    <!-- 引入properties文件 读取数据库配置文件-->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>classpath:database.properties</value>
        </property>
    </bean>

    <!--配置数据源-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close" scope="singleton">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />

        <!--初始化连接数  -->
        <property name="initialSize" value="${initialSize}"/>
        <!--同时连接的最大连接数  -->
        <property name="maxActive" value="${maxActive}"/>
        <!--最大空闲连接数-->
        <property name="maxIdle" value="${maxIdle}"/>
        <!--最小空闲连接数-->
        <property name="minIdle" value="${minIdle}"/>
        <!--最大等待时间,单位毫秒-->
        <property name="maxWait" value="${maxWait}"/>
        <!--超时时间,单位:秒,无用连接超过了这个时间就会被自动回收-->
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/>
        <!-- 是否开启无用连接回收-->
        <property name="removeAbandoned" value="${removeAbandoned}"/>
        <!-- sql 心跳 -->
        <!-- 连接是否被空闲连接回收器进行检验-->
        <property name= "testWhileIdle" value="true"/>
        <!-- 是否在从池中取出连接前进行检验-->
        <property name= "testOnBorrow" value="false"/>
        <!-- 指明是否在归还到池中前进行检验-->
        <property name= "testOnReturn" value="false"/>
        <!-- SQL查询,用来验证从连接池取出的连接,在将连接返回给调用者之前.如果指定,
        则查询必须是一个SQL SELECT并且必须返回至少一行记录-->
        <property name= "validationQuery" value="select 1"/>
        <!--在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位-->
        <property name= "timeBetweenEvictionRunsMillis" value="60000"/>
        <!-- 在每次空闲连接回收器线程运行时检查的连接数量-->
        <property name= "numTestsPerEvictionRun" value="${maxActive}"/>
    </bean>

    <!-- 配置SqlSessionFactoryBean -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 引用数据源组件 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 引用MyBatis配置文件中的配置 -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />

    </bean>


    <!--扫描该包下面的所有的接口,生成实现类,不用自己手动创建实现类
       创建的实现类还会放到spring容器中。
       -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="smbms.dao" />
    </bean>


    <!--事务管理器-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager" >
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--事务的注解驱动-->
    <tx:annotation-driven transaction-manager="transactionManager"/>



</beans>


3、SpringMvc

<?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:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">


	<!--表示支持使用注解-->
	<mvc:annotation-driven  conversion-service="MyconversionService">
	<!--把对象转换成json传到前台页面时,会出现中文乱码和日期格式错误,需要定义转换器-->
		<!--消息转换器-->
		<mvc:message-converters>
			<bean class="org.springframework.http.converter.StringHttpMessageConverter">
				<property name="supportedMediaTypes">
					<list>
						<value>application/json;charset=UTF-8</value>
					</list>
				</property>
			</bean>
			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
				<!--处理中文乱码-->
				<property name="supportedMediaTypes">
					<list>
						<value>text/html;charset=UTF-8</value>
						<value>application/json</value>
					</list>
				</property>
				<property name="features">
					<list>
						<!--  Date的日期转换器 -->
						<value>WriteDateUseDateFormat</value>
					</list>
				</property>
			</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

	<!--扫描对应包中的mvc注解-->
	<context:component-scan base-package="smbms.controller"/>


	<!--
		加载静态资源
		location表示资源所在目录(默认web资源目录带classpath表示类路径下的目录),
		mapping表示匹配到的url,/statics/**表示statics开头的所有url.
	-->

	<mvc:resources mapping="/statics/**" location="/statics/" />

	<!--全局异常处理-->
	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.RuntimeException">error</prop>
			</props>
		</property>
	</bean>

		<!--Spring 前台向后台传值时,不能将String转换为Data,因此需要使用@DatetimeFormat注解
		或者自定义转换器-->
		<bean id="MyconversionService"
			  class="org.springframework.context.support.ConversionServiceFactoryBean">
			<property name="converters">
				<list>
					<bean class="smbms.tools.StringToDateConverter">
						<constructor-arg type="java.lang.String" value="yyyy-MM-dd"/>
					</bean>
				</list>
			</property>
		</bean>

	<!--配置多视图解析器:允许相同的数据内容呈现不同的view-->
	<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<!--支持参数匹配  默认的请求参数为format,如: /user/view?id=12&format=json-->
		<property name="favorParameter" value="true"/>
		<property name="mediaTypes">
			<map>
				<!--如果后缀是html,则会以text/html这样的格式进行展现-->
				<entry key="html" value="text/html;charset=UTF-8"/>
				<entry key="json" value="application/json;charset=UTF-8"/>
				<entry key="xml" value="application/xml;charset=UTF-8"/>
			</map>
		</property>
		<!-- 定义视图解析器,映射视图路径 -->
		<property name="viewResolvers">
			<list>
				<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
					<property name="prefix" value="/WEB-INF/jsp/" />
					<property name="suffix" value=".jsp" />
				</bean>
			</list>
		</property>
	</bean>


	<!--用于文件上传-->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize"   value="500000" ></property>
		<property name="defaultEncoding" value="UTF-8" />
	</bean>
	<!--
        defaultEncoding	: 请求的编码格式,默认为 ISO-8859-1; 
        一般设为UTF-8 (defaultEncoding必须和JSP的pageEncoding 设置一致,以便正确读取表单内容)
        maxUploadSize	: 设置文件上传的大小限制,单位为字节;
     -->

	<!--拦截器,非法访问验证-->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/sys/**"/>
			<bean class="smbms.interceptor.SysInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>



</beans>

4、mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>



    <settings>
        <!--是否启用延迟加载-->
        <setting name="lazyLoadingEnabled" value="false" />

    </settings>


    <!--类型别名 -->
    <typeAliases>
        <package name="smbms.pojo" />
    </typeAliases>

    <!--数据源搬到Spring配置文件了 -->


</configuration>