Singerw's Repository Singerw's Repository
首页
  • 相关文章

    • HTML相关文章
    • CSS相关文章
    • JavaScript相关文章
  • 学习笔记

    • JavaScript笔记
    • ES6笔记
    • Vue笔记
  • 相关文章

    • Spring相关文章
    • SpringBoot相关文章
    • MyBatis相关文章
    • MySQL相关文章
  • 学习笔记

    • SpringBoot笔记
    • Spring笔记
    • MyBatis笔记
    • MySQL笔记
    • JavaWeb笔记
    • JavaCore笔记
  • 学习笔记

    • Linux笔记
    • Git笔记
    • 技术文档
  • 偏门技术

    • GitHub技巧
    • 博客搭建
    • 科学上网
  • 安装教程

    • JDK
    • MySQL
    • Node.js
    • Linux
  • 终身学习
  • 面试人生
  • 心情杂货
  • 生活随笔
  • 归档
  • 标签
GitHub (opens new window)

Singerw

谁能够凭爱意将富士山私有
首页
  • 相关文章

    • HTML相关文章
    • CSS相关文章
    • JavaScript相关文章
  • 学习笔记

    • JavaScript笔记
    • ES6笔记
    • Vue笔记
  • 相关文章

    • Spring相关文章
    • SpringBoot相关文章
    • MyBatis相关文章
    • MySQL相关文章
  • 学习笔记

    • SpringBoot笔记
    • Spring笔记
    • MyBatis笔记
    • MySQL笔记
    • JavaWeb笔记
    • JavaCore笔记
  • 学习笔记

    • Linux笔记
    • Git笔记
    • 技术文档
  • 偏门技术

    • GitHub技巧
    • 博客搭建
    • 科学上网
  • 安装教程

    • JDK
    • MySQL
    • Node.js
    • Linux
  • 终身学习
  • 面试人生
  • 心情杂货
  • 生活随笔
  • 归档
  • 标签
GitHub (opens new window)
  • Spring

  • SpringMVC

  • SSM整合

    • 《SSM整合》学习笔记
      • 1 、添加依赖MyBatis-Spring
      • 2、定义SqlSessionFactory
      • 3、创建dataSource数据源
      • 4、配置数据库连接池
        • druid的优点
        • druid的参数和配置详解
        • druid配置操作步骤
      • 5、创建发现注册器:MapperScannerConfigurer
      • 5、单元测试
      • 7、配置log4j日志
        • 1、导入jar文件
        • 2、在mybatis-config.xml中配置
        • 3、配置log4j的配置文件
        • 4、log4j的使用
      • 8、加载mybatis-config.xml配置文件
      • 1、新建springmvc.xml配置文件
      • 2、配置注解驱动
      • 3、静态资源过滤配置
      • 4、配置上下文扫描路径
      • 5、配置视图解析器
      • 6、配置文件上传
      • 7、配置web.xml
      • 8、配置Spring文件
      • 9、加载SpringMVC的核心
      • 10、配置Post请求过滤器
      • 11、配置Session过期时间
      • 12、创建控制器进行测试
      • 13、整合完毕
      • 1、applicationContext.xml
      • 2、database.properties
      • 3、log4j.properties
      • 4、mybatis-config.xml
      • 5、spring-mvc.xml
      • 6、web.xml
    • SSM整合前提准备
    • Spring整合Mybatis
    • Spring整合SpringMVC
    • SSM整合配置文件示例
    • 判断用户是否登录展示不同页面
    • Session丢失问题与Cookie的添加
  • 《Spring》学习笔记
  • SSM整合
Singerw
2021-08-30

《SSM整合》学习笔记

# Spring+SpringMVC+MyBatis整合

# 一、前提准备🍋

# 1、导入所需jar文件依赖😹

