ss2初步研究

自2000年Struts框架發佈,到2001年底Hibernate的誕生,再到2004年Spring的流行,Java社區的開源軟件哲學是:“只做好一件事情,只做最擅長的事情,其他事情留給別人去做。”但是到了2005年,Java開源出現了框架整合的大趨勢,整個Java開源社區雨後春筍般出現了一批又一批的full-stack框架,比較著名的有RIFE,Grails,JBoss Seam,Trails和Able等等。SpringSide也是這樣一個整合框架,常逛BlogJava的人肯定不會陌生,因爲它的老大就是江南白衣。

使用SpringSide可以節省我們很多時間,避免我們花費大量的精力來進行各個開源組件的整合。SpringSide還有另外兩個優點,一是豐富的文檔,全中文的哦,二是豐富的工具,可以支持我們使用ant,eclipse或者idea等工具進行開發。我使用的是Eclipse 3.2,在使用的過程中發現SpringSide針對Eclipse的插件有一點點小問題,不過這些小問題通過適當的設置都可以順利解決。

讓我們開始SpringSide之旅吧。

首先,當然是下載SpringSide了,可以訪問它的官方網站www.springside.org.cn,我下載的是2.0-M1-all in one版,也是目前的最新版本。參照官方網站上的Quick Start來進行安裝和體驗:http://wiki.springside.org.cn/display/springside/Quickstart

然後,將SpringSide目錄下的tools/springside-tools/eclipse-plugins文件夾中的org.springside.eclipse_1.0.0.jar拷貝到Eclipse的plugins目錄中,如下圖:
01.JPG

啓動Eclipse後,可以看到菜單欄出現了新的菜單項:
02.JPG

點擊該菜單項,會出現新建項目的嚮導,我們新建一個項目xkland,並且只選中Struts和Hibernate,如下圖:
03.JPG

點下一步:
04.JPG

點完成,項目創建成功。問題出現了,那就是我們在Eclipse的資源管理器中看不到我們創建的項目,如下:
05.JPG

分析問題的原因,可能是SpringSide插件在創建項目的時候,沒有自動生成項目需要的.project文件,解決的方法也很簡單,就是使用Eclispe再創建一個Java項目,並且將項目的工作空間設置爲該項目的父文件夾,將項目名設置爲和該項目相同。在這裏,工作空間應該設置爲E:/Java,項目名還是xkland,如下圖:
06.JPG

下一步:
07.JPG

再下一步:
08.JPG

在這裏,需要注意了,第二個問題浮出水面,由於SpringSide自動生成的項目的目錄結構過於複雜,在該例中,源代碼應該位於src/main中,測試用例位於src/test中,而src/main中有分爲三個目錄,分別爲java、resources和webapp,代表Java源文件、資源文件和Web網站結構所需的文件,只有把文件的位置放對了,才能夠享用自動構建腳本帶來的方便。如果我們採取默認設置,Eclipse將不能對位於src/main/java中的代碼應用只能感知和代碼提示,而且編譯的時候還會提示類不在構建路徑中。

而在Eclipse中,如果我們想要享受JDT的智能感知和代碼提示,我們必須把源代碼所在的文件夾設置爲項目的源文件夾,如下圖:
09.JPG

而缺省的輸出文件夾,代表的是Java代碼編譯後.class文件存放的路徑,理論上講應該設置爲src/main/webapp/WEB-INF/classes,但是這個設置不是必須的,因爲我們最終的構建手段是運行quickstart.bat腳本,這個腳本會自動編譯所有的.java文件,並將.class文件放到正確的位置,然後打包成.war放到target目錄中。經過以上步驟後,資源管理器看起來應該是這樣:
10.JPG

最後,爲了讓每次運行項目更簡單,可以設置運行項目目錄下的build.bat或quickstart.bat作爲外部工具,如下:
11.JPG

12.JPG

要運行項目的時候,直接點擊運行外部工具就行了。所有的調試信息都會顯示在控制檯視圖。如果要停止服務器的運行,可以直接點擊關閉按鈕。如下圖:
13.JPG

Ok,通過簡單的設置,可以讓我們使用Eclipse開發SpringSide應用更加簡單而快捷。

 
SpringSide默認的數據庫是hsql,但是大部分開發人員熟悉的數據庫是MySql,因此在實際開發過程中,遇到的第一件事往往是修改數據庫。在SpringSide中修改數據庫很簡單,還是以前一篇中創建的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驅動mysql.jar拷貝到src/main/webapp/WEB-INF/lib文件夾下,否則,會遇到如下錯誤:
14.JPG

SpringSide非常注重對i18n的支持,因此創建國際化的應用程序非常方便,只需要在src/mian/resources/i18n文件夾下加入相應的資源文件即可。SpringSide默認使用UTF-8編碼,這從web.xml中註冊的encodingFilter就可以看出來,當然也可以選擇自己喜歡的字符編碼,比如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、數據庫中的默認字符集,需要在創建數據表的時候指定,如下:
CREATE TABLE `user` (
  `id` 
int(11NOT NULL auto_increment,
  `username` 
varchar(20),
  `password` 
char(32), 
  
PRIMARY KEY  (`id`)
) ENGINE
=InnoDB DEFAULT CHARSET=utf8

3、JDBC的連接設置,在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" />

只要將這四個地方設置爲一致,JSP頁面顯示出來就應該不會是亂碼。歸根結底,是SpringSide在web.xml中註冊的encodingFilter幫了大忙。但是,當需要從Struts的resource bundle中讀取message的時候,就不是那麼方便了,因爲需要創建如下的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!

這種文件沒有可讀性,當然就更加不好編輯了,要生成這樣的文件,需要使用J2SDK提供的命令行工具native2ascii.exe,爲了加速開發和調試,可以編寫一個批處理文件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中修改,然後運行該外部工具即可。快捷而方便。

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

要解決這兩個問題也不難,可以將springside根目錄下的misc/servers/tomcat-5.5.17/bin目錄下的startup.bat和shutdown.bat註冊爲Eclispe的外部工具,以達到快速啓動和快速關閉Tomcat服務器的目的,如下圖:
16.JPG

17.JPG

此外,很多時候不需要重新啓動服務器,只需要把更改過的文件重新部署到服務器就可以了,在springside的根目錄目錄下面,misc/servers/tomcat-5.5.17/webapps文件夾中包含了所有的SpringSide項目。使用Windows自帶的命令行工具xcopy,可以將修改過的.class文件、配置文件、資源文件和.jsp文件部署到服務器中。創建一個批處理文件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選項爲複製子目錄,/d選項爲只複製更新過的文件,/y選項爲不用詢問是否覆蓋。

然後再將該deploy.bat註冊爲Eclipse的外部工具。這裏不截圖了,累贅。

當修改了Struts的配置文件和Action類之後,由於Struts只在Tomcat啓動時讀取一次配置文件並緩存起來,而Action對象也只在第一次使用的時候創建一個實例,因此必須重新啓動服務器才能看到效果,配合上面的deploy、stop_tomcat和start_tomcat外部工具使用,使得部署和調試SpringSide應用程序更加快捷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章