这里专门纪录各种配置文件的作用和主要参数

Web.xml

  • Tomcat 使用
  • Tomecat阶段

    • 我们就只用了这个.xml配置文件。可以配置供外接访问servlet类及其映射,但有了注解3.0后,可以直接使用注解配置
      1. //最早的用法,可以被注解3.0替代
      2. <servlet>
      3. <servlet-name>UserServlet</servlet-name>
      4. <servlet-class>itheima.web.UserServlet</servlet-class>
      5. </servlet>
      6. <servlet-mapping>
      7. <servlet-name>UserServlet</servlet-name>
      8. <url-pattern>/userServlet</url-pattern>
      9. </servlet-mapping>
  • Spring阶段

    • 配置SpringMVC的前端控制器 DispatcherServlet (名字,相关映射)

      • 初始化参数:加载spring mvc 配置文件的位置
        <!--配置SpringMVC的前端控制器-->
        <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param> <!--'初始化参数',加载spring mvc 配置文件;-->
            <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>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
        </servlet-mapping>
        
    • 配置使用Spring 框架

      • 先配置一个全局初始化参数-及ApplicationContext文件的位置
      • 再配置一个 监听器 ,当初次有资源访问时,加载applicationContext 到容器中 ```xml
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!--配置监听器,使用‘全局初始化参数’,加载applicationContext配置文件-->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

   - 配置全局过滤器
```xml
 <!--配置全局过滤器-->
    <!--当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤-->
    <!--在Tomcat中使用SpringMVC提供的这个字符编码过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

ApplicationContext.xml

  • Spring 框架
  • 想想Spring的思想和作用是什么,那么ApplicationContext也就是起到相应的作用
  • 如果要使用数据库/源

    • 加载外部properties文件
    • 配置数据源
    • 配置相关的类的Bean (更建议用注解) ```xml <?xml version=”1.0” encoding=”UTF-8”?>


- AOP的xml配置实现方式
   - 目标类和切面类,织入
   - 底层使用动态代理
   - 使用:如打印日志等增强行为
```java
<?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:aop="http://www.springframework.org/schema/aop"
       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/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <!--将目标类和切面类的对象创建权交给 spring-->
    <bean id="target" class="com.jquan.aop.Target"/>
    <bean id="myAspect" class="com.jquan.aop.MyAspect"/>
    <!--配置织入关系,需要aop命名空间-->
    <aop:config>
        <!--引用切面对象-->
        <aop:aspect ref="myAspect">

            <!--抽取切点表达式-->
            <aop:pointcut id="myPointcut" expression="execution(* com.jquan.aop.*.*(..))"/>

            <!--配置切面对象的什么方法,要对哪个目标对象的什么方法进行何种增强-->

           <!-- <aop:before method="before" pointcut="execution(public void com.jquan.aop.Target.save())"/>
            <aop:after-returning method="afterReturning" pointcut="execution(public void com.jquan.aop.Target.save())"/>
            <aop:around method="around" pointcut="execution(public void com.jquan.aop.Target.save())"/>
            <aop:after method="after" pointcut="execution(public void com.jquan.aop.Target.save())"/>-->

            <!--可以用通配符的方式配置切点-->
          <!--  <aop:before method="before" pointcut="execution(* com.jquan.aop.*.*(..))"/>-->
            <!--使用抽取的切点表达式配置-->
            <aop:before method="before" pointcut-ref="myPointcut"/>


        </aop:aspect>
    </aop:config>

</beans>

spring-mvc.xml

“>


- 视图解析器
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22442214/1634139030856-acda471e-eb8f-4970-bf89-b523a3123c38.png#clientId=udc7384d9-a0db-4&from=paste&height=236&id=u4cc54f77&margin=%5Bobject%20Object%5D&name=image.png&originHeight=472&originWidth=1086&originalType=binary&ratio=1&size=58071&status=done&style=none&taskId=ude212238-8d5c-4afc-b90a-abf01456aea&width=543)
   - ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22442214/1634139048302-f8a62f53-ba8f-4d92-8a99-7799d330bfe0.png#clientId=udc7384d9-a0db-4&from=paste&height=95&id=u65f3642e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=190&originWidth=757&originalType=binary&ratio=1&size=13532&status=done&style=none&taskId=ub3fab28e-438a-4ce4-95bf-0782ef47739&width=378.5)
- 期望SpringMVC自动将User转换成json格式的字符串
```xml
<!--期望SpringMVC自动将User转换成json格式的字符串-->
    <!--通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用jackson进行对象或集合的转换,
    因此需要在spring-mvc.xml中进行如下配置:-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
            </list>
        </property>
    </bean>
  • 自定义转换器声明
    • 需要在中引用转换器
      • ```xml

