1. 程式人生 > >如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪雲伺服器)圖文教程

如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪雲伺服器)圖文教程

    在學習cocos2dx手遊開發的過程中,為了實現使用者註冊、使用者登陸和世界排行榜這些模組,需要用到伺服器來搭建平臺。以前都是
在本地搭建伺服器,在本科期間使用過IIS和Tomcat,感覺在本地搭建伺服器還是蠻簡單的,網上有豐富的資源參考。讀研期間開始學
習基於cocos2dx引擎的手遊開發,經常需要同學和朋友做一些測試,網路版的測試還是有許多不方便,就乾脆嘗試把伺服器架設到雲服
務器上。我選擇的雲伺服器是新浪的SAE,搭建的框架是現在非常適合用來做app服務端的輕量級框架Spring+SpringMVC+MyBatis,
這個框架是我學習了shulinzh的一篇博文《SSM框架——詳細整合教程(Spring+SpringMVC+MyBatis)》來搭建的,正好該博主也是
我的學長,需要搭建SSM框架的同學可以參考,教程非常詳細。本文介紹的部署到SAE的伺服器框架原型使用的就是上面教程搭建的SSM
框架,並且詳細介紹如何從本地搬到SAE雲伺服器以及如何解決在部署中遇到的一些問題。

1.SSM框架目錄介紹

    首先我們先了解一下在本地搭建好的SSM框架,搭建的過程請參照上文中提到的教程。本人使用的是MyEclipse作為的IDE,伺服器
環境是Tomcat6.0。工程目錄如下圖所示:

SSM工程目錄

    搭建好的本地SSM框架如上圖所示,src/main/java目錄下是框架的業務邏輯,包括一些資料庫操作的函式和對映檔案,框架
的控制層等。src/main/resources目錄下儲存的是框架的配置檔案,包括連線資料庫的屬性檔案,部署到SAE需要修改這個檔案,
其本地資料庫連線屬性檔案程式碼如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1/hnust_mysql
username
=root password=hnustmysql85236987 #定義初始連線數 initialSize=0 #定義最大連線數 maxActive=20 #定義最大空閒 maxIdle=20 #定義最小空閒 minIdle=1 #定義最長等待時間 maxWait=60000
    spring-MVC.xml配置檔案用來建立一些Beans,比如開啟註解功能,配置檢視模式,配置檔案上傳等。spring-mybatis.xml配
置檔案用來建立一些跟資料庫打交道的Beans,這兩個配置檔案對SSM框架來說非常重要。Maven Dependencies是用來儲存通過pom.xml
檔案匯入下載的所有Jar包,JRE System Librery我選擇的是JDK1.6,部署到SAE時JDK的版本很重要,後面會講到。webapp目錄下
面有一個WEB-INF的資料夾,裡面有一些編寫好的JSP頁面,index.jsp歡迎頁面和web.xml應用配置檔案。其中web.xml檔案中配置了
框架的Spring MVC servelt和Mybatis的相關資訊,以及編碼過濾器和Spring監聽器等等。

2.部署SAE雲伺服器

    SAE雲伺服器是我的一個學弟推薦的,他之前在SAE上部署過許多PHP的web應用,而且效果還不錯,費用也是可以接受。以前只要
通過實名認證都會送雲豆,現在改為免費額度了,就是每天免費一定的流量,但是隻限於PHP,Java因為需要用到JVM,所以需要自己購
買雲豆,但是費用很低,做測試一個月三十塊左右就差不多了,還是可以接受的。

2.1部署JAVA應用到SAE須知事項

    因為SAE支援的執行環境是OpenJDK1.6和Jetty7.4,所以我們在本地除錯應用時一定要注意JDK的版本,一定要JDK1.6,很多同