<dependencies>
    <!-- mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    
    <!--druid数据库连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.26</version>
    </dependency>
    
    <!-- commons-beanutils -->
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.9.4</version>
    </dependency>
    
    <!-- commons-collections -->
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.2</version>
    </dependency>

    <!-- javax.servlet.jsp-api -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        <scope>provided</scope>
    </dependency>
    
    <!-- javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    
    <!--jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    
    <!--mybatis-spring-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.2</version>
    </dependency>

    <!-- 核心包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!-- Beans包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!-- 容器包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!-- 容器依赖包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!--spring事务管理包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!--SpringJDBC连接数据库包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!--单元测试包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!--Spring文本项目包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!--SpringMVC包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.6</version>
    </dependency>

    <!-- 文件上传 commons-fileupload -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
    <!-- 文件上传 commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
    </dependency>

    <!--添加aspectjweaver包 aop -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.9.6</version>
    </dependency>

    <!-- jackson-databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>

    <!-- jackson-core -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.12.3</version>
    </dependency>

    <!-- jackson-annotations -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.12.3</version>
    </dependency>

    <!--Lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
        <scope>provided</scope>
    </dependency>

    <!--Log4j-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!--Juint4.12-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193

注意:

# 2、Maven静态资源导出问题🌊

<!--静态资源到处问题-->
<!--在build中配置resources,来防止我们资源导出失败的问题-->
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.yml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.yml</include>
            </includes>
        </resource>
    </resources>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 二、Spring整合Mybatis⛵️

# 1 、添加依赖MyBatis-Spring

<!--mybatis-spring-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.2</version>
</dependency>
1
2
3
4
5
6

​ MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring或 MyBatis-Spring。

所以我们此时需要一个mybatis-spring的2.0版本的jar的坐标

# 2、定义SqlSessionFactory

首先需要创建一个spring的applicationContext.xml配置文件,以下所有的配置都在applicationContext.xml文件中完成。

​ 要想和 Spring和 MyBatis 一起使用,需要在 Spring 应用上下文中定义至少两样东西:一个 SqlSessionFactory 和至少一个数据映射器类。

​ 在 MyBatis-Spring 中,可使用 SqlSessionFactoryBean来创建 SqlSessionFactory。 要配置这个工厂 bean,只需要把下面代码放在 Spring 的 applicationContext的配置文件中:

<!--1、MyBaits-Spring配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--需要一个唯一的必要属性DataSource数据源-->
    <property name="dataSource" ref="dataSource"/>
</bean>
1
2
3
4
5

# 3、创建dataSource数据源

注意:SqlSessionFactory 需要一个 dataSource(数据源)。 这可以是任意的 dataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。

在Spring的applicationContext的配置文件中配置数据源,这里使用的是alibaba的Druid(德鲁伊):

<!--配置dataSource数据源,配置数据库连接-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="driverClassName" value="${driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>

</bean>
1
2
3
4
5
6
7
8

以上需要用到database.properties

在src/main/resources目录下新建一个database.properties配置文件,用于编写连接MySQL数据库的相关信息,database.properties的内容如下:

driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/goku?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=795200
1
2
3
4

在dataSource的bean如果想引用database.properties中的内容,需要进行文件关联,关联的方法如下:

<!--关联外部db.properties,注意使用context节点-->
<comtext:property-placeholder location="classpath:database.properties"/>
1
2

# 4、配置数据库连接池

在配置数据源的同时,也需要配置数据库连接池。

  • 原生的JDBC访问思路,每次请求建立一个数据库链接,使用完成后,释放数据库链接。建立数据库连接耗时耗费资源,一个数据库服务器能够同时建立的连接数也是有限的,在大型的Web应用中,可能同时会有成百上千的访问数据库的请求,如果Web应用程序为每一个客户请求分配一个数据库连接,将导致性能的急剧下降。
  • 数据库连接池的意义在于,能够重复利用数据库连接(池化技术),提高对请求的响应时间和服务器的性能。连接池的实现思路是,预先建立了多个数据库连接对象,然后将连接对象保存到连接池中,当客户请求到来时,直接从池中取出一个连接对象为客户服务,当请求完成之后,客户程序调用close()方法,将连接对象放回池中。
  • 常见的数据库连接池技术:DBCP(DataBase connection pool)数据库连接池、C3P0、druid等。

这里配置数据库连接池,我们采用阿里巴巴的druid(德鲁伊),德鲁伊为阿里巴巴的数据源,(数据库连接池),集合了c3p0、dbcp、proxool等连接池的优点,还加入了日志监控,有效的监控DB池连接和SQL的执行情况。

