這篇文章看的我醍醐灌頂的感覺,比之前本科時候學習的SSH架構 要清晰數倍
非常感覺這篇博主的文章
文章連結為:http://blog.sina.com.cn/s/blog_a6a6b3cd01017c57.html
因為覺得寫的太好了 想收藏一下
什麼是SSH?
SSH對應 struts spring hibernateSSH就是Struts + Spring + Hibernate 3個Java框架的集合,現在Java開發中常用的框架組合。用來開發後臺,與前臺和資料庫進行資料互動。最初學這個是為了寫JSP。
struts 採用MVC模式,主要是作用於使用者互動
spring 採用IOC和AOP~作用比較抽象,是用於專案的鬆耦合
hibernate 是物件持久化框架,其實就是實體類和資料庫表建立關係,操作類就會觸發相應的sql語句,可以不用寫任何sql語句,完成資料庫程式設計(引自百度知道)
SSH框架搭建步驟很多,但是不難,因為MyEclipse已經幫我們做了大部分的工作,如果純手動新增這個框架的話,那真是夠複雜的了。不過涉及的知識挺多的,適合有一定基礎的人。下面詳細介紹一下SSH框架的搭建步驟並且解決了幾個我在搭建過程中遇到的問題。<wbr>
事先準備工作:
1.JDK
這個是一切的前提,相信大家都有。沒有的話下面的步驟也不用看了,先安裝JDK,配置環境變數吧。
JDK 7.0 下載:http://www.onlinedown.net/soft/61003.htm
配置Java環境變數教程:http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef
2.MyEclipse
我們主要用MyEclipse來搭建SSH, 所以這個必須有,我用MyEclipse 8.5搭建過SSH,沒問題。沒有的話建議下載高版本的,與時俱進嘛。漢化或者不漢化看個人習慣,我覺得中文用起來比較舒服。
Myeclipse 10 下載:http://www.pc6.com/softview/SoftView_57131.html
Myeclipse 漢化包及漢化教程:http://blog.csdn.net/cntanghai/article/details/6310200
3.MySQL
資料庫,注意安裝時設定的密碼千萬別忘了。
MySQL詳細圖文安裝教程:http://jingyan.baidu.com/article/642c9d34aa809a644a46f717
MySQL 5.5.28 下載:http://down.chinaz.com/soft/29015.htm
4.Navicat for MySQL
MySQL檢視化管理及開發工具,主要用他來操作MySQL。推薦安裝,非必須。
Navicat for MySQL v10.1.7簡體中文特別版下載:http://www.xiazaiba.com/html/2122.html
5.mysql-connector-java-5.0.8-bin.jar
Java連線MySQL資料庫時需要用到的jar包。
jar下載:http://pan.baidu.com/share/link?shareid=444190&uk=4262258889
6.在MySQL中新建一個表,用來測試資料
我在這裡準備做一個註冊登入功能,所以在test裡建了一個user表,表裡的欄位有id、username、password、nickname四個欄位。nickname用來測試中文是否亂碼。
SQL語句:
CREATE TABLE `user` (
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='使用者資訊表';<wbr><wbr><wbr><wbr><wbr><wbr>
SSH框架搭建步驟:
1.新建一個專案。開啟MyEclipse,新建一個Web專案,起名就叫SSH吧,點選完成,若彈出提示點Yes即可。
2.新增Struts框架。右鍵這個專案,選擇MyEclipse->Add Struts Capabilities。 在彈出的選單中把包的路徑改一下, Base package for new classes選項中的路徑com.yourcompany.struts改成com.ssh.struts, 點選完成。
展開WebRoot中的WEB-INF資料夾,看到目錄結構如下圖,證明Struts框架新增完成。
3.新增Spring框架。右鍵這個專案,選擇MyEclipse->Add Spring Capabilities。
在選單中選擇如下6個庫,點選下一步。
更改Folder路徑,選擇SSH專案WebRoot資料夾下的WEB-INF,完成。
現在專案的目錄結構如下,Spring框架新增完成。
4.連線資料庫。點選右上角的圖示"開啟透檢視",選擇MyEclipse Database Explorer。在視窗中右鍵->New 新建一個資料庫連線。
Driver template 選擇 MySQL Connector/J
Driver name 起名叫test
Connection URL 更改為jdbc:mysql://自己的IP地址:埠號/資料庫名稱
User name 填寫MySQL的使用者名稱
Password 填寫MySQL的密碼
Driver JARs 點選Add JARs按鈕,瀏覽到事先準備的mysql-connector-java-5.0.8-bin.jar
Save password 選上
點選Test Driver,測試結果:資料庫配置正確,點選完成。
雙擊新增的test連線,展開目錄,可以發現我們事先建立的user表。
5.新增Hibernate框架。右鍵SSH專案,選擇MyEclipse->Add Spring Capabilities。
點選下一步。
配置中選擇第二項"Spring configuration file"。把Spring與Hibernate整合到一起,點選下一步。
在選單中選第二項"Existing Spring configuration file",點選下一步。
DB Driver選擇在新增Spring框架時配置的test,點選下一步。
取消Create SessionFactory class?這個選項,點選完成。
現在的目錄結構如下,SSH框架大體搭建完成。
6.測試功能。
先部署一下專案,訪問首頁看看效果。選擇視窗上方圖示"Deploy MyEclipse J2EE Project to Server"->點選add新增SSH專案->Server選擇MyEclipse Tomcat。
專案部署成功。
點選視窗上方圖示"Run MyEclipse Servers"啟動Tomcat。
在瀏覽器中訪問SSH專案地址,別忘了加上Tomcat的預設埠,8080埠。
輸入地址:http://localhost:8080/SSH,Tomcat會訪問SSH專案WebRoot下的index.jsp。
現在修改一下index.jsp中給的內容,在Body中新增"這是我的首頁"。Ctrl+S儲存。
這裡出現了一個問題,頁面預設的編碼為ISO-8859-1,不支援中文字元,無法儲存。我們先把這個提示關掉。
選擇視窗->首選項->MyEclipse->JSP->Files and Editors->JSP,把編碼改為ISO 10646/Unicode(UTF-8)->應用->確定。
編碼問題是一個很常見的問題,為避免出現這類我提我們儘量將工作空間的所有編碼格式統一,無論前臺後臺還是資料庫,否則會引發許多問題,例如中文亂碼。
選擇視窗->首選項->常規->工作空間->文字檔案編碼選擇其他->其他選項裡選擇UTF-8->應用->確定。
這樣設定後,我們的工作空間編碼就比較統一了,再生成的JSP頁面就是UTF-8編碼格式了,能夠很好的支援中文字元,不過之前生成的JSP頁面編碼格式要我們手動更改。
把index.jsp中<%@ page language="java" import="java.util.*" pageEncoding="XXX"%> 的pageEncoding改為UTF-8,再儲存頁面。這時再訪問http://localhost:8080/SSH , 正確顯示中文,這回沒問題了。
現在寫個註冊登入的功能來測試一下框架整合的結果。
切換到MyEclipse DataBase Explorer檢視,通過Spring框架的逆向工程功能把user表逆向成Java實體類。右鍵user表選擇"Hibernate Reverse Engineering"。
Java src folder 選擇SSH專案下的src資料夾。
Java package 填寫com.ssh.user
勾選前三個選項:Create POJO、Java Data Obect和Java Data Access Object。POJO類是資料庫表格所對應的Java類,JDO類是MyEclipse自動生成的對資料庫的一些操作,這裡會封裝一些常用的操作,基本上可以滿足我們的各種需要了,選擇下一步。
Id Generator 選擇 native,點選完成。
此時的目錄結構如下,我們可以看到系統生成了3個類,一個配置檔案。
User 繼承自AbstractUser,是User表的實體類。
UserDAO 封裝了一些對資料庫的常用操作。
User.hbm.xml 是hibernate-mapping對映配置檔案,配置了哪個實體類對映哪個表,配置了實體類的哪個屬性對映表裡的哪列。
如果這些東西不用hibernate生成,那麼我們就要自己寫,要浪費很多時間,hibernate的作用就體現出來了。
現在來寫測試頁。開啟WEB-INF資料夾下的struts-config.xml檔案,切換到設計檢視(design)。右鍵->New->Form Action and JSP。
填寫Form表單屬性:
Use case: login
Name:loginForm
在下方Form Properties中新增兩個屬性
username: JSP input type text
password: JSP input type password
切換到JSP選項,填寫JSP屬性:
勾選Create JSP form
路徑修改為/jsp/login.jsp
點選完成。
此時的目錄結構如下,可以看到在WebRoot/jsp/下 生成了一個login.jsp頁。
我們檢視一下現在的目錄結構,並把struts-config.xml切換到Source檢視,看看struts框架幫我們幹了什麼。
可以看到目錄裡多了3個檔案:LoginFrom.java、LoginAction.java、login.jsp。這正是我們在設計檢視裡選擇Form,Action and JSP所配置的檔案。而struts-config.xml裡也相應的新增了這3個檔案的對映配置資訊。如果這些不用struts生成的話,就需要我們自己寫,會浪費很多時間,struts的作用體現出來了。
這裡說一下頁面請求的執行順序:
1、login.jsp使用者填寫了登入資訊並點選了登入按鈕,傳送了一個請求(loginFrom.do)。
2、struts會通過struts-config.xml找到相應的對映配置(Action name==loginFrom)。
3、把登入表單的屬性對映到loginForm.java裡(bean)。
4、把loginForm和mapping、request、response一起交給LoginAction處理。
5、LoginAction執行完後的通過mapping找到跳轉頁面forward(這個下面會提到)。
現在新增兩個頁面:登入成功頁和登入失敗頁,實現登入後的跳轉。
在WebRoot/jsp/下新建兩個JSP頁。起名為loginSuccess.jsp和loginFail.jsp。
嚮導資訊如下:
在loginSuccess.jsp頁面body中新增"登入成功!<br>"。
在loginFail.jsp頁面body中新增"登入失敗<br>"。
把登入頁、登入成功頁、登入失敗頁3個頁面相關聯。
切換到struts-config.xml的設計檢視。右鍵login.jsp->New->Forward。
loginSuccess:
選擇Local Action Forward
瀏覽Action Path:/login
填寫name:loginSuccess
瀏覽Path:/jsp/loginSuccess.jsp
完成
loginFail:
選擇Local Action Forward
瀏覽Action Path:/login
填寫name:loginFail
瀏覽Path:/jsp/loginFail.jsp
完成
切換到Source檢視,可以看到程式碼如下圖:
Action裡多了
<forward name="loginSuccess" path="/jsp/loginSuccess.jsp" />
<forward name="loginFail" path="/jsp/loginFail.jsp" />
兩行程式碼,頁面跳轉新增完成。
現在來寫具體的執行程式碼。開啟LoginAction.java。可以看到自動生成的程式碼如下圖:
我們先不連資料庫,先寫一個測試的登入程式碼。
準備就緒,啟動Tomcat,在瀏覽器中訪問登入頁:
http://localhost:8080/SSH/jsp/login.jsp
看到這個介面,都是英文,很不爽,不僅僅因為醜。把它改成中文的,開啟login.jsp,程式碼如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
</html>
改成:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
</html>
重新整理一下登入頁面,看看效果:
登入介面漢化成功!看起來舒服多了。點選登入。
這時候因為我們什麼都沒填,應該跳轉到登入失敗頁面。
後退,回到登入介面,填寫
帳號:asd
密碼:asd123
點選登入,帳號密碼和後臺設定的匹配,這時候應該跳轉到登入成功介面。
測試完成,下面我們連線一下資料庫,從資料庫裡取出user資料進行匹配。
想運算元據庫我們要先獲取DAO(data access object),我們的UserDAO是hibernate生成的,關於UserDAO的配置資訊寫在了applicationContext.xml裡。所以在用UserDAO之前要先獲取applicationContext.xml。
百度上查詢了一下相關程式碼,找到了一個獲取applicationContext.xml的方法。Spring框架裡的
ClassPathXmlApplicationC
測試一下這個類是否好用:
把LoginAction開啟,把程式碼改為:<wbr>