學沒有注意這一點,在部署後會出現501的錯誤。至於Jetty7.4,搭建這個伺服器框架網上有很多教程,也不一定本地除錯時一定要用
Jetty7.4,筆者使用的Tomcat6.0一樣能部署SAE,這個關係不大。官網有很多這方面的文件,強烈建議先仔細閱讀文件再開始部署SAE。

2.2部署流程

    部署SSM框架到SAE如果不看教程還是會遇到各種各樣的問題,筆者自己也鼓搗了幾天時間才成功。大致的流程如下:

2.2.1 SAE建立應用和預設版本

    當你註冊完SAE賬戶,充入一定的雲豆後,就可以在個人首頁建立一個新應用,筆者建立的應用名稱叫做急速蝸牛,是一個豎版跑酷
型手遊的名稱,二級域名為orzsxcrunningman.sinaapp.com,其中orzsxcrunningman這個資訊非常重要,它就代表了你建立的眾多
應用當中的某一個應用,訪問資料庫和訪問應用都需要用到,後面會詳細介紹。

建立應用

    建立完應用後,點選急速蝸牛進入應用管理,在介面左邊點選程式碼管理,新建一個程式碼版本,當你只有一個版本時,這個版本就是
你的預設版本。預設版本是指使用二級域名訪問時具體對應執行哪個版本的應用程式碼。當你有多個版本時,可以自行選擇預設版本,如
下圖所示。

程式碼管理

2.2.2 開啟MySQL

    建立一個預設程式碼版本後,先不急著部署程式碼,我們先來開啟SAE提供給我們的MySQL服務。點選介面左側的服務管理下的MySQL服
務,開啟共享型MySQL,如下圖所示。

開啟MySQL

    在開啟的介面裡選擇管理MySQL,可能會要輸入安全密碼,驗證成功後進入到了SAE提供給我們的phpMySQL管理後臺,該後臺提供
了一個圖形化的介面來進行資料庫操作。因為SSM框架需要用到一張表,在介面裡點選SQL,在編輯區輸入以下SQL語句來建立表user_t。

新建表

    點選執行後會在介面左邊能看到新建好的表名,同時phpMySQL還提供了搜尋、查詢、匯出和匯入等操作,具體操作可以參考官網上
提供的文件,介紹的比較詳細。到此我們已經開啟了SAE的MySQL服務,並且新建了一張表。

2.2.3 修改資料庫屬性檔案jdbc.properties

    因為我們部署到SAE的應用需要連線的是SAE提供給我們的MySQL,所以我們需要對SSM框架的jdbc.properties進行一下配置。這
裡我們需要預先知道幾點,連線資料庫時的url是jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_加上你的應用名稱,就是SAE
分配給你的二級域名當中的第一段字串,所以筆者的url就等於jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_orzsxcrunningman
就可以了。還有連線資料庫的使用者名稱和密碼需要在哪裡獲得,是在應用首頁可以找到。使用者名稱就是Access Key,密碼就是Secret Key,
位置如下圖所示。

Key

    所以我們先用#號註釋掉本地的資料庫連線,結合自己的Acess Key和Secret Key修改後的jdbc.properties程式碼如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_orzsxcrunningman
username=Access Key(請輸入自己的Access Key)
password=Secret Key(請輸入自己的Secret Key)
#driver=com.mysql.jdbc.Driver
#url=jdbc:mysql://127.0.0.1/hnust_mysql
#username=root
#password=hnustmysql85236987
#定義初始連線數  
initialSize=0
#定義最大連線數  
maxActive=20
#定義最大空閒  
maxIdle=20
#定義最小空閒  
minIdle=1
#定義最長等待時間
maxWait=60000
    需要注意的是,SAE支援Java應用連線外網的MySQL,但是不支援外網連線SAE的MySQL,所以修改jdbc.properties後本地應用
將無法連線資料庫。

2.2.4 MyEclipse匯出應用的.war包

    SAE的Java應用只能通過上傳.war包來更新程式碼,而PHP應用可以通過svn或者線上來上傳程式碼。筆者使用的SSM框架是Java應