# druid的优点

高性能。性能比dbcp、c3p0高很多。只要是jdbc支持的数据库,druid都支持,对数据库的支持性好。并且Druid针对oracle、mysql做了特别优化。提供监控功能。可以监控sql语句的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈等信息,来了解连接池、sql语句的工作情况,方便统计、分析SQL的执行性能。

# druid的参数和配置详解

配置 缺省值 说明
name 配置这个属性的意义在于,如果存在多个数据源,监控的时候 可以通过名字来区分开来。如果没有配置,将会生成一个名字, 格式是:"DataSource-" + System.identityHashCode(this)
jdbcUrl 连接数据库的url,不同数据库不一样
username 连接数据库的用户名
password 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter
driverClassName 根据url自动识别 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
initialSize 0 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
maxActive 8 最大连接池数量
maxIdle 8 已经不再使用,配置了也没效果
minIdle 最小连接池数量
maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后, 缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
poolPreparedStatements false 是否缓存preparedStatement,也就是PSCache。
PSCache 对支持游标的数据库性能提升巨大,比如说oracle。 在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
maxOpenPreparedStatements -1 要启用PSCache,必须配置大于0,当大于0时,在Druid中,不会存在Oracle下PSCache占用内存过多的问题, 可以把这个数值配置大一些,比如说100
validationQuery 用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、 testWhileIdle都不会其作用。
testOnBorrow true 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
testOnReturn false 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
testWhileIdle false 建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis, 执行validationQuery检测连接是否有效。
timeBetweenEvictionRunsMillis 有两个含义: 1) Destroy线程会检测连接的间隔时间 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
numTestsPerEvictionRun 不再使用,一个DruidDataSource只支持一个EvictionRun minEvictableIdleTimeMillis
connectionInitSqls 物理连接初始化的时候执行的sql
exceptionSorter 根据dbType自动识别 当数据库抛出一些不可恢复的异常时,抛弃连接
filters 属性类型是字符串,通过别名的方式配置扩展插件, filters 属性类型是字符串,通过别名的方式配置扩展插件,
proxyFilters 类型是List<com.alibaba.druid.filter.Filter>, 如果同时配置了filters和proxyFilters, 是组合关系,并非替换关系

# druid配置操作步骤

# 1、配置依赖

<!--druid数据库连接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.26</version>
</dependency>
1
2
3
4
5
6

# 2、配置Spring的applicationContext.xml配置文件

<!--2.2 配置数据库连接配置-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="driverClassName" value="${driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>

    <!--3、druid数据库池的配置-->
    <property name="filters" value="${filters}"/>
    <!-- 最大并发连接数 -->
    <property name="maxActive" value="${maxActive}"/>
    <!-- 初始化连接数量 -->
    <property name="initialSize" value="${initialSize}"/>
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="${maxWait}"/>
    <!-- 最小空闲连接数 -->
    <property name="minIdle" value="${minIdle}"/>
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis"
              value="${timeBetweenEvictionRunsMillis}"/>
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis"
              value="${minEvictableIdleTimeMillis}"/>
    <property name="validationQuery" value="${validationQuery}"/>
    <property name="testWhileIdle" value="${testWhileIdle}"/>
    <property name="testOnBorrow" value="${testOnBorrow}"/>
    <property name="testOnReturn" value="${testOnReturn}"/>
    <property name="maxOpenPreparedStatements"
              value="${maxOpenPreparedStatements}"/>
    <!-- 打开 removeAbandoned 功能 -->
    <property name="removeAbandoned" value="${removeAbandoned}"/>
    <!-- 1800 秒,也就是 30 分钟 -->
    <property name="removeAbandonedTimeout"
              value="${removeAbandonedTimeout}"/>
    <!-- 关闭 abanded 连接时输出错误日志 -->
    <property name="logAbandoned" value="${logAbandoned}"/>
</bean>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

# 3、applicationContext.xml中拦截器配置

<bean id="druid-stat-interceptor"
      class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">
</bean>

