來公司都半年了,還沒搭建過框架,整天都是維護項目。。。
今天忙里偷閑,想自己搭建個ssh2框架試試,誰知碰到好多問題,特在這里和大家分享一下
一.由於我用的是 myeclipse 6.5,它不支持 struts2,所以要自己先導入官方struts-2.3.1.2核心包,創建struts2.xml、創建action、修改web.xml
首先,我先在struts2官方網站下載了一個struts-2.3.1.2的lib包,咋一看嚇一跳。。
... 我只是想搭建個ssh2環境,它卻給我這么多包,於是僅把核心包先復制到到項目的WebRoot\WEB-INF\lib 里
:所謂核心包 是之前版本的lib中的五個核心包(來自網上)
隨后,進行簡單的運行,出現如下錯誤:
1.com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn
Could not create JarEntryRevision for [jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps/zmy/WEB-INF/lib/struts2-core-2.3.1.2.jar]!
java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils
Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.FileUtils
2.Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils
3.Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.RequestContext
4.Caused by: java.lang.ClassNotFoundException: javassist.ClassPool
對於這個四個啟動錯誤,是由於少個jar包:
此時,添加完上面的四個包后,關於struts2就可以單獨運行了
二.在集成 hibernate和spring的時候應該先添加spring再添加hibernate,因為hibernate要用spring的spring.xml文件去配置hibernate的屬性。
咋一看,它們兩個的官方包堪比struts2.3.1.2的。。。
於是,我在網上找了一些資料:hibernate3.5的核心包和spring3.1的核心包的作用
Spring 3.1核心包說明
1. spring.jar 是包含有完整發布模塊的單個jar 包。
2. org.springframework.aop 包含在應用中使用Spring的AOP特性時所需的類。
3. org.springframework.asm Spring獨立的asm程序, Spring2.5.6的時候需要asmJar 包,
3.0開始提供他自己獨立的asmJar。
4. org.springframework.aspects 提供對AspectJ的支持,以便可以方便的將面向方面的功能集成進IDE中,比如Eclipse AJDT。
5. org.springframework.beans所有應用都要用到的,它包含訪問配置文件、創建和管理bean以及進行Inversion of Control / Dependency Injection(IoC/DI)操作相關的所有類。
6. org.springframework.context.support包含支持緩存Cache(ehcache)、JCA、JMX、郵件服務(Java Mail、COS Mail)、任務計划Scheduling(Timer、Quartz)方面的類。
7. org.springframework.context為Spring核心提供了大量擴展。可以找到使用Spring ApplicationContext特性時所需的全部類,JDNI所需的全部類,UI方面的用來與模板(Templating)引擎如 Velocity、FreeMarker、JasperReports集成的類,以及校驗 Validation方面的相關類。
8. org.springframework.core 包含Spring框架基本的核心工具類,Spring其它組件要都要使用到這個包里的類,是其它組件的基本核心。
9. org.springframework.expression Spring表達式語言。
10. org.springframework.instrument.tomcat Spring3.0對Tomcat的連接池的集成。
11. org.springframework.instrument Spring3.0對服務器的代理接口。
12. org.springframework.jdbc 包含對Spring對JDBC數據訪問進行封裝的所有類。
13. org.springframework.jms 提供了對JMS 1.0.2/1.1的支持類。
14. org.springframework.orm 包含Spring對DAO特性集進行了擴展,使其支持 iBATIS、JDO、OJB、TopLink,因為Hibernate已經獨立成包了,現在不包含在這個包里了。這個jar文件里大部分的類都要依賴spring-dao.jar里的類,用這個包時你需要同時包含spring-dao.jar包。
15. org.springframework.oxm Spring 對Object/XMl的映射支持,可以讓Java與XML之間來回切換。
16. org.springframework.test 對Junit等測試框架的簡單封裝。
17. org.springframework.transaction為JDBC、Hibernate、JDO、JPA等提供的一致的聲明式和編程式事務管理。
18. org.springframework.web.portlet SpringMVC的增強。
19. org.springframework.web.servlet 對J2EE6.0 的Servlet3.0的支持。
20. org.springframework.web.struts Struts框架支持,可以更方便更容易的集成Struts框架。
21. org.springframework.web 包含Web應用開發時,用到Spring框架時所需的核心類,包括自動載入 WebApplicationContext特性的類、Struts與JSF集成類、文件上傳的支持類、Filter類和大量工具輔助類。
hibernate 3.5 核心包說明
包 作用 說明
jta.jar JTA規范,當Hibernate使用JTA的時候需要,不過App Server都會帶上,所以也是多余的。 必要
commons-logging.jar
Apache Commons包中的一個,包含了日志功能,必須使用的jar包。這個包本身包含了一個Simple Logger,但是功能很弱。在運行的時候它會先在CLASSPATH找log4j,如果有,就使用log4j,如果沒有,就找JDK1.4帶的java.util.logging,如果也找不到就用Simple Logger。commons-logging.jar的出現是一個歷史的的遺留的遺憾,當初Apache極力游說Sun把log4j加入JDK1.4,然而JDK1.4項目小組已經接近發布JDK1.4產品的時間了,因此拒絕了Apache的要求,使用自己的java.util.logging,這個包的功能比log4j差的很遠,性能也一般。 必要
commons-collections.jar
Apache Commons包中的一個,包含了一些Apache開發的集合類,功能比java.util.*強大。 必要
antlr.jar
語法生成工具詳見點擊
必要
dom4j.jar
dom4j是一個Java的XML API,類似於jdom,用來讀寫XML文件的。dom4j是一個非常非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一個開放源代碼的軟件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,對主流的Java XML API進行的性能、功能和易用性的評測,dom4j無論在那個方面都是非常出色的。我早在將近兩年之前就開始使用dom4j,直到現在。如今你可以看到越來越多的Java軟件都在使用dom4j來讀寫XML,特別值得一提的是連Sun的JAXM也在用dom4j。這是必須使用的jar包,Hibernate用它來讀寫配置文件。 必要
Hibernate3.jar 核心庫 必要
asm.jar ASM字節碼庫 如果使用“cglib”則必要
asm-attrs.jar ASM字節碼庫 如果使用“cglib”則必要
ehcache.jar EHCache緩存 如果沒有其它的緩存,則它是必要的
cglib.jar
CGLIB庫,Hibernate用它來實現PO字節碼的動態生成,非常核心的庫 如果使用“cglib”則必要
以下包可選
versioncheck.jar 版本檢查
swarmcache.jar
jboss-cache.jar TreeCache
jgroups.jar
xml-apis.jar JAXP API
c3p0-0.9.1.jar C3PO是一個數據庫連接池,Hibernate可以配置為使用C3PO連接池。如果你准備用這個連接池,就需要這個jar包。
connector.jar JCA API
jboss-system.jar 使用TreeCache時必要
jacc-1_0-fr.jar JACC 庫
checkstyle-all.jar
junit.jar
javassist.jar Javassist 字節碼解釋器
ant-lanuncher.jar
jaas.jar JAAS API
jdbc2_0-stdext.jar JDBC擴展API
ant-antlr.jar Ant antlr支持
jboss-jmx.jar
cleanimports.jar cleanimports
xerces.jar SAX parser JDK版本低於1.4時必要
jaxen-1.1-beta-7.jar Jaxen 如果想提高啟動性能則去使用
ant-junit.jar Ant junit support
ant-swing.jar ant swing support
ant.jar Ant編譯工具的jar包,用來編譯Hibernate源代碼的。如果你不准備修改和編譯Hibernate源代碼,那么就沒有什么用,可選的jar包
proxool.jar Proxool JDBC連接池
concurrent.jar 使用TreeCache需要
syndiag2.jar
我僅僅把核心包導入到了項目中:
這期間也出現了一些錯誤:
1.java.lang.NoClassDefFoundError: org/springframework/expression/PropertyAccessor
2.java.lang.NoClassDefFoundError: org/springframework/asm/ClassVisitor
主要就是 少包,找不到類文件
在初級搭建完成后,又出現
3.Invalid property 'driverClassName' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]: Bean property 'driverClassName' is not writable or has an invalid setter method. 原因是 property的名字不對,因為之前的配置是 普通的配置,現在改為了 c3po數據庫連接池,部分屬性名更換導致。
4.通過設置的數據源進行反射生成 實體類、配置文件,出現問題.(網上的解決辦法說是 數據庫驅動的問題,更換就可以了)
我自己試了一下,更換驅動、重啟IDE、修改
<property name="driverClass"
value="oracle.jdbc.driver.OracleDriver">
</property>