struts2_hibernate5_spring4整合的一般步骤及其注意事项

来源:互联网 发布:淘宝拍照用什么手机好 编辑:程序博客网 时间:2024/05/27 12:21

整合逻辑:先整合spring,再整合hibernate,最后整合Struts2.

spring整合:

1.导入相关jar包:导入spring相关jar包:ioc,aop,tx,web,junit整合包

2.在src目录下创建config.spring的包,在其中创建applicationContext.xml文件,引入约束文件。本项目IOC与DI均采用注解的方式实现

<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"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/tx http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 开启注解扫描 --><context:component-scan base-package="com.maeeki"/></beans>
3.在web.xml中配置applicationContext.xml文件为应用加载时,随着servletContext对象的创建而加载,因此需要配置servletContext对象的监听器

<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
4.接着需要指定加载applicationtionContext.xml文件的位置,若是将该文件放入WEB-INF目录下,那么就不用进行此配置,因为spring默认就是去加载WEB-INF下的applicationContext.xml文件的。但是为了便于配置文件的统一管理,建议还是将配置文件放于一处去管理

<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/spring/applicationContext.xml</param-value></context-param>
备注:为什么要加classpath呢?因为spring默认的加载路径是整个项目的根目录,而配置文件的保存位置是从类的根目录(src)起始的,加上classpath:进行指定当前的相对路径是类的根目录。

整合hibernate(spring接管hibernate配置文件,不再另外创建hibernate.cfg.xml文件):

1.导入hibernate的相关jar包

2.在config.spring下面创建文件:applicationContext-jdbc.xml

如下配置applicationContext-jdbc.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"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/tx http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">    <!-- 连接数据库 -->    <property name="dataSource" ref="dataSource"></property>    <!-- 配置hibernate -->    <property name="hibernateProperties">    <props>    <!-- 配置MySQL数据库的方言 -->    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><!-- 配置使得控制台可以展示自动生成的sql语句 --><prop key="hibernate.show_sql">true</prop><!-- 配置使得展示的sql语句以一定的格式输出 --><prop key="hibernate.format_sql">true</prop><!-- 配置值为update时,若数据库中不存在表时自动生成,存在表时在原表上操作,若不想自动生成改为none即可 --><prop key="hibernate.hbm2ddl.auto">update</prop><!-- 将session绑定到当前线程上,用于控制线程安全问题 --><prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</prop>    </props>    </property>    <!-- 引入映射文件 -->    <property name="mappingLocations">    <array>    <value>classpath:com/maeeki/domain/*.hbm.xml</value>    </array>    </property>    </bean><!-- 配置数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://locahost:3306/crm"></property><property name="user" value="root"></property><property name="password" value="123"></property></bean><!-- 配置hibernateTemplate --><bean id="hibernateTemplate" class="org.springframework.orm.hibernate4.HibernateTemplate"><property name="sessionFactory" ref="sessionFactory"></property>l</bean></beans>


3.配置事务  创建applicationContext-tx.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"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/tx http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 配置通知  因为通知也是采用注解配置,因此此处注释了 --><!--<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes><tx:method name="*" propagation="REQUIRED" read-only="false"/><tx:method name="find*" propagation="SUPPORTS" read-only="true"/></tx:attributes></tx:advice>配置切面 <aop:config><aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/></aop:config>--></beans>

4.配置aop 创建applicationContext-aop.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"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/tx http://www.springframework.org/schema/tx/spring-tx.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 配置切入点 --><aop:config><aop:pointcut expression="execution(* com.maeeki.service.impl.*.*(..))" id="pt1"/></aop:config></beans>

5.将以上的三个配置导入整合到applicationContext.xml中

<import resource="applicationContext-jdbc.xml"/><import resource="applicationContext-tx.xml"/><import resource="applicationContext-aop.xml"/>

6.创建实体类及其对应的映射xml文件
映射文件的模板如下 :

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.maeeki.domain"><class name="Customer" table="cst_customer"><id name="custId" column="cust_id"><generator class="native"></generator></id><property name="custName" column="cust_name"></property><property name="custSource" column="custSource"></property><property name="custIndustry" column="custIndustry"></property><property name="custLevel" column="custLevel"></property><property name="custAddress" column="custAddress"></property><property name="custPhone" column="custPhone"></property></class></hibernate-mapping>

7.检测hibernate与spring整合是否成功
    创建service层,创建dao层,在dao层中调用hibernateTemplate进行数据的存储操作(做Java开发的这个地方应该都很清楚的)
    建立一个junit测试类,并在测试类中引入程序运行所需要加载的配置文件,测试类代码如下:

package com.maeeki.test;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.maeeki.domain.Customer;import com.maeeki.service.ICustomerService;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:config/spring/applicationContext.xml"})public class SpringHibernateTest {@Autowiredprivate ICustomerService customerService;@Testpublic void Test1(){Customer customer = new Customer();customer.setCustName("福光");customer.setCustPhone("34252525");customerService.addCustomer(customer);}}

Struts2整合
1.导入Struts2 jar包
2.将action动作类交于spring进行管理
3.创建spring.struts包,在该包中创建struts.xml文件,(注意spring接管动作类后在Struts.xml中的class有属性应与spring定义的动作类id一致)示例代码如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><!-- 配置开发者模式 --><constant name="struts.devMode" value="true"></constant><!-- 配置URL后缀名 --><constant name="struts.action.extension" value="action"></constant><!-- 配置页面主题 --><constant name="struts.ui.theme" value="simple"></constant><!-- 配置公共包 --><package name="MyDefault" extends="struts-default" abstract="true"></package><!-- 载入其他配置文件 --><include file="config/struts2/struts-customer.xml"></include></struts>


4.创建struts-customer.xml文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="customer" extends="MyDefault" namespace="/customer"><action name="findAllCustomer" class="customerAction" method="findAllCustomer"><result name="findAllCustomer">/jsp/customer/list.jsp</result></action></package></struts>



5.在Struts.xml中加载该文件

6.在web.xml中,配置Struts2的核心过滤器,并在过滤器中配置其初始化参数,指定Struts配置文件的位置,最终web.xml的配置:


<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>day038_crm_S2S4H503_Test</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><!-- 配置监听器,用于监听servletContext对象的状态 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置servletContext对象创建时需要加载的内容 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/spring/applicationContext.xml</param-value></context-param><!-- 配置Struts2的核心过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><!-- 配置核心过滤器初始化时加载的内容 --><init-param><param-name>config</param-name><param-value>struts-default.xml,struts-plugin.xml,config/struts2/struts.xml</param-value></init-param></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>



7.创建动作类CustomerAction



package com.maeeki.web.action;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import com.maeeki.domain.Customer;import com.maeeki.service.ICustomerService;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;@Controller("customerAction")public class CustomerAction extends ActionSupport implements ModelDriven<Customer>{@Autowiredprivate ICustomerService customerService;private Customer customer = new Customer();@Overridepublic Customer getModel() {return customer;}private List<Customer> customers;public List<Customer> getCustomers() {return customers;}public String findAllCustomer(){customers = customerService.findAllCustomer();return "findAllCustomer";}}


                                             
0 0