摘自:http://hi.baidu.com/%B7%E7%D3%EA%B9%CA%C8%CB/blog/item/a1e2eb5146e8f2898c543031.html
這個假期的課程設(shè)計是基于struts和hibernate做一個類似于taobao一樣的網(wǎng)站,數(shù)據(jù)庫是基于MySQL的,開發(fā)的IDE是eclipse和Myeclipse的插件,服務(wù)器當然是tomcat.
學(xué)習(xí)階段:切記:實踐是學(xué)習(xí)的最佳途徑
步驟一、java的安裝和tomcat與eclipse的配置集成
eclipse+myeclipse+tomcat的開發(fā)(感謝pony和他的名言"抄襲是一種美德")
http://www.cnblogs.com/pony/archive/2008/07/03/1234615.html
如果你希望對基于純tomcat的web開發(fā)理解更深刻一點,強烈建議你學(xué)習(xí)一下這篇帖子
http://hi.baidu.com/%B7%E7%D3%EA%B9%CA%C8%CB/blog/item/f8170ffbf819f161024f5675.html
步驟二、MySql的安裝
數(shù)據(jù)庫的安裝基本沒有什么困難,特別把這個拿出來說是因為原版的MySql根本沒有界面,這個對于像我這樣的新手來說也照實迷茫了一小段時間,然后我就找到了"SQL-Front",這是個MySql的圖形管理工具,http://search.gougou.com/search?search=SQL-Front&id=2上面有,這個鏈接是迅雷主站的鏈接,你可以選擇一個中文版下下,我下的是英文版,主要是看網(wǎng)上有人說Mysql有中文字符問題,我力求簡單,所以未雨綢繆了一下,下了個英文版本的。
SQL-Front配置方法其實很簡單,但是網(wǎng)上說的人很少,我就簡單的說下:
SQL-Front配置
a、點擊桌面的SQL-Front快捷方式
b、彈出了一個對話框,你只需要在"General"的name中隨便寫點什么表示連接的名字(無所謂的),在"connection"中的Server 里面填上你需要連接的服務(wù)器的地址,我的服務(wù)器就是本機,所以我寫上了"localhost",最后你只需要在Login里面寫上登錄數(shù)據(jù)庫的密碼(就是 你安裝數(shù)據(jù)庫的時候設(shè)置的密碼),然后點擊database選擇你所需要連接的數(shù)據(jù)庫,然后點擊確定按鈕即可。
c、此時會出現(xiàn)一個對話框,上面有你建立好的連接名,選中,點擊打開按鈕就可以看到我們的Mysql的操作界面了。
步驟三、struts、hibernate和spring與myeclipse的集成.
http://hi.baidu.com/sukeqiu/blog/item/dceb93f49aa71e6adcc47403.html
我覺得基本上沒有比上面這篇帖子更好的網(wǎng)絡(luò)資源了。(感謝Suker)
按照上面的帖子做了做,基本能夠?qū)truts hibernate 和 spring的過程熟悉一遍,成不成功是另外一回事,我反正是沒成功過,主要是時間不夠,而且太粗心老是有些細節(jié)性的東西搞錯了,沒怎么成功過,但是之所 以介意這篇帖子,主要因為這篇帖子是目前網(wǎng)絡(luò)上最新的,這篇帖子能夠讓你快速的熟悉環(huán)境,手把手教你配置。
熟悉完上篇帖子后就可以看主題貼"struts和hibernate"的配置使用了。
http://hi.baidu.com/googee/blog/item/62299044b82b6583b3b7dc71.html
寫的還不錯,肯定是實踐過的人寫的,但是不詳細,但是有了上面那帖子的沉淀,基本上能看明白這篇帖子了,這樣基本上你就能寫出你的第一個基于struts和hibernate的程序了.
步驟四、找一兩本專門寫基于struts和hibernate應(yīng)用的書來看看。里面最好有少量的理論和大量的實例,因為光靠上面的三個步驟,你只能寫寫login頁面,再難的關(guān)于strtus的標簽內(nèi)的東東就搞不定了,包括在頁面的循環(huán)輸出的logical標簽,只有參閱樹上的實例才能了解,網(wǎng)上這方便的東西太少了。
我用的是<<Struts+Hibernate開發(fā)web應(yīng)用——從基礎(chǔ)到實踐>>||吳明暉 吳超 編著
<<Strtus+Hibernate使用教程>>||鄔繼成 編著
如上就是我學(xué)習(xí)struts和hibernate所參考的若干資源,下面我將我在學(xué)習(xí)過程當中遇到的若干問題稍微闡述,共同學(xué)習(xí)。
1、如何理解forward。
基本上能夠在兩個地方看到forward,其一是在action中看到
mapping.findForward("testPage")
另外一個是在配置文件strtuts-config.xml中看到
<forward>
這樣便不難理解了,action中的mapping是通過尋找配置文件當中的forward來定位所要返回的內(nèi)容.forward基本上有兩個范圍,一個 是global-forwards 表示在任何一個action中都可以用這個forward,另外一個是在特定的action中的定義的forwards,表示只能在這個特定的 action中找到這個forwards
2、利用鏈接直接定位到action的.do
在web開發(fā)過程中我們不可能總也是利用提交按鈕來跳轉(zhuǎn)頁面,有的時候我們需要利用超鏈接來定位到某個網(wǎng)頁,并且超鏈接帶有參數(shù),所以希望在頁面顯示之前利用參數(shù)做些初始化,我就遇到了這樣的問題,不知道如何的定位,具體的方法如下:
<a href="login.do?mode=1">登錄</a>
這樣就可以直接定位到loginAction里面了,可是這里有個注意點。看看配置文件:
<action
attribute="showGoodsForm"
name="showGoodsForm"
<!-- input="/form/showGoods.jsp" -->
path="/showGoods" {這個即為鏈接要定向的action}
scope="request"
type="com.shop.struts.action.ShowGoodsAction" />
我利用相同的方式<a href="showGoods.do?mode=1" />剛開始的時候總是說請求無效,我以為定位錯了,因為我用這個鏈接的地方是index.jsp(在根目錄下)和用login.jsp(在根目錄的 下一層)的層次不一樣,后來才發(fā)現(xiàn)原來是配置文件中的"input"的問題,我把input注釋掉了,結(jié)果就ok了,我分析大概是由于這個input限制 了只有showGoods.jsp才能發(fā)送請求,所以我在index中用超鏈接來定位就出問題了。
3、關(guān)于循環(huán)條目的輸出方法
在程序設(shè)計當中我們經(jīng)常希望從數(shù)據(jù)庫當中讀進多條記錄顯示在頁面上,比如想瀏覽某一大類下的所有商品信息,在傳統(tǒng)的jsp開發(fā)當中,我們利用的方法經(jīng)常是
<% for(int i=0;i<{num}'i++)%>
<%out.println();%>
的類似的方法,而有了struts框架,我們可以利用logic和bean標簽來實現(xiàn),這種方法非常類似于.net平臺下的gridview的用法,只是struts沒有可視化的控件來用。具體方法如下
<table>
<logic:notEmpty name="{formName}" property="{collection}">
<logic:iterate indexId="index" id="{itemname}" name="formName" property="{collection}">
<tr>
<td>
<bean:write name="{itemname}" property="{屬性名}">
</td>
</tr>
</table>
formName:是在struts-config中已定義的<form-beans>,切記整個struts只定義了一個form
collection:是在form當中定義的一個具有iteratrable的容器,可以是vector等,并且需要提供get的顯示方法(這兩點是我自己猜想的,只有如此才有統(tǒng)一的接口)
id:隨便定義,類比于Java中的 for(type temp : collection)語法中的那個temp的意思
property:就是你想要打印出來的那個實例的屬性,必須提供get方法
還有一個重要的問題,我是forward跳轉(zhuǎn)到這個頁面的,forward利用的方法是redirect,所以在這里由于scope是request于是就找不到對應(yīng)的bean了,具體的情況請參考這篇帖子,講得很好。
http://hi.baidu.com/%D3%D2%CA%D6%C4%AA%D4%FA%CC%D8%B5%C4/blog/item/6829303618c20d340a55a985.html
4、條件輸出—<logic:empty>和<logic:notEmpty>的一點發(fā)現(xiàn)
今天希望做一個功能,就是當用戶登錄的時候在首頁出現(xiàn)登錄信息,如果沒有登錄則出現(xiàn)未登錄信息。于是乎就發(fā)現(xiàn)了這樣的做法:
<logic:empty name="user">
<a href="#" class="">[免費注冊]</a>
<a href="form/login.jsp" class="titlelink">[登錄]</a>
</logic:empty>
<logic:notEmpty name="user">
歡迎您光臨本站 <a href="#" class="">[注銷]</a>
</logic:notEmpty>
稍微解釋一下,我發(fā)現(xiàn)這個empty標簽在尋找"user"的時候會在request和session兩個scope內(nèi)尋找,如果找到就輸出第二條,如果 沒有找到就輸出第一條。這樣當?shù)卿浀臅r候我在action里面設(shè)置session的對象,如果點擊注銷則在action里面設(shè)置session的對象為 空。
5、struts當中資源文件ApplicationResources.properties不能填寫中文的方法
http://hi.baidu.com/lyq32/blog/item/86fa37dd2a44cadc8d102987.html
6、今天在用hibernate保存數(shù)據(jù)的時候用到下面一個方法
session.save(tempUser); 這里我的tempUser是數(shù)據(jù)庫當中的一張表User的表,我的表中的主鍵ID是讓MySql數(shù)據(jù)庫自動生成的,但是hibernate在幫我生成類的時候的配置文件當中是這樣寫的:
<id name="userId" type="java.lang.Integer">
<column name="userID" />
<generator class="assigned" />
</id>
通過上網(wǎng)查閱了這篇帖子
http://hi.baidu.com/llscompazz/blog/item/8f8d6529308246fb98250a6b.html
我發(fā)現(xiàn)如果指定了assigned,則必須在程序當中指定ID的值,這個與我的設(shè)計完全不同,經(jīng)過上面的帖子的說明,我將class的值變換為了identity,這樣便可以成功的采用了session.save()方法了,否則會出現(xiàn)異常。
7、理解action當中的name屬性和attribute屬性
http://hi.baidu.com/mum0532/blog/item/abc5e833044ddf41ac4b5f59.html
8、初始化<html:text>
http://hi.baidu.com/dorachopper/blog/item/ee03c82a5eb9de3d5243c15b.html
補充一句,我利用的是那個value="${}"的方法,但是和帖子上說的不完全一樣,因為我在其他地方設(shè)置過了 session.setAttribute("address","nwpu"),所以這里我直接寫上了value="${address}",就自動顯 示出來了,很方便。
這個假期的課程設(shè)計是基于struts和hibernate做一個類似于taobao一樣的網(wǎng)站,數(shù)據(jù)庫是基于MySQL的,開發(fā)的IDE是eclipse和Myeclipse的插件,服務(wù)器當然是tomcat.
學(xué)習(xí)階段:切記:實踐是學(xué)習(xí)的最佳途徑
步驟一、java的安裝和tomcat與eclipse的配置集成
eclipse+myeclipse+tomcat的開發(fā)(感謝pony和他的名言"抄襲是一種美德")
http://www.cnblogs.com/pony/archive/2008/07/03/1234615.html
如果你希望對基于純tomcat的web開發(fā)理解更深刻一點,強烈建議你學(xué)習(xí)一下這篇帖子
http://hi.baidu.com/%B7%E7%D3%EA%B9%CA%C8%CB/blog/item/f8170ffbf819f161024f5675.html
步驟二、MySql的安裝
數(shù)據(jù)庫的安裝基本沒有什么困難,特別把這個拿出來說是因為原版的MySql根本沒有界面,這個對于像我這樣的新手來說也照實迷茫了一小段時間,然后我就找到了"SQL-Front",這是個MySql的圖形管理工具,http://search.gougou.com/search?search=SQL-Front&id=2上面有,這個鏈接是迅雷主站的鏈接,你可以選擇一個中文版下下,我下的是英文版,主要是看網(wǎng)上有人說Mysql有中文字符問題,我力求簡單,所以未雨綢繆了一下,下了個英文版本的。
SQL-Front配置方法其實很簡單,但是網(wǎng)上說的人很少,我就簡單的說下:
SQL-Front配置
a、點擊桌面的SQL-Front快捷方式
b、彈出了一個對話框,你只需要在"General"的name中隨便寫點什么表示連接的名字(無所謂的),在"connection"中的Server 里面填上你需要連接的服務(wù)器的地址,我的服務(wù)器就是本機,所以我寫上了"localhost",最后你只需要在Login里面寫上登錄數(shù)據(jù)庫的密碼(就是 你安裝數(shù)據(jù)庫的時候設(shè)置的密碼),然后點擊database選擇你所需要連接的數(shù)據(jù)庫,然后點擊確定按鈕即可。
c、此時會出現(xiàn)一個對話框,上面有你建立好的連接名,選中,點擊打開按鈕就可以看到我們的Mysql的操作界面了。
步驟三、struts、hibernate和spring與myeclipse的集成.
http://hi.baidu.com/sukeqiu/blog/item/dceb93f49aa71e6adcc47403.html
我覺得基本上沒有比上面這篇帖子更好的網(wǎng)絡(luò)資源了。(感謝Suker)
按照上面的帖子做了做,基本能夠?qū)truts hibernate 和 spring的過程熟悉一遍,成不成功是另外一回事,我反正是沒成功過,主要是時間不夠,而且太粗心老是有些細節(jié)性的東西搞錯了,沒怎么成功過,但是之所 以介意這篇帖子,主要因為這篇帖子是目前網(wǎng)絡(luò)上最新的,這篇帖子能夠讓你快速的熟悉環(huán)境,手把手教你配置。
熟悉完上篇帖子后就可以看主題貼"struts和hibernate"的配置使用了。
http://hi.baidu.com/googee/blog/item/62299044b82b6583b3b7dc71.html
寫的還不錯,肯定是實踐過的人寫的,但是不詳細,但是有了上面那帖子的沉淀,基本上能看明白這篇帖子了,這樣基本上你就能寫出你的第一個基于struts和hibernate的程序了.
步驟四、找一兩本專門寫基于struts和hibernate應(yīng)用的書來看看。里面最好有少量的理論和大量的實例,因為光靠上面的三個步驟,你只能寫寫login頁面,再難的關(guān)于strtus的標簽內(nèi)的東東就搞不定了,包括在頁面的循環(huán)輸出的logical標簽,只有參閱樹上的實例才能了解,網(wǎng)上這方便的東西太少了。
我用的是<<Struts+Hibernate開發(fā)web應(yīng)用——從基礎(chǔ)到實踐>>||吳明暉 吳超 編著
<<Strtus+Hibernate使用教程>>||鄔繼成 編著
如上就是我學(xué)習(xí)struts和hibernate所參考的若干資源,下面我將我在學(xué)習(xí)過程當中遇到的若干問題稍微闡述,共同學(xué)習(xí)。
1、如何理解forward。
基本上能夠在兩個地方看到forward,其一是在action中看到
mapping.findForward("testPage")
另外一個是在配置文件strtuts-config.xml中看到
<forward>
這樣便不難理解了,action中的mapping是通過尋找配置文件當中的forward來定位所要返回的內(nèi)容.forward基本上有兩個范圍,一個 是global-forwards 表示在任何一個action中都可以用這個forward,另外一個是在特定的action中的定義的forwards,表示只能在這個特定的 action中找到這個forwards
2、利用鏈接直接定位到action的.do
在web開發(fā)過程中我們不可能總也是利用提交按鈕來跳轉(zhuǎn)頁面,有的時候我們需要利用超鏈接來定位到某個網(wǎng)頁,并且超鏈接帶有參數(shù),所以希望在頁面顯示之前利用參數(shù)做些初始化,我就遇到了這樣的問題,不知道如何的定位,具體的方法如下:
<a href="login.do?mode=1">登錄</a>
這樣就可以直接定位到loginAction里面了,可是這里有個注意點。看看配置文件:
<action
attribute="showGoodsForm"
name="showGoodsForm"
<!-- input="/form/showGoods.jsp" -->
path="/showGoods" {這個即為鏈接要定向的action}
scope="request"
type="com.shop.struts.action.ShowGoodsAction" />
我利用相同的方式<a href="showGoods.do?mode=1" />剛開始的時候總是說請求無效,我以為定位錯了,因為我用這個鏈接的地方是index.jsp(在根目錄下)和用login.jsp(在根目錄的 下一層)的層次不一樣,后來才發(fā)現(xiàn)原來是配置文件中的"input"的問題,我把input注釋掉了,結(jié)果就ok了,我分析大概是由于這個input限制 了只有showGoods.jsp才能發(fā)送請求,所以我在index中用超鏈接來定位就出問題了。
3、關(guān)于循環(huán)條目的輸出方法
在程序設(shè)計當中我們經(jīng)常希望從數(shù)據(jù)庫當中讀進多條記錄顯示在頁面上,比如想瀏覽某一大類下的所有商品信息,在傳統(tǒng)的jsp開發(fā)當中,我們利用的方法經(jīng)常是
<% for(int i=0;i<{num}'i++)%>
<%out.println();%>
的類似的方法,而有了struts框架,我們可以利用logic和bean標簽來實現(xiàn),這種方法非常類似于.net平臺下的gridview的用法,只是struts沒有可視化的控件來用。具體方法如下
<table>
<logic:notEmpty name="{formName}" property="{collection}">
<logic:iterate indexId="index" id="{itemname}" name="formName" property="{collection}">
<tr>
<td>
<bean:write name="{itemname}" property="{屬性名}">
</td>
</tr>
</table>
formName:是在struts-config中已定義的<form-beans>,切記整個struts只定義了一個form
collection:是在form當中定義的一個具有iteratrable的容器,可以是vector等,并且需要提供get的顯示方法(這兩點是我自己猜想的,只有如此才有統(tǒng)一的接口)
id:隨便定義,類比于Java中的 for(type temp : collection)語法中的那個temp的意思
property:就是你想要打印出來的那個實例的屬性,必須提供get方法
還有一個重要的問題,我是forward跳轉(zhuǎn)到這個頁面的,forward利用的方法是redirect,所以在這里由于scope是request于是就找不到對應(yīng)的bean了,具體的情況請參考這篇帖子,講得很好。
http://hi.baidu.com/%D3%D2%CA%D6%C4%AA%D4%FA%CC%D8%B5%C4/blog/item/6829303618c20d340a55a985.html
4、條件輸出—<logic:empty>和<logic:notEmpty>的一點發(fā)現(xiàn)
今天希望做一個功能,就是當用戶登錄的時候在首頁出現(xiàn)登錄信息,如果沒有登錄則出現(xiàn)未登錄信息。于是乎就發(fā)現(xiàn)了這樣的做法:
<logic:empty name="user">
<a href="#" class="">[免費注冊]</a>
<a href="form/login.jsp" class="titlelink">[登錄]</a>
</logic:empty>
<logic:notEmpty name="user">
歡迎您光臨本站 <a href="#" class="">[注銷]</a>
</logic:notEmpty>
稍微解釋一下,我發(fā)現(xiàn)這個empty標簽在尋找"user"的時候會在request和session兩個scope內(nèi)尋找,如果找到就輸出第二條,如果 沒有找到就輸出第一條。這樣當?shù)卿浀臅r候我在action里面設(shè)置session的對象,如果點擊注銷則在action里面設(shè)置session的對象為 空。
5、struts當中資源文件ApplicationResources.properties不能填寫中文的方法
http://hi.baidu.com/lyq32/blog/item/86fa37dd2a44cadc8d102987.html
6、今天在用hibernate保存數(shù)據(jù)的時候用到下面一個方法
session.save(tempUser); 這里我的tempUser是數(shù)據(jù)庫當中的一張表User的表,我的表中的主鍵ID是讓MySql數(shù)據(jù)庫自動生成的,但是hibernate在幫我生成類的時候的配置文件當中是這樣寫的:
<id name="userId" type="java.lang.Integer">
<column name="userID" />
<generator class="assigned" />
</id>
通過上網(wǎng)查閱了這篇帖子
http://hi.baidu.com/llscompazz/blog/item/8f8d6529308246fb98250a6b.html
我發(fā)現(xiàn)如果指定了assigned,則必須在程序當中指定ID的值,這個與我的設(shè)計完全不同,經(jīng)過上面的帖子的說明,我將class的值變換為了identity,這樣便可以成功的采用了session.save()方法了,否則會出現(xiàn)異常。
7、理解action當中的name屬性和attribute屬性
http://hi.baidu.com/mum0532/blog/item/abc5e833044ddf41ac4b5f59.html
8、初始化<html:text>
http://hi.baidu.com/dorachopper/blog/item/ee03c82a5eb9de3d5243c15b.html
補充一句,我利用的是那個value="${}"的方法,但是和帖子上說的不完全一樣,因為我在其他地方設(shè)置過了 session.setAttribute("address","nwpu"),所以這里我直接寫上了value="${address}",就自動顯 示出來了,很方便。