SSM项目的相关配置

在这里插入图片描述

SSM项目的相关配置

众所周知,SSM项目的配置主要有六个(当然还有一些其他配置),web.xml的配置,Spring的配置(applicationContext.xml),SpringMVC配置(servlet-mvc.xml),Mybaits的配置(mybatis-config.xml ),JDBC文件与Log4j配置文件。

下面我们就来仔细讲解这六个配置

web.xml的配置

配置web.xml主要有两个内容,一个是Spring,一个是SpringMVC的配置。

Spring配置信息

  • 通过全局上下文参数来加载Spring配置文件
  • 配置监听器

在web.xml中继续配置Spring MVC

  • 首先配置servlet 通过Servlet标签配置dispatchServlet.需要初始化参数,加载spring MVC配置文件。
  • 配置Mapping

下面是我的web.xml配置文件的例子

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
 <!--Spring的配置信息
通过全局上下文参数来加载Sprin配置文件-->

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
<!--配置监听器,通过监听器的方式来Spring框架运行起来-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--解决中文乱码-->
<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>


<!--默认首页-->
<welcome-file-list>
<welcome-file>due/index</welcome-file>
</welcome-file-list>
<!--Spring MVC的配置信息
通过Servlet标签配置dispatcher-->

<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--需要一个初始化参数,加载spring MVC配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:springmvc-context.xml</param-value>
</init-param>
<!--容器启动加载servlet-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/监听全局路径-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/due/index</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

Spring的配置

  • 自动扫描:根据注解创建实例化,控制反转。
  • 引入配置文件。jdbc的驱动包等信息。
  • 配置数据源。需要的信息根据第二步中的jdbc中的配置文件来引用。
  • 配置Mybaits的SqlSessionFactory:有了它可以MyBaits(1:数据源:第三步配置数据源。2:自动扫描mappers.xml文件。所有的映射文件。放在一个对应的路径下。3:加载Mybaits的配置文件
  • DAO层接口包。该包下的所有都会被实例化。
    -配置事务管理:交由Spring来管理(定义事物传播属性)
  • 配置事物切面。
  • 异常处理相关。

下面是applicationContext.xml配置信息

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

<!-- 自动扫描 -->
<context:component-scan base-package="com.sys.dao" />
<context:component-scan base-package="com.sys.service" />
<context:component-scan base-package="com.sys.entity"/>
<!-- 引入配置文件,可以使用$
{}语法,location:指定读取文件的路径 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源 -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="$
{jdbc.driverClassName}"
p:jdbcUrl="$
{jdbc.url}"
p:user="$
{jdbc.username}"
p:password="$
{jdbc.password}"
p:initialPoolSize="$
{jdbc.initialSize}"
p:maxPoolSize="$
{jdbc.maxActive}"/>
<!-- 配置mybatis的sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mappers.xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/mappers/*.xml"></property>
<!-- mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.sys.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事务通知属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 定义事务传播属性 -->
<!-- PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。-->

<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="append*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="repair" propagation="REQUIRED" />
<tx:method name="delAndRepair" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="find*" propagation="SUPPORTS" />
<tx:method name="load*" propagation="SUPPORTS" />
<tx:method name="search*" propagation="SUPPORTS" />
<tx:method name="datagrid*" propagation="SUPPORTS" />
<tx:method name="*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>
<!-- 配置事务切面 -->
<aop:config>
<aop:pointcut id="serviceOperation"
expression="execution(* com.sys.service.*.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
<!-- 异常统一处理 -->
<!-- <bean id="exceptionResolver" class="com.sys.util.HandlerException"/> -->
</beans>

需要注意的地方

(1) advice(建议)的命名:由于每个模块都会有自己的Advice,所以在命名上需要作出规范,初步的构想就是模块名+Advice(只是一种命名规范)。

(2) tx:attribute标签所配置的是作为事务的方法的命名类型。

如<tx:method name=”save*” propagation=”REQUIRED”/>

其中*为通配符,即代表以save为开头的所有方法,即表示符合此命名规则的方法作为一个事务。

propagation=”REQUIRED”代表支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

(3) aop:pointcut标签配置参与事务的类,由于是在Service中进行数据库业务操作,配的应该是包含那些作为事务的方法的Service类。

首先应该特别注意的是id的命名,同样由于每个模块都有自己事务切面,所以我觉得初步的命名规则因为 all+模块名+ServiceMethod。而且每个模块之间不同之处还在于以下一句:

1
expression="execution(*com.test.testAda.test.model.service.*.*(..))"

其中第一个代表返回值,第二代表service下子包,第三个*代表方法名,“(..)”代表方法参数。

(4) aop:advisor标签就是把上面我们所配置的事务管理两部分属性整合起来作为整个事务管理。

图解:
在这里插入图片描述

Spring MVC(Servlet-mvc.xml)

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


<!-- 使用注解的包,包括子集 -->
<context:component-scan base-package="com.sys.controller" />
<!-- 添加数据转换的注解驱动 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/" />
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 上传组件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传的编码格式 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 设置最大上传大小 -->
<property name="maxUploadSize" value="5242880"/>
</bean>
<!-- 静态资源配置设置:除了控制器一概不管理 -->
<mvc:default-servlet-handler/>
</beans>

JDBC和Log4配置文件。

(日志文件,将错误信息保存在日志文件,前台不能显示错误文件,也可以保存用户访问信息,以及数据库操作信息)。

log4j.properties配置源码:

1
2
3
4
5
6
7
8
9
log4j.rootLogger=info,appender1,appender2

log4j.appender.appender1=org.apache.log4j.ConsoleAppender

log4j.appender.appender2=org.apache.log4j.FileAppender
log4j.appender.appender2.File=D:/logs/news/logFile.txt

log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout

jdbc配置文件中修改相关信息。
jdbc.properties文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver    //Oracle数据库
jdbc.url=jdbc\:oracle\:thin\:@localhost\:1521\:jredu //数据库名
jdbc.username=OnlineTest //数据库表
jdbc.password=Jredu12345 //数据库密码

jdbc.initialSize=0

jdbc.maxActive=20

jdbc.maxIdle=20

jdbc.minIdle=1

jdbc.maxWait=60000

最好自己动手配置一遍,记忆更深刻哦。

参考文档

Spring声明式事务配置管理方法

-------------本文结束感谢您的阅读-------------
wusha wechat
欢迎您扫一扫上面的微信二维码,加我的微信!
坚持原创技术分享,您的支持将鼓励我继续创作!