用,所以只能通過匯出.war包來在線上傳程式碼。這一步驟有許多小細節,筆者當時部署程式碼時沒有注意這一點,浪費了很多時間。我們
先右擊工程名spring_helloworld——Export——MyEclipse JEE——WAR File就可以匯出.war包了。

匯出.war包

    匯出的.war其實就是一個壓縮檔案,直接匯出來的.war還不能直接上傳到SAE,否則會報501錯誤。

2.2.5 修改.war包

    我們對匯出的.war進行解壓,可以看到解壓後的檔案目錄如下圖所示。

war解壓目錄

    首先我們先去除一些通過Maven匯入的Jar包,因為SAE會提供一些Jar包給我們,如果不去除這些冗餘的Jar包,會在應用執行時
提示501錯誤,相信很多同學在部署時都會遇到這個錯誤,遇到這個錯誤後可以朝這個方向去找錯。開啟WEB-INF資料夾,在lib資料夾
中去除多餘的Jar包。筆者試驗了很多次,最後只留下了這些Jar包,可以不報501的錯誤了。但是到底SAE提供了多少Jar包給我們,官
網上也說的很少,一般是servelt_api.jar、xml.jar和一些基本的Jar包比如email等,也有人寫過這方面的文章,大家可以去搜一下。

Jar包

    然後我們還需要對WEB-INF——class——spring-MVC.xml檔案裡的一段程式碼進行刪除,如果不刪除這段程式碼,會提示404找不到頁
面。其實這個錯誤感覺很奇怪,先貼程式碼。

檔案上傳程式碼

    這是一段檔案上傳程式碼,如果不刪除這段程式碼,會提示404找不到頁面,可能是因為SAE暫時分配給我的程式碼空間只有100M,檔案
上傳也需要一定的空間,所以提示會找不到頁面,如果有人知道為什麼會報404錯誤,還請在下方留言,一起學習一下。

2.2.6重新打包.war

     在這一步筆者也耗費了很多時間,如果按照MyEclipse匯出的.war包來看的話,目錄如下圖所示。

war一級目錄

    在一級目錄直接進行壓縮成rar格式,然後修改後綴變成war,最後再修改檔名稱為SAE當中你新建的那個應用名,筆者是
orzsxcrunningman,直接上傳到SAE的程式碼管理中,會看到一個目錄的頁面,如下圖所示。

war一級目錄修改
web目錄

    在這個狀態下是無法正常訪問應用的,我們需要進入spring_helloworld,在第二級目錄選取所有的資原始檔再壓縮,再改字尾,
再改名,如下圖所示。

二級目錄

    將正確處理後的war包再上傳到SAE的程式碼管理當中,如果可以看到下面這個頁面,就說明大功告成了。

404

    可能讀者糊塗了,這不是404錯誤嗎,這是因為我們在SSM框架引入註解後,歡迎介面雖然在web.xml配置好了為index.jsp,但是
請求會被serlvet攔截,而又沒有在controller當中編寫跳轉到歡迎介面程式碼,所以會提示找不到頁面,但是我們輸入以下的連結
http://1.orzsxcrunningman.sinaapp.com/user/showUser?id=1就能看到從資料庫當中輸出的第一個使用者名稱,如果能看到就代
表部署成功了。

結果

3. 總結

    其實部署最基本的SSM框架還是比較簡單,但如果是第一次部署的話又沒有教程參考還是比較費時的。同時我還發現SAE的JVM有時
還會不聽話,明明正確的程式碼上傳後執行的結果還是404或者501這些錯誤,我還是建議經常重啟下JVM,也許重啟下JVM就行了。還有要
學會看SAE的日誌記錄,日誌記錄分為request、error、warning、notice、resource和debug,在日誌檔案當中找線索。希望這篇
教程能對一些想要部署SSM到SAE的同學帶來幫助。