- 配置文件上传
```xml
   <!--配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UYF-8"/>
        <property name="maxUploadSize" value="500000"/>
    </bean>
  • 对于静态资源的访问权限

    
      <!--开发资源的访问,比如js/下的JQuery-->
      <!--开放资源访问方式1-->
      <!--  <mvc:resources mapping="/js/**" location="/js/" />-->
    
      <!--开放资源访问方式2-->
      <mvc:default-servlet-handler/>
    
  • 对于 一些说明

    • https://www.jianshu.com/p/e154c0cdcddd
    • 会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter、ExceptionHandlerExceptionResolver三个bean支持使用了像@RquestMapping、ExceptionHandler等等的注解的controller 方法去处理请求
    • 支持使用了ConversionService]的实例对表单参数进行类型转换。
    • 支持使用@NumberFormat、@NumberFormat注解对数据类型进行格式化。
    • 支持使用@Valid对javaBean进行JSR-303验证。
    • 支持使用@RequestBody、@ResponseBody
  • 配置拦截器

    <mvc:interceptors>
          <mvc:interceptor>
              <mvc:mapping path="/**"/>
              <mvc:exclude-mapping path="/user/login"/>
              <bean class="com.jquan.interceptor.PrivilegeInterceptor"></bean>
          </mvc:interceptor>
      </mvc:interceptors>
    
  • 配置默认异常处理器 ```xml


- 配置自定义的异常处理器
```xml
<bean id="exceptionResolver" class="com.jquan.resolve.MyExceptionResolver"></bean>

application-anno.xml

  • 使用注解使用aop, 单独配一个配置文件 ```java <?xml version=”1.0” encoding=”UTF-8”?>
<!--组件扫描-->
<context:component-scan base-package="com.jquan.anno"></context:component-scan>
<!--aop自动代理-->
<aop:aspectj-autoproxy/>


- 使用事务控制-xml配置方式 还有 注解方式
```java
<?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: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.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
        <property name="user" value="root"/>
        <property name="password" value="Cjq123456789"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--
    <bean id="accountDao" class="com.jquan.dao.impl.AccountDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

    <bean id="accountService" class="com.jquan.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"/>
    </bean>


    &lt;!&ndash;配置平台事务管理器&ndash;&gt;
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>


    &lt;!&ndash;事务增强配置&ndash;&gt;
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            &lt;!&ndash;默认配置,对切点的所有方法使用,并应用默认配置&ndash;&gt;
            <tx:method name="*"/>
            &lt;!&ndash;为具体方法配置&ndash;&gt;
            <tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
            <tx:method name="save" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false"/>
            <tx:method name="update*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true"/>

        </tx:attributes>
    </tx:advice>

    &lt;!&ndash;配置事务织入&ndash;&gt;
    <aop:config>
        &lt;!&ndash;抽取切点配置&ndash;&gt;
        <aop:pointcut id="txPointcut" expression="execution(* com.jquan.service.impl.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>

    -->

<!-- ///////////////////////////////////////////////////// -->
    <!--使用注解声明事务开发-->
    <!--组件扫描-->
    <context:component-scan base-package="com.jquan"/>
    <!--事务的注解驱动-->
    <tx:annotation-driven/>
    <!--平台事务管理器还是要配置的-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--datasource\jdbcTemplate上面已经配好了-->


</beans>
  • 配置 自定义类型转换器 和 插件 ```java

<plugins>
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <property name="dialect" value="mysql"/>
    </plugin>
</plugins>

<a name="kmCDN"></a>
## sqlMapConfig.xml

- MyBatis 核心配置文件
   - 加载外部文件 jabc配置文件
   - 定义别名
   - 配置数据源环境
   - 加载映射环境
```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>

    <!--加载外部文件-->
    <properties resource="jdbc.properties"></properties>

    <!--自定义别名-->
    <typeAliases>
        <typeAlias type="com.jquan.domain.User" alias="user"/>
    </typeAliases>

    <!--数据源环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--加载映射文件-->
    <mappers>
        <!--!!!写路径时,最好用 copy ~-->
        <!--下面这个,用com/jquan/mapper/UserMapper.xml 是不对的,虽然参考资料是这么写,坑-->
        <mapper resource="com.jquan.mapper\UserMapper.xml"/>
    </mappers>
</configuration>

UserMapper.xml

  • 使用MyBatis时某个类的映射文件 ```xml <?xml version=”1.0” encoding=”UTF-8” ?> <!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN” “http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    insert into user values (#{id},#{username},#{password}); delete from user where id=#{id}; update user set username=#{username},password=#{password} where id = #{id}


- 多表映射<resultMap> 配置
```java
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jquan.mapper.UserMapper">

    <resultMap id="userMap" type="user"> <!--首先是user  u表left join o表-->
       <id column="uid" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="birthday" property="birthday"/>

        <!-- 1对多的关系: 配置集合信息
            property:集合名称,和User类中的orderList字段名称对应
            ofType: 当前集合中的数据类型
        -->
        <collection property="orderList" ofType="order">
            <!--封装order数据-->
            <id column="oid" property="id"/>
            <result column="ordertime" property="ordertime"/>
            <result column="total" property="total"/>
        </collection>

    </resultMap>

    <select id="findAll" resultMap="userMap">
        select * ,o.id oid from user u left join orders o on u.id = o.uid
    </select>


    <resultMap id="userRoleMap" type="user">
        <id column="id" property="id"></id>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="birthday" property="birthday"/>
        <collection property="roleList" ofType="role">
            <id column="rid" property="id"/>
            <result column="rolename" property="roleName"/>
            <result column="roleDesc" property="roleDesc"/>
        </collection>

    </resultMap>
    <select id="findUserAndRoleAll" resultMap="userRoleMap">
        select u.*,r.*,r.id rid from user u  left join sys_user_role ur  on u.id = ur.userid  left join sys_role r on ur.roleid = r.id
    </select>

</mapper>