1关于搭建3框架问题,MyEclipse版本用5.5或6.0.1版本的容易成功,具体原因是包冲突。注意搭建时3框架加入的次序。一种是自底向上,顺序为hibernate->spring->struts。一种是自顶向下,顺序是Struts->Spring->Hibernate。当然熟练到一定程度,可以不按这两种方式了。选择Spring框架和Hibernate框架时注意选择copy library选项,具体原因是包冲突时,删除相对容易些。
2选择Spring框架时加入AOP Libraries,Core Libraries,Persistence Core Libraries,以及Web Libraries类包就行了;选择Hibernate框架时,加入Hibernate __Core Libraries-<MyEclipse-Library>类包就可以了。如果报错的话一般是缺少类包,只要在网上下载最新版本的类包既可以了。
3整合SS时Spring的加载有两种方式:一种是在Struts-config.xml中实现,在</struts-config>之前加入<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in>
注意将<action中的type属性改为type="org.springframework.web.struts.DelegatingActionProxy";另一种方式:在web.xml中实现,加载如下,
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!--通过servlet加载-->
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
</servlet>
<!--通过listener加载,两种方法选一即可以
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>-->
同样注意将Struts-config.xml的“<action”中的type属性改为type="org.springframework.web.struts.DelegatingActionProxy"。方式二可以加入多个Spring配置文件,本文中applicationContext.xml文件路径"/WEB-INF/applicationContext.xml"
4用Hibenate生成逆向工程时,使<generator class="increment" />,可以减少好多不必要麻烦
5Spring整合Hibernate要用到事务提交机制,否则的话数据不能保存到数据库中,之所以MySQL可以保存,是因为MySQL本身的bug问题。具体操作如下:在applicationContext.xml中,加入下列代码,
<!-- 声明一个 Hibernate 3 的 事务管理器供代理类自动管理事务用 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<bean id="UsersDAOProxy"<!--此处bean id可以自己取-->
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 注意这个属性, 详细意义请参考文章开头的参考资料, 必须为 true 使用CGLIB才不用强制编写DAO接口 -->
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="transactionManager">
<ref bean="transactionManager" /><!--注意保持一致-->
</property>
<property name="target">
<ref local="UsersDAO" /><!--注意此处local指的是本文件中可以操作entity的DAO,或自己写,或Hibernate自动生成-->
</property>
<property name="transactionAttributes">
<props>
<!-- 这里的方法签名可以精确到方法, 先懒惰一下全配置上 -->
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
此处还要注意的一件事是,以前有DAO做的配置,全部要改成有DAO代理来配置。
6整合完毕后,一般报asm的错误,原因是Referenced Libraries中,asm.jar和asm-2.2.3.jar冲突,删掉asm-2.2.3.jar即可。
7log4j.properties文件,在工程名上点击右键new一个file命名为log4j.properties,确定后。打开在里边写入:
# Configure logging for testing: optionally with log file
log4j.rootLogger=WARN, stdout
# log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
后保存,重新发布工程,重启Tomcat,可以在console中看到出错信息,用于查找错误
8在spring中如何配置的log4j?
在web.xml中加入以下代码即可。
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>