struts2集成Spring,Hibernate的问题!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2集成Spring,Hibernate的问题!!相关的知识,希望对你有一定的参考价值。

Spring已经集成了.也可以在Action里面注入DAO了. 在ApplicationContext里面集成sessionFactory的时候就面出现ErrorListenerStart . 是不是还要在WEB.XML里面配置什么东西来着? PS:我只在工程里面在加入了Hibernate的JAR包,就在applicationContext里面配置的sessionFactory这个bean. 刚用struts2 老鸟们帮帮忙.!! XX!!

部分搭建过程及源码:
1.先组合实现Hibernate3.2+Spring2.5支持,删除hibernate.cfg.xml文件,修改applicationContext.xml文件的内容,增加SessionFactory和dataSource的设置。
2.通过MyEclipse的向导方式,生成POJO类和对应的映射文件。
3.修改applicationContext.xml文件中<property name="mappingResources">元素的内容。
4.编写DAO接口和实现类。
5.修改applicationContext.xml文件,增加对Dao实现类的配置。
6.组合Struts2和Spring2.5,修改web.xml文件,增加struts2的所需要的过滤器配置。
7.增加struts2相应类库,增加struts2与spring的配置jar包。
8.拷贝struts.xml文件到src根目录下,再修改struts.xml文件,进行常量配置。
9.修改web.xml文件,配置Spring监听器,和上下文变量。并增加OpenSessionInViewFilter的设置。
10.写入action类。
11.配置struts.xml文件。
12.修改applicationContext.xml
13.编写Jsp文件。
14.加载运行项目。
下面是关键文件的源码:
struts.xml源码:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- struts2委托spring管理 -->
<constant name="struts.objectFactory" value="spring"/>
<!-- /crm/emp/add.action -->
<package name="crm_employee" extends="struts-default" namespace="/emp">
<action name="add" class="addBean" method="add">
<result>add.action</result>
<result>/emp/add_suc.jsp</result>
</action>
<action name="list" class="listBean" method="list">
<result>/emp/list.jsp</result>
</action>
<action name="delete" class="deleteBean" method="delete">
<result>delete.action</result>
<result>/emp/delete_suc.jsp</result>
</action>
<action name="update" class="updateBean" method="update">
<result>update.action</result>
<result>/emp/edit_suc.jsp</result>
</action>
<action name="edit" class="editBean" method="edit">
<result>/emp/edit.jsp</result>
</action>
<!-- Add actions here -->
</package>
</struts>

web.xml源码:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 配置spring的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<!-- 开启监听 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 配置OpenSessionInViewFilter,必须在struts2监听之前 -->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<!-- 设置监听加载上下文 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

applicationContext.xml源码:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- 配置Hibernate支持 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<property name="url"
value="jdbc:mysql://localhost:3306/tables">
</property>
<property name="username" value="root"></property>
<property name="password" value="hicc"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/sy/crm/model/Employee.hbm.xml</value>
</list>
</property>
</bean>
<bean id="employeeDao"
class="com.sy.crm.dao.hibernate.EmployeeDaoHibernate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="employeeManager"
class="com.sy.crm.service.impl.EmployeeManagerImpl">
<property name="employeeDao">
<ref bean="employeeDao" />
</property>
</bean>

