最近帮助一个哥们写一个毕业设计,要求用到上述三个框架,没办法,只能自己研究一番,谁知不弄不知道,一旦弄起来还真遇到了一个很棘手的问题,特记下来,帮助其他哥们少走弯路。
开发工具:MyEclipse Enterprise Workbench Version: 8.5M1 Build id: 8.5M1-20091216 + Oracle。
下面是详细步骤:
1、新建一个web工程,相信大家都会,没有什么可说的,也很简单。
2、为该工程添加struts capabilities,很简单,不再赘述。
3、为该工程添加spring capabilities,我选择2.0版本,勾选相应的库:aop、core 、persistence core、jdbc、web。(勾选copy到工程目录)
4、为该工程添加hibernate capabilities ,我选择最新的3.2版本,勾选core库即可。(勾选copy到工程目录),下面的工作选择让spring来管理即可,sessionFactory类不用生成,spring会在初始化时自动生成的。
5 、上述工作完成后,会自动打开applicationContext.xml 文件,我们发现里面已经为我们配置好了关于hibernate的一些东西,我的代码是下面的这个样子:
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl">
</property>
<property name="username" value="report"></property>
<property name="password" value="neusoft"></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.Oracle9Dialect
</prop>
</props>
</property>
</bean>
</beans>
<?xml version=" 1.0" encoding=" UTF-8"?>
<!DOCTYPE struts-config PUBLIC " -//Apache Software Foundation//DTD Struts Configuration 1.2//EN" " http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans />
<global-exceptions />
<global-forwards />
<action-mappings>
<action path=" /welcome" type=" com.huangyz.struts.action.WelcomeYou" ></action>
</action-mappings>
<message-resources parameter=" com.huangyz.struts.ApplicationResources" />
<plug-in className= " org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property= " contextConfigLocation" value=" /WEB-INF/applicationContext.xml"/>
</plug-in>
</struts-config>
7、工作进展到此,如果我们新建一个jsp页面,里面新建一个form,然后将请求转给welcome,不会有任何问题。
8、下面利用MyEclipse生成数据库表的映射文件,我们把映射文件添加到applicationContext.xml中,此时完整的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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl">
</property>
<property name="username" value="report"></property>
<property name="password" value="neusoft"></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.Oracle9Dialect
</prop>
</props>
</property>
<property name="mappingLocations">
<list>
<value>classpath:com/models/Ac01.hbm.xml</value>
</list>
</property>
</bean>
<bean name="welcome" class="com.huangyz.applogic.impl.Welcome">
<property name="ac01Dao">
<ref bean="Ac01DAO"></ref>
</property>
</bean>
<bean id="Ac01DAO" class="com.huangyz.dao.impl.Ac01DAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>
9、如果这时我们在访问,就会报出servlet action is not available的异常,控制台上什么都没有输入,前台也什么都没有,这下子怎么办呢?折腾了一天问题才解决,在这里我要感谢log4j,它输出了最关键的信息,帮我找到了问题的根源。我先把log4j.properties 文件放在src目录下,内容大致如下,更细节的东西,可google,只要有了该文件,放到src目录下,它会打印出任何你想要的东西。
log4j.rootLogger=info,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
10、通过查看log4j的输出我找到了问题的根源,原来是jar包冲突的原因导致,删除asm-2.2.3jar包即可。至此一切问题都解决,我可以在这个框架下进行更深入的开发了。
11、通过此次框架的搭建我才发现工具固然在一定程度上减少了我们开发的工作量,但是不能盲目的一味相信工具,就想这个,工具自动加入的jar包是存在冲突的,但是它不会解决冲突,还得人工干预。
12、这个工程源码已上传到csdn上:http://download.csdn.net/source/2998661 。问题的解决,得益于网络上很多文档,一并表示感谢!给出我的测试表的建表语句,如果要用的,修改applicationContext.xml中关于数据库连接的一些配置即可。
create table AC01 ( AAC001 VARCHAR2(20), AAC002 NUMBER, AAE036 DATE )