<bean id="druid-stat-pointcut"
      class="org.springframework.aop.support.JdkRegexpMethodPointcut"
      scope="prototype">
    <property name="patterns">
        <list>
            <value>com.etc.util.mg.mapper.*</value>
            <value>com.maven.dao.*</value>
        </list>
    </property>
</bean>

<aop:config>
    <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/>
</aop:config>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 4、修改database.properties

driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/goku?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=795200

filters=stat,wall
maxActive=20
initialSize=1
maxWait=60000
minIdle=10
maxIdle=15
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 'x'
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
maxOpenPreparedStatements=20
removeAbandoned=true
removeAbandonedTimeout=1800
logAbandoned=true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

5、配置web.xml配置

<!--连接池 启用 Web 监控统计功能 -->
<filter>
    <filter-name>DruidWebStatFilter</filter-name>
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
    <init-param>
        <param-name>exclusions</param-name>
        <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
    </init-param>
    <init-param>
        <param-name>profileEnable</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
        <!-- 用户名 -->
        <param-name>loginUsername</param-name>
        <param-value>root</param-value>
    </init-param>
    <init-param>
        <!-- 密码 -->
        <param-name>loginPassword</param-name>
        <param-value>root</param-value>
    </init-param>

</servlet>
<servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<!-- 连接池 启用 Web 监控统计功能 -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# 5、启动Tomcat进行访问

启动tomcat,并通过浏览器地址栏输入地址访问

http://localhost:8080/projectname/druid/index.html

# 5、创建发现注册器:MapperScannerConfigurer

Mybatis的MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring

Mybatis在与Spring集成的时候可以配置MapperFactoryBean来生成Mapper接口的代理. 例如:

<bean id="articleMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.singerw.dao.ArticleMapper"/>
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.singerw.dao.UserMapper" />
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
1
2
3
4
5
6
7
8

MapperFactoryBean 创建的代理类实现了 UserMapper 接口,并且注入到应用程序中。 因为代理创建在运行时环境中(Runtime,译者注) ,那么指定的映射器必须是一个接口,而 不是一个具体的实现类。

上面的配置有一个很大的缺点,就是系统有很多的配置文件时 全部需要手动编写,所以上述的方式已经很用了。

没有必要在 Spring 的 XML 配置文件中注册所有的映射器。相反,你可以使用一个 MapperScannerConfigurer , 它 将 会 查 找 类 路 径 下 的 映 射 器 并 自 动 将 它 们 创 建 成 MapperFactoryBean。

💛MapperScannerConfigurer 的作用是取代手动添加 Mapper ,自动扫描完成接口代理💛

要创建 MapperScannerConfigurer,可以在 Spring 的配置中添加如下代码:

<!--发现注册器:配置dao接口扫描包,动态的实现了dao接口可以注入到spring容器中!-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 注入 basePackage ,mapper所在的包-->
    <property name="basePackage" value="com.singerw.dao"/>
    <!-- 注入sqlSessionFactoryBean,注意是beanName不是ref 而是value -->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
1
2
3
4
5
6
7

这里需要注意一点,要将<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>中value="sqlSessionFactory的sqlSessionFactory这个值,是我们在第三步定义的SqlSessionFactory时bean的ID。

<!--1、MyBaits-Spring配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--需要一个唯一的必要属性DataSource数据源-->
    <property name="dataSource" ref="dataSource"/>
</bean>
1
2
3
4
5

# 5、单元测试

到此为止,我们就可以使用Mapper来进行数据访问:

数据库表,entity,Mapper文件,以及在Mapper中使用注解实现crud,目前没有用到Mapper.xml文件.

<!-- 为了方便进行单元测试,添加spring-test包 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.1.1.RELEASE</version>
</dependency>
1
2
3
4
5
6

jupiter5 jar包


<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.6.1</version>
    <scope>test</scope>
</dependency>
1
2
3
4
5
6
7

Junit5的写法:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

@SpringJUnitConfig(locations = "classpath:applicationContext.xml")
public class BlogTest {

