qqjianyue代碼工

          砌java代碼
          posts - 62, comments - 9, trackbacks - 0, articles - 10
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          適合入門級看,但其中的錯誤解決適合大家參考。
          在此使用MyEclipse6.0作為編程環境,真正領悟ssh后,就會知道MyEclipse添加spring與hibernate支持的用意只是讓MyEclipse自動添加spring與hibernate的包,還有產生一些配置文件代碼,在此為節省時間,使用MyEclipse來添加,但是其實自己添加也行。

          要填的東西將會指出,其他都是默認

          前提:

          數據庫建庫
          使用上面SQL語句在MySQL中建立表格,最好使用SQL yog Enterprise工具
          安裝MySQL與SQL yogEnterprise請自己掌握。

          1.創建工程:


          file-->web project(習慣使用,貌似dynamic web project也行)
           project name:ssh
          J2EE Specification Level選擇Java EE5.0(使用新一點的吧)

          finish->
          菜單Wiindows-->Open Perspective-->MyEclipse Java Enterprise 視圖

          2.添加Spring支持:


          工程名上右鍵-->MyEclipse-->Add Spring Capabilities
          a).在框內選上:
          Spring2.0 AOP Libraries(對于面向切面有用,后面會用到配置面向切面的)
          Spring2.0 Core Libraries(Spring核心庫)
          Spring2.0 Persistence Core Libraries(持久層庫,要Spring與Hibernate集成,當然就添加啦)
          Spring2.0 J2EE Library
          Spring2.0 Web Libraries
          暫時就只添加這5個
          Copy checked Library contents to project folder 選上,這樣就可以將庫添加到工程內,否則這個工程編譯的時候會引用本機的文件系統內的庫,工程轉移到其它機器就需要重新將每個包改對路徑,當然如果只需要本機開發的就不用copy啦。
          next->
          b).new applicationContext.xml 將路徑改為在WebRoot/WEB-INF下面,其實放在src下也行,但是工程編譯的時候將src下的東西編譯到WebRoot/WEB-INF下的classes目錄下,配置applicationContext路徑的時候就相應修改就行。
          finish->

          3.建立數據庫連接


          菜單Wiindows-->Open Perspective-->MyEclipse Database Explorer
          DB Browser中右鍵-->new,新建一個數據庫連接,打開一個對話框
          Driver template 選擇MySQL connector/J(可以不選,選著只是為了下面顯示出連接字符串的模板,讓不熟悉的人可以照這模式來填)
          Driver name:任意,用于標識這個連接,對我們工程沒有任何關系的。
          Connection URL:jdbc:mysql://localhost:3306/ssh (意思是本地地址IP的數據庫ssh,如果是遠程數據庫,請寫遠程地址,當然要確保遠程地址是可達的,例如防火墻阻隔等)
          User name:你的數據庫登錄名
          password:登錄名密碼
          Add Jars-->打開對話框尋找本地文件系統的MySQL連接驅動包,(提供下載/Files/jianyue/mysqlConnector.rar,解壓取里面那個jar)
          save password 打上鉤,方便點
          可以test 測試一下是否能夠連接

          這步驟的實際意義是在MyEclipse IDE工具上建立一個數據庫連接,來管理,對于我們工程其實沒有一點影響的,只是這個連接,以后引用或者管理的時候就較方便。
          finish-->

          4.添加Hibernate支持


          切換回原來的視圖,其實有多種切換視圖的方法,快捷鍵等,自己學吧。
          a).工程名上右鍵-->MyEclipse-->add Hibernate Capabilities
          同樣Copy checked Library Jars to project folder and add to build-path

          next-->
          b).選擇Spring configuration file
          next->
          c).因為原來已經有一個spring配置文件,所以就選擇Existing Spring configuration file
          sessionFactory ID:sessionFactory(可以自定義名稱,使用慣例的吧,隨便啦)
          next-->
          d).DB Driver  選擇在MyEclipse DB Explorer中建立的數據庫連接名稱(這里就體現到同一個IDE工具的好處,方便地引用那個連接的配置)
          Bean ID:dataSource(又是慣例的名稱)
          next-->
          取消掉create SessionFactory class
          finish-->

          5.添加Struts2.0支持


          由于MyEclipse沒有集成Struts2.0的包,所以自己添加Struts的五個包


          由于空間有限,可以上網搜索一個叫struts2-blank的工程包,war文件也可以,可以用rar打開,取其里面lib下的這五個包
          struts暫且只添加這5個包,多包反而會導致沖突(后面有說),至于struts想集成meshsite等的話,就另外加包吧。

          順便將原來的那個mysqlConnector的jar包也拿來吧,一起拖到WEB-INF/lib目錄下,可以直接拖到IDE工具上的工程瀏覽框(即Package視圖)的lib圖標上,MyEclipse支持拖放功能。
          還有commons-pool-1.4.jar和commons-dbcp-1.2.2.jar和struts2-spring-plugin-2.0.6.jar也是必須自己加進lib中的
          如果有包重復的話,覆蓋就行。

          6.配置文件web.xml詳解


          web.xml

          struts的過濾器配置是有順序的:
          按照Struts2的API,filter的順序是
          struts-cleanup filter
          SiteMesh filter
          FilterDispatcher
          如果需要配置字符轉換過濾器的話,那就安排在FilterDispatcher之前

          spring配置文件可以多個,從/WEB-INF/applicationContext*.xml的通配符就可以看出來了

          7.struts.xml詳解


          在src下建立一個struts.xml的文件:
          struts.xml


          8.applicationContext.xml詳解


          applicationContext.xml

          applicationContextUser.xml

          9.構造pojo與dao


          先建好包結構如下:

          a).切換到MyEclipse DB Explorer視圖->雙擊你建的那個連接來打開數據庫連接->Table下user表右鍵->Hibernate Reverse Engineering->

          ->finish:這樣會產生三個文件,數據庫user映射的pojo實體類對象User.java,數據庫訪問對象UserDAO.java,數據庫映射文件User.hbm.xml
          將User.java 與 hbm文件移到pojo包下
          上面搞錯了點,將UserDAO移到dao.hibernate包下吧
          這里的東西涉及到applicationContext.xml的改變,沒有關系,前面已經詳盡講解了各xml文件的意義。
          UserDAO已經自動生成很多數據庫訪問函數,從字面上可以看出是什么意思,大部分函數是不一定用到的,自己想使用的方法寫在下面說的接口上,再實現他吧。
          我們為其寫個UserDAO接口,在dao包下編寫一個IUserDAO.java的接口,并且使UserDAO實現這個接口

          10.編寫服務


          參照代碼吧!

          11.編寫action




          12.編寫頁面


          final我遇到的異常
          appllicationConotext.xml中的org.apache.commons.dbcp.BasicDataSource not found錯誤,可能是沒有添加commons-pool.jar和commons-dbcp.jar和commons-collections.jar

          Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: entity class not found: ssh.dao.User
          因為自己在移動產生的User.java類的時候,忘記修改User.hbm.xml文件的映射實體類,需要改成
           <class name="ssh.pojo.User" table="user" catalog="ssh">

          Action class [loginAction] not found - action - file:/D:/workspace2/.metadata/.plugins/com.genuitec.eclipse.easie.tomcat.myeclipse/tomcat/webapps/ssh/WEB-INF/classes/struts.xml
          因為login action的class我指定為loginAction,所以在spring中的login Bean的id="loginAction"來對應,但是我卻寫成了login,所以找不到。

          org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: model near line 1, column 56 [from ssh.pojo.User as model where model.name= adminand model.password= admin]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: model near line 1, column 56 [from ssh.pojo.User as model where model.name= adminand model.password= admin]
          可以從from字符串中看出,我忘記寫空格了。

          javax.servlet.ServletException: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [null]; error code [0]; Cannot create PoolableConnectionFactory (Unknown database 'ssh1'); nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Unknown database 'ssh1')
          因為spring中的dataSource的  <property name="url" value="jdbc:mysql://localhost:3306/ssh"></property>,我原來指定了ssh1的數據庫,我并沒有創建這個數據,所以改回ssh

          javax.servlet.ServletException: org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
          這個是因為我忘記把sql字符串中的值用''括起來,例如:
          from ssh.pojo.User as model where model.name = admin and model.password = admin
          應該要變成:
          from ssh.pojo.User as model where model.name = 'admin' and model.password = 'admin'
          自己改UserDAO中的字符串吧。

          No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath:....
          如果有這個問題的話,那就參看:http://www.aygfsteel.com/jianyue/archive/2008/08/28/225415.html

          java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
          java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
          java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit
          CGLIB Enhancement failed
          主要是hibernate與spring包沖突問題,可能有多種情況,都參照一下吧,但是最關鍵的原則是一個同樣功能的包,
          不要將多個版本都放進來。根據這個原則,自己也能夠知道應該刪去什么包。
          解決方案:參看:http://www.aygfsteel.com/jianyue/archive/2008/08/28/225246.html

          No configuration found for the specified action:  in namespace:
          那么一定是action配置得不對,不是包的問題,自己詳細參照一下我的那份action配置說明。


          代碼工程/Files/jianyue/ssh.rar

          由于空間有限,去掉了包。包的列表如下:


          使用QQ中轉站的工程資料:http://xianexs.mail.qq.com/cgi-bin/downloadfilepart/svrid264/ssh.rar?svrid=264&fid=43c7ea2ec48f0ab1df6cf19be93fd207f24f786949adb4ba&&txf_fid=64f2ea7b5eab7021495c997ac5512b1e1556cd97&&txf_sid=aaf1d1ab2dd1c1b7301c3909f4df304167a7e99e有時間限制,盡快下。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 吉安县| 玛多县| 赫章县| 晋州市| 庆城县| 漳州市| 常宁市| 南宫市| 鹤壁市| 马尔康县| 曲沃县| 通辽市| 香港 | 汉阴县| 南川市| 镇巴县| 红原县| 秭归县| 手机| 青河县| 冷水江市| 临澧县| 东平县| 二手房| 枝江市| 崇明县| 边坝县| 宜春市| 芒康县| 丹东市| 安康市| 抚顺市| 桑日县| 漾濞| 武平县| 通城县| 墨竹工卡县| 安平县| 大悟县| 新余市| 洛阳市|