京山游俠

          專注技術(shù),拒絕扯淡
          posts - 50, comments - 868, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          SpringSide默認(rèn)的數(shù)據(jù)庫是hsql,但是大部分開發(fā)人員熟悉的數(shù)據(jù)庫是MySql,因此在實際開發(fā)過程中,遇到的第一件事往往是修改數(shù)據(jù)庫。在SpringSide中修改數(shù)據(jù)庫很簡單,還是以前一篇中創(chuàng)建的xkland項目為例,首先修改src\main\resources\config文件夾下的jdbc.properties文件,注釋掉1、2行,解注釋7、8行,并修改10、11行的用戶名和密碼,如下:
          ?1#jdbc.driverClassName=org.hsqldb.jdbcDriver
          ?2#jdbc.url=jdbc:hsqldb:res:/hsqldb/helloworld
          ?3
          ?4#jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
          ?5#jdbc.url=jdbc:oracle:thin:@localhost:helloworld?
          ?6
          ?7jdbc.driverClassName=com.mysql.jdbc.Driver
          ?8jdbc.url=jdbc:mysql://localhost:3306/xkland?useUnicode=true&characterEncoding=utf8
          ?9
          10jdbc.username=xkland
          11jdbc.password=xkland

          其次是修改src\main\resources\config文件夾下的hibernate.properties文件,注釋掉第一行,解注釋第二行,如下:
          1#hibernate.dialect=org.hibernate.dialect.HSQLDialect
          2hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
          3#hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
          4hibernate.show_sql=false
          5hibernate.cache.use_query_cache=true
          6hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider

          這個過程是簡單的,但是還有一件很重要的事情需要注意,那就是一定要記得把MySQL提供的JDBC驅(qū)動mysql.jar拷貝到src\main\webapp\WEB-INF\lib文件夾下,否則,會遇到如下錯誤:
          14.JPG

          SpringSide非常注重對i18n的支持,因此創(chuàng)建國際化的應(yīng)用程序非常方便,只需要在src\mian\resources\i18n文件夾下加入相應(yīng)的資源文件即可。SpringSide默認(rèn)使用UTF-8編碼,這從web.xml中注冊的encodingFilter就可以看出來,當(dāng)然也可以選擇自己喜歡的字符編碼,比如GB2312。如果要修改字符編碼,一定要記住有四個地方要保持一致:
          1、web.xml中的encodingFilter配置,如下:
          <filter>?
          ??????
          <filter-name>encodingFilter</filter-name>??
          ????????
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>??
          ????????
          <init-param>?
          ????????????
          <param-name>encoding</param-name>??
          ????????????
          <param-value>UTF-8</param-value>?
          ????????
          </init-param>?
          </filter>??

          2、數(shù)據(jù)庫中的默認(rèn)字符集,需要在創(chuàng)建數(shù)據(jù)表的時候指定,如下:
          CREATE?TABLE?`user`?(
          ??`id`?
          int(11)?NOT?NULL?auto_increment,
          ??`username`?
          varchar(20),
          ??`password`?
          char(32),?
          ??
          PRIMARY?KEY??(`id`)
          )?ENGINE
          =InnoDB?DEFAULT?CHARSET=utf8

          3、JDBC的連接設(shè)置,在src\main\resources\config\jdbc.properties中,如下:
          jdbc.url=jdbc:mysql://localhost:3306/xkland?useUnicode=true&characterEncoding=utf8

          4、JSP頁面中的頁面編碼,如下:
          <%@?page?contentType="text/html;?charset=utf-8"?%>

          <meta?http-equiv="Content-Type"?content="text/html;?charset=utf-8"?/>

          只要將這四個地方設(shè)置為一致,JSP頁面顯示出來就應(yīng)該不會是亂碼。歸根結(jié)底,是SpringSide在web.xml中注冊的encodingFilter幫了大忙。但是,當(dāng)需要從Struts的resource bundle中讀取message的時候,就不是那么方便了,因為需要創(chuàng)建如下的messages_zh_CN.properties文件:
          #?--?direct?output?message?--
          message
          ={0}

          #?--?crud?message
          entity.saved
          =\u6210\u529f\u4fdd\u5b58\u3002
          entity.missing
          =\u627e\u4e0d\u5230\u6b64ID\u7684\u5bf9\u8c61\u3002
          entity.deleted
          =\u6210\u529f\u5220\u9664\u3002

          #?--?validator?errors?--
          errors.required
          ={0}?\u4e3a\u5fc5\u586b\u9879\u3002
          errors.maxlength
          ={0}?\u4e0d\u80fd\u5927\u4e8e?{1}?\u4e2a\u5b57\u7b26\u3002
          errors.minlength
          ={0}?\u4e0d\u80fd\u5c11\u4e8e?{1}?\u4e2a\u5b57\u7b26\u3002
          errors.invalid
          ={0}?\u65e0\u6548\u3002

          errors.byte
          ={0}?\u5fc5\u987b\u4e3abyte\u7c7b\u578b\u3002
          errors.double
          ={0}?\u5fc5\u987b\u4e3adouble\u7c7b\u578b\u3002
          errors.float
          ={0}?\u5fc5\u987b\u4e3afloat\u7c7b\u578b\u3002
          errors.integer
          ={0}?\u5fc5\u987b\u4e3a\u4e00\u6570\u503c\u3002
          errors.long
          ={0}?\u5fc5\u987b\u4e3along\u7c7b\u578b\u3002
          errors.short
          ={0}?\u5fc5\u987b\u4e3ashort\u7c7b\u578b\u3002

          errors.date
          ={0}?\u4e0d\u662f\u6709\u6548\u65e5\u671f\u683c\u5f0f\u3002
          errors.range
          ={0}?\u672a\u5728?{1}?\u4e0e?{2}?\u8303\u56f4\u5185\u3002
          errors.creditcard
          ={0}?\u4e3a\u65e0\u6548\u4fe1\u7528\u5361\u53f7\u3002
          errors.email
          ={0}?\u4e3a\u65e0\u6548\u90ae\u4ef6\u5730\u5740\u3002
          errors.phone
          ={0}?\u4e3a\u65e0\u6548\u7535\u8bdd\u53f7\u7801\u3002
          errors.zip
          ={0}?\u4e3a\u65e0\u6548\u90ae\u653f\u7f16\u7801\u3002

          hello
          =\u4f60\u597d\uff0cSpringSide!

          這種文件沒有可讀性,當(dāng)然就更加不好編輯了,要生成這樣的文件,需要使用J2SDK提供的命令行工具native2ascii.exe,為了加速開發(fā)和調(diào)試,可以編寫一個批處理文件make_resource.bat,如下:
          native2ascii?-encoding?utf-8?src\main\resources\i18n\temp.txt?src\main\resources\i18n\messages_zh_CN.properties


          然后,將該批處理文件注冊為Eclipse的外部工具,如下圖:
          15.JPG

          以后,需要修改messages的時候,先在temp.txt中修改,然后運行該外部工具即可。快捷而方便。

          沒有人能夠一氣呵成寫完一個項目然后再運行,所有的程序員都需要一邊修改代碼,一邊運行程序以觀察修改的效果,如此反復(fù)進(jìn)行。但是SpringSide提供的quickstart.bat存在很多問題,造成了程序員不能夠快速部署程序,原因有二,一是quickstart.bat每次運行的時候都需要重新構(gòu)建項目,更新組件庫,然后啟動Tomcat服務(wù)器,太慢了;二是運行quickstart.bat后,就算關(guān)閉控制臺窗口,Tomcat服務(wù)器依然會在后臺運行,以至于下次運行quickstart.bat會出錯,提示不能清理文件。

          要解決這兩個問題也不難,可以將springside根目錄下的misc\servers\tomcat-5.5.17\bin目錄下的startup.bat和shutdown.bat注冊為Eclispe的外部工具,以達(dá)到快速啟動和快速關(guān)閉Tomcat服務(wù)器的目的,如下圖:
          16.JPG

          17.JPG

          此外,很多時候不需要重新啟動服務(wù)器,只需要把更改過的文件重新部署到服務(wù)器就可以了,在springside的根目錄目錄下面,misc\servers\tomcat-5.5.17\webapps文件夾中包含了所有的SpringSide項目。使用Windows自帶的命令行工具xcopy,可以將修改過的.class文件、配置文件、資源文件和.jsp文件部署到服務(wù)器中。創(chuàng)建一個批處理文件deploy.bat,如下:

          xcopy?src\main\webapp\*.jsp?E:\springside-2.0\misc\servers\tomcat-5.5.17\webapps\xkland?/d?/y
          xcopy?bin\*.*?E:\springside-
          2.0\misc\servers\tomcat-5.5.17\webapps\xkland\WEB-INF\classes?/s?/d?/y
          xcopy?src\main\resources\*.*?E:\springside-
          2.0\misc\servers\tomcat-5.5.17\webapps\xkland\WEB-INF\classes?/s?/d?/y
          xcopy?src\main\webapp\WEB-INF\*.xml?E:\springside-
          2.0\misc\servers\tomcat-5.5.17\webapps\xkland\WEB-INF?/d?/y


          其中/s選項為復(fù)制子目錄,/d選項為只復(fù)制更新過的文件,/y選項為不用詢問是否覆蓋。

          然后再將該deploy.bat注冊為Eclipse的外部工具。這里不截圖了,累贅。

          當(dāng)修改了Struts的配置文件和Action類之后,由于Struts只在Tomcat啟動時讀取一次配置文件并緩存起來,而Action對象也只在第一次使用的時候創(chuàng)建一個實例,因此必須重新啟動服務(wù)器才能看到效果,配合上面的deploy、stop_tomcat和start_tomcat外部工具使用,使得部署和調(diào)試SpringSide應(yīng)用程序更加快捷。


          評論

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2006-12-24 09:27 by laojang
          很好.有學(xué)到了不少,繼續(xù)

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2006-12-24 11:28 by errorfun
          要注意的是保存文件時的編碼也要調(diào)成一致的,要不也會亂碼。不過ECLIPSE好像有根據(jù)JSP頁面設(shè)置的ENCODING設(shè)置默認(rèn)編碼的智能,一定也就不會有問題了

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2006-12-24 16:24 by BeanSoft
          先說一下啊, 偶不熟悉 Eclipse 插件開發(fā), 不過關(guān)于你們這個 Tomcat 啟動的功能其實直接借鑒 Eclipse Tomcat 插件(Sysdeo): http://www.sysdeo.com/eclipse/tomcatplugin
          這個插件可以讓您無需離開 Eclipse 就可以進(jìn)行 Tomcat 的啟動, 停止, 發(fā)布, 重新載入 Web 應(yīng)用, 十分方便. 而且插件個頭也不大, 帶源碼. 我翻譯的中文版:
          截圖: http://gro.clinux.org/frs/download.php/1318/tomcatPlugin.gif
          下載: http://download.gro.clinux.org/beansoft/tomcatPluginV31.zip

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2006-12-24 16:38 by 海邊沫沫
          呵呵,在我沒有遇到SpringSide之前,我也是一直使用的這個插件。
          SpringSide自帶一個精簡版的Tomcat,而我的系統(tǒng)上另外還安裝有一個Tomcat,在使用SpringSide進(jìn)行開發(fā)的時候,我覺得我以上的幾個腳本更加能夠簡單的解決問題。

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2006-12-24 16:41 by BeanSoft
          不好意思,我還以為你是SpringSide的開發(fā)人員呢...

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2006-12-25 09:02 by 江南白衣
          謝謝游俠阿,游俠的文檔寫得比開發(fā)人員還詳細(xì)。

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2007-01-21 09:49 by hcom
          將ss自帶的tomcat注冊為eclipse外用的tomcat就可以了吧?不需要將tomcat啟動和關(guān)閉文件注冊為eclipse的外部工具了吧?

          我用的是eclipse+wtp

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2007-04-05 10:54 by 愛好者
          真沒有想到會有這么好的文章,這里先謝過了!我會支持下去的,我還是一個小小鳥,不知道什么時候會到達(dá)這樣程度,我得加油了。

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2007-07-05 21:21 by 周黎明
          我的項目里src\java\resources\config文件夾下好像沒有hibernate.properties文件呀!

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2007-07-16 21:03 by 海邊沫沫
          我使用的是2.0 M1版,如果你使用的是2.0rc1版,這些目錄結(jié)構(gòu)就不一樣的。具體問題具體分析。

          # re: SpringSide開發(fā)實戰(zhàn)(二):修改數(shù)據(jù)庫、字符編碼和快速部署應(yīng)用程序  回復(fù)  更多評論   

          2008-02-29 19:12 by kongzong
          messages_zh_CN.properties的編輯是不是可以用Properties Editor插件搞定?
          主站蜘蛛池模板: 察隅县| 水富县| 交城县| 平度市| 信丰县| 桐庐县| 许昌市| 理塘县| 左云县| 大连市| 陆川县| 昌吉市| 密山市| 东辽县| 邵武市| 绍兴市| 米泉市| 乐至县| 岳阳县| 南通市| 克拉玛依市| 烟台市| 客服| 永兴县| 石景山区| 万宁市| 石楼县| 资中县| 卢湾区| 青神县| 探索| 五寨县| 大竹县| 洛浦县| 金山区| 崇仁县| 曲阜市| 云安县| 县级市| 崇左市| 江津市|