    @Autowired
    private BlogMapper blogMapper;
    @Test
    public void testSelectBlog() {
        System.out.println(blogMapper.selectBlog(2));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 7、配置log4j日志

# 1、导入jar文件

<!--log4j-->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>
1
2
3
4
5
6

# 2、在mybatis-config.xml中配置

​ 新建一个MyBatis的mybatis-config.xml配置文件,在mybatis-config.xml中配置setting,需要中settings标签在配置文件中的位置顺序,mybatis配置文件有这严格的顺序。

<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>
1
2
3

# 3、配置log4j的配置文件

新建log4j.properties文件,在文件中插入如下配置:

log4j.rootLogger=DEBUG, console, file
log4j.logger.com.singerw.dao=TRACE

#console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p][%c{1}] - %m%n
log4j.appender.console.Encoding=UTF-8

#file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./logs/log.log
log4j.appender.file.MaxFileSize=500KB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p]-%c{1} - %m%n
log4j.appender.file.encoding=UTF-8

#jibie
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 4、log4j的使用

在applicationContext.xml中关联log4j.properties外部文件,方法如下:

<!--关联log4j-->
<comtext:property-placeholder location="classpath:log4j.properties"/>
1
2
  • 在要使用Log4j的类中,导入import org.apache.log4j.Logger;
  • 创建日志对象,参数为当前类的class

在要输出日志的类中加入相关语句来定义属性:

static Logger logger = Logger.getLogger(UserMapperTest.class);
1
public class UserMapperTest {
    static Logger logger = Logger.getLogger(UserMapperTest.class);

    @Test
    public void testLog4j() {
        logger.info("info:进入了testLog4j方法");
        logger.debug("debug:进入了进入了testLog4j方法");
        logger.error("debug:进入了进入了testLog4j方法");
    }
}
1
2
3
4
5
6
7
8
9
10

# 8、加载mybatis-config.xml配置文件

如果存在一个mybatis-config.xml的mybatis全局配置文件,则可以使用applicationContext.xml中的sqlSessionFactoryBean来管理并加载:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--需要一个唯一的必要属性DataSource数据源-->
    <property name="dataSource" ref="dataSource"/>
    