<bean id="addBean" class="com.sy.crm.action.EmployeeAction" scope="prototype">
<property name="employeeManager">
<ref bean="employeeManager" />
</property>
</bean>
<bean id="listBean" class="com.sy.crm.action.EmployeeAction" scope="prototype">
<property name="employeeManager">
<ref bean="employeeManager" />
</property>
</bean>
<bean id="deleteBean" class="com.sy.crm.action.EmployeeAction" scope="prototype">
<property name="employeeManager">
<ref bean="employeeManager" />
</property>
</bean>
<bean id="updateBean" class="com.sy.crm.action.EmployeeAction" scope="prototype">
<property name="employeeManager">
<ref bean="employeeManager" />
</property>
</bean>
<bean id="editBean" class="com.sy.crm.action.EmployeeAction" scope="prototype">
<property name="employeeManager">
<ref bean="employeeManager" />
</property>
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!-- 配置事务特性,配置add,delete,update开始的方法,事务传播特性为required -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 配置那些类的方法进行事务管理,当前com.sy.crm.service包中的子包,
类中所有方法需要,还需要参考tx:advice的设置 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(*
com.sy.crm.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
</aop:config>
</beans>

add.jsp源码:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>add page</title>
<script language="javascript" src="validation-framework.js"></script>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>
<body>
<center>
<h3>雇员注册:</h3><br>
<h4><a href="../emp/list.action">查看所有雇员</a></h4>
<div id="error" style="color:blue; font-weight:bold;"></div>
<s:form action="add" method="post" onsubmit="return doValidate(\'form\')" name="form" id="form">
<s:textfield name="employee.name" label="姓名" id="name"/>
<s:textfield name="employee.address" label="地址"/>
<s:textfield name="employee.phone" label="电话"/>
<s:submit value="员工注册"/>
</s:form>
</center>
</body>
</html>
list.jsp源码:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>list employee page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
table
border: 1px solid black;
border-collapse: collapse;


table thead tr th
border: 1px solid black;
padding: 3px;
background-color: #cccccc;


table tbody tr td
border: 1px solid black;
padding: 3px;

</style>
</head>

<body>
<center>
<h3>
雇员管理:
</h3>
<br>
<h4>
<a href="../emp/add.jsp">员工注册</a>
</h4>
<s:form action="delete" theme="simple">
<table>
<thead>
<tr>
<th>
选择
</th>
<th>
编号
</th>
<th>
姓名
</th>
<th>
电话
</th>
<th>
地址
</th>
<th>
操作
</th>
</tr>
</thead>
<tbody>
<s:iterator value="employees">
<tr>
<td>
<input type="checkbox" name="id"
value=\'<s:property value="id" />\' />
</td>
<td>
<s:property value="id" />
</td>
<td>
<s:property value="name" />
</td>
<td>
<s:property value="phone" />
</td>
<td>
<s:property value="address" />
</td>
<td>
<a
href=\'<s:url action="edit"><s:param name="id" value="id" /></s:url>\'>
修改 </a>  
<a
href=\'<s:url action="delete"><s:param name="id" value="id" /></s:url>\'>
删除 </a>
</td>
</tr>
</s:iterator>
</tbody>
</table>
<s:submit value="delete" />
</s:form>
</center>
</body>
</html>
参考技术A 来名将三国PK吧
http://cyq1864.wofq.the9.com/

<!-- 数据源的配置 -->
<bean id="ds" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>are_productinformix</value>
<!--<value>are_productmysql</value> -->
</property>
<!-- 如果你不想使用 'java:comp/env/'前缀的话请设置下面的值为true, 默认值为false -->
<property name="resourceRef">
<value>false</value>
</property>
<property name="jndiEnvironment">
<props> <!-- The value of Context.PROVIDER_URL -->
<prop key="java.naming.provider.url">t3://localhost:7004</prop>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory </prop>
</props>
</property>
</bean>

<bean id="sf" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds"/>
</property>
<property name="hibernateProperties">
<props>
<!-- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> -->
<prop key="hibernate.dialect">com.hicom.cyq.hibernate.dialect.MyInformixDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 解决weblogic抛出的ClassNotFoundException: org.hibernate.hql.ast.HqlToken异常 -->
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/hicom/cyq/entity/Productconfig.hbm.xml</value>
<value>com/hicom/cyq/entity/Replacedetail.hbm.xml</value>
<value>com/hicom/cyq/entity/Flow.hbm.xml</value>
<value>com/hicom/cyq/entity/Replacetask.hbm.xml</value>
<value>com/hicom/cyq/entity/Step.hbm.xml</value>
<value>com/hicom/cyq/entity/Sysconfig.hbm.xml</value>
<value>com/hicom/cyq/entity/System.hbm.xml</value>
<value>com/hicom/cyq/entity/SysUser.hbm.xml</value>
<value>com/hicom/cyq/entity/User.hbm.xml</value>
<value>com/hicom/cyq/entity/MySeq.hbm.xml</value>
</list>
</property>
</bean>
<!-- hibernateTransactionManager 事务管理器 -->
<bean id="hibernateTm" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sf"/>
</property>
</bean>
<!-- 一个抽象的基类,所有继承它的bean,都会插入它拥有的事务服务 -->
<bean id="baseTransaction1" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="hibernateTm"/>
</property>
<property name="proxyTargetClass" >
<value>true</value>
</property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>

</bean>
参考技术B 做个标记

SSH---Struts2Hibernate5Spring4集成开发

Struts2、Hibernate5、Spring4集成开发步骤:


一、导入Jar包(基本的大致有41个,根据实际项目的需求自己添加)

antlr-2.7.7.jar
aopalliance.jar
asm-5.1.jar
asm-commons-5.1.jar
asm-tree-5.1.jar
aspectjweaver-1.8.7.jar
c3p0-0.9.2.1.jar
classmate-1.3.0.jar
commons-fileupload-1.3.2.jar
commons-io-2.4.jar
commons-lang3-3.4.jar
commons-logging-1.2.jar
dom4j-1.6.1.jar
freemarker-2.3.23.jar
geronimo-jta_1.1_spec-1.1.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-core-5.1.8.Final.jar
hibernate-entitymanager-5.1.8.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
jandex-2.0.3.Final.jar
javaee.jar
javassist-3.20.0-GA.jar
jboss-logging-3.3.0.Final.jar
jstl-1.2.jar
log4j-1.2.17.jar
log4j-api-2.7.jar
mchange-commons-java-0.2.3.4.jar
mysql-connector-java-5.0.5-bin.jar
ognl-3.1.12.jar
spring-aop-4.3.9.RELEASE.jar
spring-aspects-4.3.9.RELEASE.jar
spring-beans-4.3.9.RELEASE.jar
spring-context-4.3.9.RELEASE.jar
spring-core-4.3.9.RELEASE.jar
spring-expression-4.3.9.RELEASE.jar
spring-jdbc-4.3.9.RELEASE.jar
spring-orm-4.3.9.RELEASE.jar
spring-tx-4.3.9.RELEASE.jar
spring-web-4.1.6.RELEASE.jar
struts2-core-2.5.10.1.jar
struts2-spring-plugin-2.5.10.1.jar
SSH主要jar包

 


二、配置Web.xml文件
    2.1、配置Struts2的过滤器StrutsPrepareAndExecuteFilter

1   <!-- 配置Struts2的过滤器 -->
2     <filter>
3         <filter-name>Struts2</filter-name>
4         <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
5     </filter>
6     <filter-mapping>
7         <filter-name>Struts2</filter-name>
8         <url-pattern>/*</url-pattern>
9     </filter-mapping>

    2.2、配置Spring监听器

1   <listener>
2         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
3     </listener>

    ContextLoaderListener的作用:
    ContextLoaderListener监听器的作用就是启动Web容器/启动服务器的时候(Tomcat)时,自动加载ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。至于ApplicationContext.xml这个配置文件部署在哪,如何配置多个xml文件,官方API文档中说明。
在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。
    2.2.1、ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。如果查看ContextLoaderServlet的API,可以看到它也关联了ContextLoader这个类而且它实现了HttpServlet这个接口。
    2.2.2、ContextLoader创建的是 XmlWebApplicationContext这样一个类,它实现的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->BeanFactory这样一来spring中的所有bean都由这个类来创建。
    2.2.3、如果在web.xml中不写任何参数配置信息,默认的路径是/WEB-INF/applicationContext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml;
        如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:

1   <context-param>  
2          <param-name>contextConfigLocation</param-name>  
3           <param-value>/WEB-INF/classes/applicationContext-*.xml   </param-value>
4   </context-param>  

        在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并一“,”号分隔。上面的applicationContext-*.xml采用通配符,比如这那个目录下有applicationContext-ibatis-base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml等文件,都会一同被载入。
所以:applicationContext.xml的文件位置就可以有两种默认实现:
        第一种:直接将之放到/WEB-INF下,之在web.xml中声明一个listener;
        第二种:将之放到classpath下,但是此时要在web.xml中加入<context-param>,用它来指明你的applicationContext.xml的位置以供web容器来加载。按照Struts2 整合spring的官方给出的档案,写成:

1    <context-param>  
2                 <param-name>contextConfigLocation</param-name>  
3                 <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
4         </context-param>

三、配置Spring的核心配置文件
    3.1、在src下新建applicationContext.xml文件,其中要配置的内容包括:
        3.1.1、配置数据源

1    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
2          <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
3          <property name="jdbcUrl" value="jdbc:mysql:///ssh"></property>
4          <property name="user" value="root"></property>
5          <property name="password" value="123"></property>
6    </bean>

        3.1.2、配置SessionFactory(本身是Hibernate里面的,这里我们是要让Spring给我们管理SessionFactory的创建)

 1   <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
 2                 <!-- 因为在hibernate核心配置文件中,没有了数据库配置,数据库配置在spring里面,注入dataSource -->
 3                 <property name="dataSource" ref="dataSource"></property>
 4                 <!-- 指定hiberante核心配置文件,有些内容我们是将信息配置在原来的Hibernate核心配置文件中,
 5           比如格式化SQL语句(hibernate.format_sql),
 6           显示SQL语句(hibernate.show_sql),
 7           Hibernate给我们创建及更新表的指令(hibernate.hbm2ddl.auto),
 8           Hibernate使用的方言(hibernate.dialect),
 9           还有映射文件<mapping class""/>-->
10                 <property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
11             </bean>

        3.1.3、原来我们在学习Hibernate的时候说过有个事务的概念,现在我们要把事务的管理交给Spring。
         

1   <!-- 第一步 配置事务管理器 -->
2 <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
3       <!-- 注入sessionFactory -->
4       <property name="sessionFactory" ref="sessionFactory"></property>
5 </bean>

        3.1.4、如果要采用注解的方式配置哪些方法要进行事务处理,那么就需要做以下事情:
            3.1.4.1、在Spring的核心配置文件中配置开启事务注解,写法:

 <tx:annotation-driven transaction-manager="transactionManager" /> 
            3.1.4.2、在业务层方法需要事务控制的方法上面添加一个注解,这个注解是@Transactional,但是需要注意的是并不是所有的方法都是需要进行事务处理的,比如说检索/查询操作。
        3.1.5、因为我们要对数据库做CRUD(Create/Select/Update/Delete)操作,我们继承了三大框架,而Hibernate就是用来做dao层,dao层就是为了操作数据库的,所以我们要用hibernate操作数据库的类,这个类叫做:HibernateTemplate,记住我们用的是Hibernate5的HibernateTemplate。
            还有需要注意的一点是:需要在这里里面配置sessionFactory,也就是说你要在hibernateTemplate里面注入sessionFactory。
            ------------>其实我们在使用hibernate操作数据库的时候,做的业务操作复杂度远远超出get/load这样的方法,所以我们在做查询这些操作的时候,我们用的并不是简单的hibernateTemplate方法,而是用的Hibernate给我们提供的三个接口里面的两个常用接口,这两个接口的名字是(Query和Criteria)

1 <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
2       <!-- 注入sessionFactory -->
3        <property name="sessionFactory" ref="sessionFactory"></property>
4 </bean>

        3.1.6、由于我们在集成开发的时候,用的都是注解,这些注解体现在以下方面:
            3.1.6.1、实体类(@Entity、@Id、@one-to-many、@many-to-many、@JoinTable、@JoinColumn等等),所以我们要在Spring的核心配置文件中打开注解扫描功能,写法如下:<context:component-scan base-package="com.chinasofti"></context:component-scan>
    备注:如果想要在Spring的核心配置文件中能够写什么标签,一定是需要在命名空间中添加相应的约束:如:
        xmlns:aop="http://www.springframework.org/schema/aop"-------------------->这一行代表的是命名空间
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd --------->这一行代表的是具体的约束(约束的意思就是说:spring配置文件中能够写什么标签,以及标签的上下级。)
                3.1.7、配置Action

1 <bean id="userAction" class="com.crm.user.action.UserAction" scope="prototype">
2      <!-- 注解实例化Action,并在Action中注入service -->
3 </bean>

四、在实际开发中,一定要将日志文件引入你的项目工程里面,绝大多数我们都使用Log4j的属性文件,一般都是叫做:log4j.properties,这里面的内容绝对不能去记忆。
    log4j.rootLogger=info, stdout----------->这里的info还有一个值是debug,切记在实际开发中如果你的环境是测试环境,那么建议你使用debug,如果在生产环境中必须使用info,如果生产环境使用debug的话,那么你的磁盘将会有很多日志文件,浪费空间。
五、实际开发中,我们一定要区分,dao层和service层,其中service层有的公司也称之为biz层,这个单词的由来是business。
六、我们在学习JavaWeb阶段的时候(中级节点),我们是手动去写日志处理类的(DiyException),也就是我们的异常类。但是在工作中,我们不再写这个异常类,而是使用log4j的属性文件log4j.properties,这里文件里面可以直接定义输入的文件名和具体的日常信息存放位置。
七、在实际开发中,我们觉大多数情况都使用springMVC框架,并不是我们现在学习的SSH框架,而是SSM框架。但是,有些比较老的项目他们使用的还是SSH。
八、在使用注解开发业务程序的时候,分为:
    8.1、dao:
    我们在dao层要使用hibernate的session,所以还得在这个dao里面注入sessionFactory,注入的方式也有两种,即@Autowired和@Resource。
    8.2、service/biz:
    需要知道的是:在service/biz中需要注入dao,具体的做法是:在service/biz中添加dao类的对象,写法例子如下:private IUserDao userDao;并且要使用注解进行对类实例化,可以使用自动注入:@Autowired,也可以使用准确注入方式:@Resource(name="dao接口或实现类的对象名")
    8.3、我们学过有四个相同功能的注解方式,分别为:
        8.3.1、@Repository------->用在DAO层/数据持久化层
        8.3.2、@Service--------->用在Service/biz/业务层
        8.3.3、@Controller-------->用在控制层
        8.3.4、@Component-------->如果无法确定具体的分类,那么就可以使用这个


=========================================================================================================================================================================================================================================
下面的这段话可能在比较高端的面试中会问到,建议大家看看:
StrutsPrepareAndExecuteFilter的作用
FilterDispatcher是早期struts2的过滤器,后期的都用StrutsPrepareAndExecuteFilter了,如 2.1.6、2.1.8。StrutsPrepareAndExecuteFilter名字已经很能说明问题了,prepare与execute,前者表示准备,可以说是指filter中的init方法,即配制的导入;后者表示进行过滤,指doFilter方法,即将request请求,转发给对应的 action去处理。
FilterDispatcher是struts2.0.x到2.1.2版本的核心过滤器!
StrutsPrepareAndExecuteFilter是自2.1.3开始就替代了FilterDispatcher的!
StrutsPrepareAndExecuteFilter过滤器中包含相应的功能。      
三个初始化参数:    
  1、config参数:指定要加载的配置文件。逗号分割。   
  2、actionPackages参数:指定Action类所在的包空间。逗号分割。    
  3、configProviders参数:自定义配置文件提供者,需要实现ConfigurationProvider接口类。逗号分割。
运行流程:
StrutsPrepareAndExecuteFilte 实现了Filter接口
服务器启动调用StrutsPrepareAndExecuteFilte .init()初始化来初始化几个重要的类,比如Dispatcher
当前台有请求发来,StrutsPrepareAndExecuteFilte 的doFilter()被调用
进行request等的封装,找到相应action,执行相应action

以上是关于struts2集成Spring,Hibernate的问题!!的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security - Struts2 集成

SSH集成(Struts+Spring+Hibernate)

ssh(struts,spring,hibernate)开发的初步集成01--依赖

(二十六)Struts2 Hibernate集成

spring 学习之三(spring 与hibernate, struts2整合)

Struts2 + Spring + Hibernate 分页