### Struts+Spring+Hibernate框架整合相关知识点
#### 一、环境配置与依赖管理
**1.1 解决类冲突问题**
在使用Struts+Spring+Hibernate(简称SSH)进行项目开发时,可能会遇到类冲突的情况。特别是当涉及到Tomcat服务器下的`/WEB-INF/lib`目录中的第三方库版本不一致时,这种冲突会更加明显。例如,提到的`asm-2.2.3.jar`和`commons-collections-2.1.1.jar`文件就可能引发此类问题。
**解决方法:**
- 首先确认项目中是否确实需要这两个特定版本的jar包。
- 如果项目并不依赖于这些版本,建议删除Tomcat服务器下的`/WEB-INF/lib`目录中的这两个文件,以避免潜在的类冲突。
- 同时,确保项目依赖管理工具(如Maven或Gradle)中包含了正确的依赖版本,并且优先级高于Tomcat自带的库。
**1.2 分离配置文件**
为了更好地组织代码和提高项目的可维护性,推荐将不同模块的功能通过单独的XML文件进行配置。这样做的好处包括但不限于:
- **便于维护**:每个文件专注于一种类型的配置,使得定位和修改配置更为直观。
- **模块化**:不同的功能可以独立配置,有助于团队协作。
- **清晰性**:文件命名采用统一的前缀,比如以`applicationContext-`开头,后面跟上具体的模块名(如`action`、`dao`等),使得配置文件结构更加清晰。
#### 二、配置示例解析
**2.1 Struts与Spring集成**
在Struts配置文件中引入Spring的上下文加载插件,可以实现Struts与Spring的无缝集成。
```xml
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext-*.xml"/>
</plug-in>
```
这段配置指定了Spring的上下文位置,即`/WEB-INF/classes/applicationContext-*.xml`,这正是前面提到的分离配置文件。
**2.2 Hibernate配置示例**
在`applicationContext-common.xml`中配置Hibernate的SessionFactory:
```xml
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/entity/Student.hbm.xml</value>
</list>
</property>
</bean>
```
这里的配置指定了Hibernate的配置文件路径、数据库方言、实体映射文件等关键属性。
**2.3 Hibernate核心配置文件**
`hibernate.cfg.xml`是Hibernate的核心配置文件,用于设置数据库连接信息和其他高级选项:
```xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:sqlserver://classroom1\SQLEXPRESS:1500;databaseName=Student</property>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">sa</property>
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
```
**2.4 Spring Web MVC配置**
为了支持Spring Web MVC,还需要在`web.xml`中配置一个过滤器,用于字符编码的转换:
```xml
<filter>
<filter-name>abc</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>abc</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
这个过滤器的作用是在所有请求进入Web应用之前统一进行字符编码的转换,这里设置的是GBK编码。
#### 三、总结
在进行SSH框架的整合过程中,需要注意以下几个方面:
- 确保项目中使用的库版本与服务器环境中的版本一致,避免类冲突。
- 通过分离配置文件的方式,可以使项目的结构更加清晰,便于后期维护。
- 正确配置Struts与Spring之间的集成,以及Hibernate的核心配置,是实现SSH框架整合的关键。
- 设置合适的字符编码过滤器,以保证数据的正确传输。