整合ssh專案時所遇到的問題總結
1.異常:/hibernate.cfg.xml not found
使用spring整合hibernate之後,sessionFactory由spring管理,所以再用hibernate的Configuration conf = new Configuration().configure();就會找不到配置檔案,這時候必須用spring的sessionFactory或者使用spring提供的hibernateTemplate,用sessionFactory不能管理事務,用hibernateTemplate能管理事務。
2.hibernate.dialect' must be set when no Connection available錯誤
- cfg=new AnnotationConfiguration();
- sf=cfg.buildSessionFactory();
在這裡沒有寫
Java程式碼
- cfg=new AnnotationConfiguration().configure();
缺少的是configure();
新增這句話之後程式OK.
new Configuration()預設是讀取hibernate.properties
所以使用new Configuration().configure()來讀取hibernate.cfg.xml檔案
3.java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL,spring獲取context
今天學習spring專案的時候出現了下面的錯誤資訊:
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:532)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:514)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4854)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
雖然問題一眼就知道是這句話:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
但是還是有點迷糊,因為以前練習spring的時候,是把jar包都複製到WEB-INF/Lib目錄下的,但是最近練習專案的時候都是自己建立自己不同的User libaraies,很明顯我已經匯入了這些jar包,但是卻提示這樣的資訊..............
看來自己對於JVM是如何引入我們所需要的第三方jar包的機制,後來去網上仔細搜了以下,才明白其原理,下面不廢話,直接重點:
|
原來是我們自使用類似於Ant來獲取類的時候是不能象UserLibaray來使用的,因為我們建立的是一個web app,而web app使用的是自定義的ClassLoader,而非JVM中的存在的三種ClassLoader(如上面所說),因此它無法識別出我們寫在xml檔案中的第三方類庫的class檔案,而只有我們寫在src目錄下的java檔案才能使用,因此,我們必須要把第三方的類庫放入到lib目錄下,web app 才會識別我們定義在xml中的類了 .
通這個錯誤,也讓我對classloader的認識也進了一步.雖然以前看過周志明的深入JVM一書中關於類載入器分派體系的介紹,但是不太理解,這樣一來,自己也多了一些體會.
4.jquery和struts的結合
1.在 $("#myform").validate({}); 其中#myform這裡指的是id為myform的表單
2.rules: {title: {}} 其中的title指的是name為title的input等表單的相關項
3.當input中name使用sort.name這樣的命名方式時, 則rules: {"sort.title": {}} 要加上又引號