    <!--绑定mybatis-config.xml的配置文件-->
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <!-- 指定读取*.mapper.xml的映射文件位置 -->
    <property name="mapperLocations" value="classpath:com/singerw/mapping/*.xml"/>
</bean>
1
2
3
4
5
6
7
8
9

<property name="mapperLocations" value="classpath:com/singerw/mapping/*.xml"/>是采用Mybatis中的mapper.xml进行开发时候,需要加入这一句,如果仅仅是注解开发,则不需要再读取mapper.xml映射文件。

# 三、Spring整合SpringMVC⚡️

# 1、新建springmvc.xml配置文件

新建一个SpringMVC的springmvc.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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">



</beans>
1
2
3
4
5
6
7
8
9
10

# 2、配置注解驱动

配置注解驱动后,会自动开启处理器映射器和处理器适配器。

<mvc:annotation-driven/>
1

# 3、静态资源过滤配置

让SpringMVC不处理静态资源,但是请求还是走的前端控制器,只不过是不再处理静态资源。

<mvc:default-servlet-handler/>
1

# 4、配置上下文扫描路径

这里配置上下文扫描路径,去扫描com.singerw.controller下的组件。

<context:component-scan base-package="com.singerw.controller"/>
1

# 5、配置视图解析器

如果页面用到jsp jstl视图,需要配置视图解析器

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
1
2
3
4

# 6、配置文件上传

需要则配置

在SpringMVC配置文件中定义一个bean 类型为CommonsMultipartResolver

SpringMVC中专门封装了一个类CommonsMultipartResolver来处理文件上传,所以需要在 SpringMVC的配置件中加入一个bean;配置bean的代码如下:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

</bean>
1
2
3

加入一个bean用来处理文件上传,这里采用的是commons-fileupload:commons-fileupload:1.4

<!-- 文件上传 commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
<!-- 文件上传 commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12

# 7、配置web.xml

需要保证一个web.xml文件,且版本是4.0

<?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-app>
1
2
3
4
5
6
7
8

# 8、配置Spring文件

<!--1、配置Spring文件-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
1
2
3
4
5
6
7
8

这里经常犯一个错误,把ContextLoaderListener写出ContextCleanupListener,导致bean无法注入,一直报错,配置时需要认真谨慎。

# 9、加载SpringMVC的核心

配置DispatcherServlet,加载SpringMVC的核心(请求分发器/前端控制器)

<servlet>
    <servlet-name>springDispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!--配置DispatcherServlet要绑定Spring的配置文件-->
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!--启动级别1:和服务器一起启动-->
    <load-on-startup>1</load-on-startup>
</servlet>
<!-- 2.1将所有请求映射到 DispatcherServlet 进行处理 -->
<servlet-mapping>
    <servlet-name>springDispatcherServlet</servlet-name>
    <!--2.2配置url-pattern 路径
            /:只匹配所有的请求,不会匹配jsp等页面
            /*:匹配所有的请求,包括匹配jsp等页面-->
    <url-pattern>/</url-pattern>
</servlet-mapping>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 10、配置Post请求过滤器

spring提供的characterEncodingFilter配置,配置后解决post请求页面乱码问题!

<!--3、Post请求过滤器-->
<!--spring提供的characterEncodingFilter配置 -->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <!--观察发现这个类 CharacterEncodingFilter 有一个属性 encoding 所以提供一个initparm以及 value -->
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--给CharacterEncodingFilter类的对象进行初始化的赋值request.setCharacterEncoding-->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <!--响应编码的设置 true 设置response -->
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<!--3.1 过滤器对哪些资源进行过滤呀 -->
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 11、配置Session过期时间

<!--4、Session过期时间:15分钟-->
<session-config>
    <session-timeout>15</session-timeout>
</session-config>
1
2
3
4

# 12、创建控制器进行测试

首先需求导入json的三大件jar包

  • com.fasterxml.jackson.core:jackson-databind:2.12.3
  • com.fasterxml.jackson.core:jackson-core:2.12.3
  • com.fasterxml.jackson.core:jackson-annotations:2.12.3
<!-- jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

<!-- jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.12.3</version>
</dependency>

<!-- jackson-annotations -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.12.3</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

然后创建控制器:

@RestController
@RequestMapping("/api")
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    @GetMapping("/artAll")
    public ResponseData<Article> getArticleList(
        @RequestParam(name = "page", required = true, defaultValue = "0") int page,
        @RequestParam(name = "limit", required = true, defaultValue = "10") int limit,
        @RequestParam(name = "keywords", required = true, defaultValue = "") String keywords) {
        return articleService.getArticleList(page, limit, keywords);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

测试结果:

# 13、整合完毕

✌️✌️完结撒花✌️✌️

# 四、SSM整合配置文件示例🥉

# 1、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:comtext="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
                           https://www.springframework.org/schema/context/spring-context.xsd">

    <!--2、数据库连接的配置-->
    <!--2.1 关联外部db.properties,注意使用context节点-->
    <comtext:property-placeholder location="classpath:database.properties"/>
    <!--关联log4j-->
    <comtext:property-placeholder location="classpath:log4j.properties"/>

    <!--2.2 配置数据库连接配置-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!--3、druid数据库池的配置-->
        <property name="filters" value="${filters}"/>
        <!-- 最大并发连接数 -->
        <property name="maxActive" value="${maxActive}"/>
        <!-- 初始化连接数量 -->
        <property name="initialSize" value="${initialSize}"/>
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${maxWait}"/>
        <!-- 最小空闲连接数 -->
        <property name="minIdle" value="${minIdle}"/>
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis"
                  value="${timeBetweenEvictionRunsMillis}"/>
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis"
                  value="${minEvictableIdleTimeMillis}"/>
        <property name="validationQuery" value="${validationQuery}"/>
        <property name="testWhileIdle" value="${testWhileIdle}"/>
        <property name="testOnBorrow" value="${testOnBorrow}"/>
        <property name="testOnReturn" value="${testOnReturn}"/>
        <property name="maxOpenPreparedStatements"
                  value="${maxOpenPreparedStatements}"/>
        <!-- 打开 removeAbandoned 功能 -->
        <property name="removeAbandoned" value="${removeAbandoned}"/>
        <!-- 1800 秒,也就是 30 分钟 -->
        <property name="removeAbandonedTimeout"
                  value="${removeAbandonedTimeout}"/>
        <!-- 关闭 abanded 连接时输出错误日志 -->
        <property name="logAbandoned" value="${logAbandoned}"/>
    </bean>

    <!--1、MyBaits-Spring配置sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--需要一个唯一的必要属性DataSource数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--绑定mybatis-config.xml的配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!-- 指定读取*.mapper.xml的映射文件位置 -->
        <property name="mapperLocations" value="classpath:com/singerw/mapping/*.xml"/>
    </bean>

    <!--4、发现注册器:配置dao接口扫描包,动态的实现了dao接口可以注入到spring容器中!-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入 basePackage ,mapper所在的包-->
        <property name="basePackage" value="com.singerw.dao"/>
        <!-- 注入sqlSessionFactoryBean,注意是beanName不是ref 而是value -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

    <!--5、自动扫描(自动注入),扫描com.singerw这个包以及它的子包的所有使用-->
    <comtext:component-scan base-package="com.singerw"/>
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

# 2、database.properties

driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/goku?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=795200

filters=stat,wall
maxActive=20
initialSize=1
maxWait=60000
minIdle=10
maxIdle=15
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 'x'
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
maxOpenPreparedStatements=20
removeAbandoned=true
removeAbandonedTimeout=1800
logAbandoned=true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 3、log4j.properties

log4j.rootLogger=DEBUG, console, file
log4j.logger.com.singerw.dao=TRACE

#console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p][%c{1}] - %m%n
log4j.appender.console.Encoding=UTF-8

#file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./logs/log.log
log4j.appender.file.MaxFileSize=500KB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p]-%c{1} - %m%n
log4j.appender.file.encoding=UTF-8

#jibie
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# 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设置LOG4J日志输出-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!-- 别名 -->
    <typeAliases>
        <!-- 包名 -->
        <package name="com.singerw.pojo"/>
    </typeAliases>

</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 5、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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd
                           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-4.3.xsd">

    <!--1、注解驱动:检查springmvc配置文件中加入: <mvc:annotation-driven>
    如果没有加入mvc-annotation的节点-->
    <!--自动开启处理器映射器-->
    <!--自动开启处理器适配器-->
    <mvc:annotation-driven/>

    <!--2、静态静态资源过滤配置:让SpringMVC不处理静态资源的处理,注意,请求还是有走前端控制器,只不过不处理 -->
    <mvc:default-servlet-handler/>


    <!--3、上下文扫描路径 controller,扫描包:设置组件的扫描路径-->
    <context:component-scan base-package="com.singerw.controller"/>


    <!--4、配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 6、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">

    <!--1、配置Spring文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!--2、配置DispatcherServlet,加载SpringMVC的核心(请求分发器/前端控制器)-->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--配置DispatcherServlet要绑定Spring的配置文件-->
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!--启动级别1:和服务器一起启动-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 2.1将所有请求映射到 DispatcherServlet 进行处理 -->
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <!--2.2配置url-pattern 路径
            /:只匹配所有的请求,不会匹配jsp等页面
            /*:匹配所有的请求,包括匹配jsp等页面-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--3、Post请求过滤器-->
    <!--spring提供的characterEncodingFilter配置 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <!--观察发现这个类 CharacterEncodingFilter 有一个属性 encoding 所以提供一个initparm以及 value -->
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!--给CharacterEncodingFilter类的对象进行初始化的赋值request.setCharacterEncoding-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <!--响应编码的设置 true 设置response -->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <!--3.1 过滤器对哪些资源进行过滤呀 -->
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--4、Session过期时间:15分钟-->
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>

</web-app>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
编辑 (opens new window)
#SSM整合
批量物理删除和逻辑删除
SSM整合前提准备

← 批量物理删除和逻辑删除 SSM整合前提准备→

最近更新
01
Maven资源导出问题终极版
10-12
02
《MyBatis-Plus》学习笔记
10-07
03
MyBatis-Plus—配置日志
10-07
更多文章>
Theme by Vdoing | Copyright © 2020-2021 版权所有 | repository.singerw.com
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×