Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第11、12章 后臺(tái)商品管理模塊、JSP技術(shù)_第1頁
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第11、12章 后臺(tái)商品管理模塊、JSP技術(shù)_第2頁
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第11、12章 后臺(tái)商品管理模塊、JSP技術(shù)_第3頁
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第11、12章 后臺(tái)商品管理模塊、JSP技術(shù)_第4頁
Java Web應(yīng)用開發(fā)項(xiàng)目教程- 課件 第11、12章 后臺(tái)商品管理模塊、JSP技術(shù)_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院第11章后臺(tái)商品管理模塊■本章要點(diǎn):

商品查詢功能模塊設(shè)計(jì)與實(shí)現(xiàn)商品添加功能模塊設(shè)計(jì)與實(shí)現(xiàn)商品修改功能模塊設(shè)計(jì)與實(shí)現(xiàn)商品刪除功能模塊設(shè)計(jì)與實(shí)現(xiàn)類別查詢功能模塊設(shè)計(jì)與實(shí)現(xiàn)類別添加功能模塊設(shè)計(jì)與實(shí)現(xiàn)類別刪除功能模塊設(shè)計(jì)與實(shí)現(xiàn)11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■功能說明商品管理主要是實(shí)現(xiàn)信息“增加、修改、刪除、查看”11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■商品查詢功能的實(shí)現(xiàn)流程(1)用戶點(diǎn)擊“商品列表操作”菜單,訪問“product/selectAllProducts.do”。(2)根據(jù)url路徑,在ProductController中編寫Controller層處理jsp請(qǐng)求。(3)在ProductService中編寫Service層接口方法,并在ProductServiceImpl中實(shí)現(xiàn)該方法。(4)在ProductDao中編寫Dao層接口,并在ProductDaoImpl中編寫實(shí)現(xiàn)類,完成對(duì)數(shù)據(jù)庫的查詢。(5)逐級(jí)返回查詢結(jié)果并根據(jù)不同結(jié)果做出相應(yīng)的處理。11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■編程詳解(1)創(chuàng)建實(shí)體類Product11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■編程詳解(2)創(chuàng)建ProductDao查詢所有商品信息11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■編程詳解(3)創(chuàng)建實(shí)現(xiàn)類ProductDaoImpl,添加selectAllProducts方法,該方法用來查詢所有商品信息,查詢的結(jié)果將返回商品列表信息。11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■編程詳解(4)創(chuàng)建類ProductService和ProductServiceImpl。11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■編程詳解(5)創(chuàng)建類ProductController11.1商品查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■編程詳解(6)啟動(dòng)服務(wù)器,登錄系統(tǒng)。點(diǎn)擊左側(cè)菜單欄的“商品列表操作”菜單,顯示商品列表11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■功能說明

通過“商品添加”鏈接進(jìn)入界面,完成所添加商品所有相關(guān)操作。11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■商品添加功能的實(shí)現(xiàn)流程

(1)用戶點(diǎn)擊“添加商品”菜單,訪問“/manager/product/insertPeoductJsp.do”。(2)創(chuàng)建實(shí)體類CategoryMain,用來封裝大類別的屬性,修改Service層,添加selectAllMainCategory方法并在ServiceImpl實(shí)現(xiàn),修改Dao層,添加selectAllMainCategory方法并在DaoImpl實(shí)現(xiàn)。(3)創(chuàng)建實(shí)體類CategoryBranch,用來封裝小類別的屬性,修改Controller層,添加getDivision2方法用于在選擇大類別后獲得其所有小類別,完成Service層和Dao層的支持。11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■商品添加功能的實(shí)現(xiàn)流程(4)根據(jù)url路徑,在ProductController中編寫Controller層處理文件上傳請(qǐng)求和jsp請(qǐng)求。(5)在ProductService中編寫Service層接口方法,并在ProductServiceImpl中實(shí)現(xiàn)該方法。(6)在ProductDao中編寫Dao層接口,并在ProductDaoImpl中編寫實(shí)現(xiàn)類,完成對(duì)數(shù)據(jù)庫的查詢。11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解1.創(chuàng)建實(shí)體類CategoryMain,封裝大類別的屬性。2.實(shí)體類CategoryBranch,封裝小類別的屬性。11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解3.創(chuàng)建CategoryBranchDao及其實(shí)現(xiàn)類,實(shí)現(xiàn)selectBranchCategoryByMainId方法,按照大類別id,查詢所有小類別。11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解4.創(chuàng)建CategoryMainDao及其實(shí)現(xiàn)類,我們要實(shí)現(xiàn)selectAllMainCategory方法,即查看所有大類別功能。11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解5.修改ProductDao和ProductDaoImpL方法insertProduct用于向庫內(nèi)增加商品信息11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解6.創(chuàng)建CategoryBranchService、CategoryMainService11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解7.創(chuàng)建CategoryBranchServiceImpl、CategoryMainServiceImpl11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解8.在ProductService及其實(shí)現(xiàn)類中,我們要添加insertProduct方法,用于向數(shù)據(jù)庫中添加商品11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解9.在CategoryBranchController類中,我們要添加getDivision2方法,用于處理前端的“/getDivision2”請(qǐng)求,其功能為按照大類別id,查詢所有小類別11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解10、在ProductController類中,我們要添加insertProductJsp、insertProduct和upload方法,分別用于處理新增商品請(qǐng)求、新增商品操作和文件上傳操作11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■編程詳解Upload方法部分展示11.2商品添加設(shè)計(jì)與實(shí)現(xiàn)■效果展示啟動(dòng)服務(wù)器,登錄系統(tǒng)。點(diǎn)擊左側(cè)菜單欄的“添加商品”菜單,選擇大類別和小類別,填寫其他字段,上傳圖片,點(diǎn)擊“提交”按鈕后商品添加成功11.3商品修改設(shè)計(jì)與實(shí)現(xiàn)■功能說明

通過商品列表最右側(cè)的“更新數(shù)據(jù)”按鈕來修改商品信息。在點(diǎn)擊“更新數(shù)據(jù)”按鈕后,將彈出更新商品頁面,可以修改商品信息或重新上傳圖片11.3商品修改設(shè)計(jì)與實(shí)現(xiàn)■商品修改實(shí)現(xiàn)流程(1)在商品列表最右側(cè)的“更新數(shù)據(jù)”按鈕,會(huì)發(fā)送請(qǐng)求到“/manager/product/updatePeoductJsp.do”,ProductController的updatePeoductJsp方法在向請(qǐng)求中存儲(chǔ)商品信息、類別信息完成后跳轉(zhuǎn)到“addProduct.jsp”,在管理員完成修改后發(fā)送請(qǐng)求到“/manager/product/updateProduct.do”,后端完成對(duì)商品信息的修改。(2)根據(jù)url路徑,在ProductController中編寫Controller層處理jsp請(qǐng)求。11.3商品修改設(shè)計(jì)與實(shí)現(xiàn)■商品按條件查詢實(shí)現(xiàn)流程(3)在ProductService中編寫Service層接口方法,并在ProductServiceImpl中實(shí)現(xiàn)該方法。(4)在ProductDao中編寫Dao層接口,并在ProductDaoImpl中編寫實(shí)現(xiàn)類,完成對(duì)數(shù)據(jù)庫的查詢。(5)逐級(jí)返回查詢結(jié)果并根據(jù)不同結(jié)果做出相應(yīng)的處理。11.3商品按條件查詢?cè)O(shè)計(jì)與實(shí)現(xiàn)■編程詳解1.修改ProductDao和ProductDaoImpl,添加updateProduct和selectAllProductById方法,用于查詢商品詳情和修改商品屬性11.3商品修改設(shè)計(jì)與實(shí)現(xiàn)■編程詳解2.修改ProductService和ProductServiceImpl添加updateProduct和selectAllProductById方法11.3商品修改設(shè)計(jì)與實(shí)現(xiàn)■編程詳解3.修改修改ProductController,添加updatePeoductJsp和updateProduct方法11.4商品信息刪除■功能說明

管理員可以刪除商品信息。點(diǎn)擊可以完成刪除操作。刪除操作后點(diǎn)擊確定。

刪除成功后頁面轉(zhuǎn)至商品展示頁面。11.4商品信息刪除■功能實(shí)現(xiàn)流程設(shè)計(jì)

(1)點(diǎn)擊商品列表最右側(cè)的“刪除”按鈕,會(huì)發(fā)送請(qǐng)求到“product/deleteProduct.do”。(2)根據(jù)url路徑,在ProductController中編寫Controller層處理jsp請(qǐng)求。(3)在ProductService中編寫Service層接口方法,并在ProductServiceImpl中實(shí)現(xiàn)該方法。(4)在ProductDao中編寫Dao層接口,并在ProductDaoImpl中編寫實(shí)現(xiàn)類,完成對(duì)數(shù)據(jù)庫的查詢。11.4商品信息刪除■編程詳解

1.修改ProductDao和ProductDaoImpl11.4商品信息刪除■編程詳解

2.修改ProductService和ProductServiceImpl11.4商品信息刪除■編程詳解3.修改ProductController,添加deleteProduct方法,用于處理前端的刪除商品請(qǐng)求11.4商品信息刪除■效果展示11.5類別查詢■功能說明

為了便于商品管理,我們可以將商品分成若干個(gè)大類別和若干個(gè)小類別。11.5類別查詢■

流程分析與設(shè)計(jì)大類別與小類別的查詢操作原理一致,因此我們以大類別為例,展示功能實(shí)現(xiàn)流程。(1)點(diǎn)擊左側(cè)菜單欄的“大類別列表”,會(huì)發(fā)送請(qǐng)求到“categoryMain/selectAllMainCategory.do”。(2)根據(jù)url路徑,在CategoryMainController中編寫Controller層處理jsp請(qǐng)求。(3)在CategoryMainService中編寫Service層接口方法,并在CategoryMainServiceImpl中實(shí)現(xiàn)該方法。(4)在CategoryMainDao中編寫Dao層接口,并在CategoryMainDaoImpl中編寫實(shí)現(xiàn)類,完成對(duì)數(shù)據(jù)庫的查詢。(5)逐級(jí)返回查詢結(jié)果并根據(jù)不同結(jié)果做出相應(yīng)的處理。

11.5類別查詢■編程詳解

1.修改CategoryBranchDao和CategoryBranchDaoImpl添加selectAllBranchCategory方法,用于實(shí)現(xiàn)所有小類別展示的功能11.5類別查詢■編程詳解

2.修改CategoryBranchService,添加selectAllBranchCategory方法publicList<CategoryBranch>selectAllBranchCategory();和CategoryBranchServiceImplpublicList<CategoryBranch>selectAllBranchCategory(){returncategoryBranchDao.selectAllBranchCategory(); }11.5類別查詢■編程詳解

3.修改CategoryBranchController,添加selectAllBranchCategory方法,用于處理前端的查看所有小類別請(qǐng)求11.5類別查詢■編程詳解

4.修改CategoryMainController,編寫selectAllMainCategory方法,用于處理前端的查看所有大類別請(qǐng)求11.6類別添加■功能說明

類別添加包括大類別添加和小類別添加。以大類別添加為例講解開發(fā)過程。點(diǎn)擊左側(cè)菜單欄的“添加大類別”,彈出“添加大類別”頁面添加成功后頁面跳轉(zhuǎn)至大類別查詢頁面。11.6類別添加■流程分析與設(shè)計(jì)(1)點(diǎn)擊左側(cè)菜單欄的“添加大類別”,會(huì)發(fā)送請(qǐng)求到“manager/categoryMain/selectMian.do”,通過Controller添加標(biāo)識(shí)符并轉(zhuǎn)發(fā)到“addCategoryMain.jsp”頁面,在用戶完成表單填寫后,發(fā)送請(qǐng)求到“manager/categoryMain/insertMainCategory.do”。(2)根據(jù)url路徑,在CategoryMainController中編寫Controller層處理jsp請(qǐng)求。(3)在CategoryMainService中編寫Service層接口方法,并在CategoryMainServiceImpl中實(shí)現(xiàn)該方法。(4)在CategoryMainDao中編寫Dao層接口,并在CategoryMainDaoImpl中編寫實(shí)現(xiàn)類,完成對(duì)數(shù)據(jù)庫的查詢。11.7類別刪除■

功能說明

類別刪除包括大類別刪除和小類別刪除單擊“確定”按鈕完成刪除操作,返回大類別查詢頁面。11.7類別刪除■流程分析與設(shè)計(jì)

(1)在大類別列表中點(diǎn)擊右側(cè)的“刪除”按鈕,點(diǎn)擊確認(rèn)后會(huì)發(fā)送請(qǐng)求到“categoryMain/deleteMainCategory.do”。(2)根據(jù)url路徑,在CategoryMainController中編寫Controller層處理jsp請(qǐng)求。(3)在CategoryMainService中編寫Service層接口方法,并在CategoryMainServiceImpl中實(shí)現(xiàn)該方法。(4)在CategoryMainDao中編寫Dao層接口,并在CategoryMainDaoImpl中編寫實(shí)現(xiàn)類,完成對(duì)數(shù)據(jù)庫的查詢。11.7類別刪除■流程分析與設(shè)計(jì)

1.修改CategoryMainDao和CategoryMainDaoImpl11.7類別刪除■編程詳解

2.修改CategoryBranchDao和CategoryBranchDaoImpl11.7類別刪除■編程詳解

3.修改CategoryBranchService、CategoryMainService、CategoryBranchServiceImpl和CategoryMainServiceImpl11.7類別刪除■編程詳解

4.

修改CategoryBranchController和CategoryMainController第11章后臺(tái)商品管理模塊■小結(jié)

本章詳細(xì)介紹了E-Store后臺(tái)商品管理模塊的設(shè)計(jì)與實(shí)現(xiàn),完成了商品查詢,商品添加,商品修改,商品刪除,類別查詢,類別添加,類別刪除功能模塊的開發(fā)工作。JavaWeb應(yīng)用開發(fā)計(jì)算機(jī)與軟件學(xué)院第12章JSP技術(shù)■本章要點(diǎn):

JSP基本語法靜態(tài)包含與動(dòng)態(tài)包含隱藏對(duì)象Cookie對(duì)象Session對(duì)象JDBC的實(shí)現(xiàn)12.1

JSP語法JSP的全稱是JavaServerPage(Java服務(wù)器頁面)。JSP是由Sun公司倡導(dǎo)、許多其他公司參與建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。JSP頁面從形式上來看是在傳統(tǒng)的網(wǎng)頁HTML文件中加入Java程序片段和JSP標(biāo)簽。Servlet/JSP容器收到客戶端發(fā)出的請(qǐng)求時(shí),會(huì)執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML格式響應(yīng)給客戶端。12.1

JSP語法JSP與HTML、Servlet的不同靜態(tài)HTML頁面的請(qǐng)求過程:當(dāng)用戶請(qǐng)求訪問http://.../hello.htm,Web服務(wù)器會(huì)讀取本地文件系統(tǒng)中的hello.htm文件中的數(shù)據(jù),把它作為響應(yīng)的正文發(fā)送給用戶的瀏覽器。htm(或html文件)文件事先已經(jīng)存儲(chǔ)于web服務(wù)器端的文件系統(tǒng)中,無論客戶請(qǐng)求多少次這個(gè)文件,都會(huì)得到相同的內(nèi)容,也正因此稱之為“靜態(tài)”。12.1

JSP語法Servlet通過Java程序代碼來讀取客戶端的請(qǐng)求參數(shù),通過PrintWriter對(duì)象向客戶端發(fā)送動(dòng)態(tài)生成的HTML標(biāo)簽和數(shù)據(jù)。隨著客戶端不同的請(qǐng)求,Servlet類產(chǎn)生的HTML代碼不同,發(fā)送給客戶端的響應(yīng)頁面內(nèi)容也就不同。12.1

JSP語法在傳統(tǒng)的HTML文件中加入Java程序片段和JSP標(biāo)記,就構(gòu)成了JSP文件。從形式上看JSP更接近HTML頁面,它能夠和HTML文件一樣,直接表達(dá)網(wǎng)頁的外觀。但JSP頁面和HTML頁面有本質(zhì)的區(qū)別,HTML文檔是靜態(tài)文檔(內(nèi)容是不會(huì)變化的),而JSP和Servlet一樣,都能動(dòng)態(tài)生成HTML文檔。12.1

JSP語法JSP指令JSP指令語法形式為:<%@指令名

屬性1=“屬性值”屬性2=“屬性值”…%>,常用的指令有三種:page、include、taglib。Page指令用于指定編程語言、編碼方式和導(dǎo)入的軟件包等page指令的屬性12.1

JSP語法JSP指令page指令的屬性12.1

JSP語法JSP聲明在<%!%>內(nèi)聲明與JSP對(duì)應(yīng)的Servlet類的成員變量和方法。聲明語法塊會(huì)被翻譯到Servlet的類體中,即service()方法外面。所以聲明塊中不能直接編寫Java語句,除非是變量的聲明;JSP聲明語法塊中的代碼會(huì)按照先后順序被翻譯到Servlet類體中。JSP聲明對(duì)應(yīng)的Servlet

12.1

JSP語法Java表達(dá)式Java表達(dá)式的語法為<%=%>,使用它可以將表達(dá)式的值輸出到網(wǎng)頁上,即可以將java變量/表達(dá)式的值嵌入到網(wǎng)頁文本中。語法:<%=變量或表達(dá)式%>例如:<%=newDate()%>JSP引擎在翻譯腳本表達(dá)式時(shí),會(huì)將程序數(shù)據(jù)轉(zhuǎn)成字符串,然后在相應(yīng)的位置用out.print()將數(shù)據(jù)輸出給客戶端,上面的的例子會(huì)翻譯成out.print(newDate());。12.2靜態(tài)包含與動(dòng)態(tài)包含靜態(tài)包含與動(dòng)態(tài)包含靜態(tài)包含在JSP文件中可以使用include指令來包含其他文件的內(nèi)容,被包含的文件可以是HTML也可以是JSP。語法形式為:<%@includefile=“目標(biāo)頁面的URL”%>靜態(tài)包含發(fā)生在解析JSP源文件的階段,被包含的目標(biāo)文件內(nèi)容會(huì)被原封不動(dòng)地添加到JSP源文件中,然后再對(duì)融合過的JSP源文件進(jìn)行翻譯和編譯。如果客戶端訪問a.jsp的時(shí)候,服務(wù)器一定會(huì)檢查a.jsp是否是發(fā)生了修改,是否需要重新的翻譯和編譯。但是不一定會(huì)檢測被包含的b.jsp是否發(fā)生了變化,因此如果b.jsp發(fā)生了變化,最好要經(jīng)過重新的翻譯和編譯過程,才能保證結(jié)果是最新的。因此靜態(tài)包含主要用于包含不常發(fā)生變動(dòng)的頁面。12.2靜態(tài)包含與動(dòng)態(tài)包含靜態(tài)包含與動(dòng)態(tài)包含動(dòng)態(tài)包含使用include操作可以包含靜態(tài)或者動(dòng)態(tài)文件,如果包含進(jìn)來的是動(dòng)態(tài)文件,這個(gè)被包含的動(dòng)態(tài)文件也會(huì)被JSP容器執(zhí)行。語法形式為:<jsp:includepage=“目標(biāo)頁面url”>動(dòng)態(tài)包含發(fā)生在運(yùn)行JSP對(duì)應(yīng)的servlet類的階段,被包含的JSP目標(biāo)文件的響應(yīng)結(jié)果被包含到JSP源文件的響應(yīng)結(jié)果中。在servlet中,相當(dāng)于此句:request.getRequestDispatcher(“目標(biāo)url").include(request,response);。12.2靜態(tài)包含與動(dòng)態(tài)包含

無論是靜態(tài)還是動(dòng)態(tài)include,源組件和被包含組件,均使用同一個(gè)request對(duì)象和response對(duì)象。源組件請(qǐng)求中存儲(chǔ)的參數(shù)和屬性,目標(biāo)組件中均能得到。靜態(tài)包含中,被包含組件的代碼都被融合在源組件代碼中,最終產(chǎn)生一個(gè)servlet源文件,兩者的代碼均在servlet的sevice方法中,自然是共用方法的參數(shù)request和response。而動(dòng)態(tài)包含,在調(diào)用被包含組件的service方法時(shí),把源組件的request和response對(duì)象也傳遞給了service(類似forward),因此兩者也是共用request和response。靜態(tài)包含中,源組件和被包含組件不能有同名變量(塊級(jí)變量除外),因?yàn)樗鼈冏罱K都在同一個(gè)service方法里,方法里的局部變量不能重名。12.3隱藏對(duì)象簡單的說,JSP中的隱含對(duì)象,就是無需定義,就可以在JSP文件中直接使用的那些對(duì)象,例如request。下面是一個(gè)普通的JSP頁面文件,該文件被第一次訪問時(shí),Web服務(wù)器將對(duì)其進(jìn)行轉(zhuǎn)譯,將它翻譯成一個(gè)servlet類。12.3隱藏對(duì)象JSP的隱藏對(duì)象12.4

Cookie對(duì)象如何在用戶首次訪問網(wǎng)站的任一組件時(shí),給用戶一個(gè)唯一的id?當(dāng)用戶后續(xù)訪問此網(wǎng)站下其它組件時(shí),如何保證瀏覽器把這個(gè)id號(hào)提交給服務(wù)器?為了維護(hù)用戶和用戶行為之間的關(guān)聯(lián)性,主要有下面幾種方法:URL重寫技術(shù)、隱藏表單技術(shù)、Cookie技術(shù)。12.4

Cookie對(duì)象URL重寫技術(shù)將會(huì)話信息以請(qǐng)求參數(shù)的形式嵌入到服務(wù)器發(fā)出的每個(gè)超鏈接中。這樣每次用戶點(diǎn)擊超鏈接的時(shí)候,都會(huì)把這個(gè)參數(shù)發(fā)給服務(wù)器,服務(wù)器就能區(qū)分用戶了。為了保持URL的簡潔,通常這個(gè)嵌在URL中的會(huì)話信息是一個(gè)由服務(wù)器生成的代表客戶的唯一性的ID號(hào),在URL的表現(xiàn)形式上,它通常是作為URL請(qǐng)求參數(shù)的形式出現(xiàn)的,如:

http://.../servlet/Rewritten?sessionid=67888URL重寫技術(shù)的優(yōu)點(diǎn):用戶是匿名的;在Web服務(wù)器實(shí)現(xiàn)上得到普遍的支持。URL重寫技術(shù)的缺點(diǎn):由于會(huì)話信息作為查詢參數(shù)在URL上是可見的,因此會(huì)話存在一定的安全隱患;需要對(duì)所有動(dòng)態(tài)生成的URL進(jìn)行重寫,代碼比較繁瑣;只能用于動(dòng)態(tài)產(chǎn)生的文檔如Servlet和JSP頁面,而不能用于HTML文檔。12.4

Cookie對(duì)象隱藏表單技術(shù)HTML表單允許把一些字段信息隱藏起來,而在瀏覽器上不被顯示出來,但是當(dāng)表單提交時(shí),這種隱藏表單元素的信息可以被作為參數(shù)提交。<inputtype=“hidden”name=“***”value=”…”>將用戶的會(huì)話信息(例如唯一的ID號(hào))寫在隱藏表單里,用戶看不見,但是當(dāng)表單提交時(shí),信息會(huì)作為參數(shù)提交給服務(wù)器。服務(wù)器可以利用request對(duì)象的getParameter()方法讀取出來。同重寫URL技術(shù)相比,隱藏表單技術(shù)是利用表單來傳遞會(huì)話信息,而URL重寫技術(shù)是使用GET請(qǐng)求參數(shù)來傳遞會(huì)話信息(例如超鏈接)。除了這點(diǎn),二者并無根本區(qū)別。它們都屬于非持久化會(huì)話方案,都使用頁面動(dòng)態(tài)修改技術(shù),因此不支持靜態(tài)HTML,代碼編寫方式很相似。12.4

Cookie對(duì)象Cookie技術(shù)Cookie可以隨著請(qǐng)求和響應(yīng)在瀏覽器和服務(wù)器之間傳遞。在首次訪問Web服務(wù)器資源時(shí),服務(wù)器將Cookie連同響應(yīng)發(fā)送到客戶端保存起來??蛻舳嗽俅卧L問同一個(gè)Web服務(wù)器時(shí),主動(dòng)查找與服務(wù)器匹配的Cookie并隨請(qǐng)求發(fā)往服務(wù)器。服務(wù)器根據(jù)Cookie決定響應(yīng)。服務(wù)端使用下面語句創(chuàng)建Cookie,并把Cookie添加到響應(yīng)中,發(fā)往客戶端瀏覽器。

Cookiecookie=newCookie(“cookie名”,“cookie值”);

response.addCookie(cookie);當(dāng)瀏覽器再次訪問該網(wǎng)站時(shí),瀏覽器會(huì)將此網(wǎng)站的Cookie隨著請(qǐng)求發(fā)送給網(wǎng)站服務(wù)器(訪問百度/搜狐時(shí)把百度/搜狐Cookie發(fā)給百度服務(wù)器),瀏覽器會(huì)找到對(duì)應(yīng)的Cookie進(jìn)行發(fā)送。12.4

Cookie對(duì)象Cookie的傳遞形式Cookie屬性12.4

Cookie對(duì)象使用Cookie維護(hù)會(huì)話的工作過程如下:1.用戶第一次訪問某網(wǎng)站時(shí),服務(wù)器生成一個(gè)Cookie,格式為:“Cookie的名字:客戶的ID號(hào)”,并把這個(gè)Cookie隨著響應(yīng)發(fā)送給客戶端。例如:baidu:13f4a4b4c21b2.客戶端瀏覽器存儲(chǔ)該Cookie,當(dāng)用戶再次訪問同一個(gè)Web服務(wù)器時(shí),瀏覽器會(huì)檢查本地的Cookie,并將其原樣發(fā)送給Web服務(wù)器。3.服務(wù)器從客戶發(fā)回的Cookie中取出客戶ID號(hào),并以此為索引獲得該客戶的會(huì)話信息,并進(jìn)行維護(hù)處理。12.4

Cookie對(duì)象利用Cookie維護(hù)會(huì)話的優(yōu)點(diǎn)有:目前大多數(shù)瀏覽器都可以識(shí)別和處理來自Web服務(wù)器的Cookie,因此兼容性較好。因?yàn)镃ookie可以保存在客戶端的小文件中,因此Cookie支持持久性的維持會(huì)話信息,哪怕瀏覽器關(guān)閉也可以維護(hù)。利用Cookie維護(hù)會(huì)話的缺點(diǎn)有:Cookie的名聲不太好,個(gè)別網(wǎng)站可能在用戶不知情的情況下采集客戶個(gè)人信息。用戶可以禁用Cookie。12.5

Session對(duì)象URL重寫、隱藏表單、Cookie,都需要程序員進(jìn)行大量的程序編寫,比較繁瑣。ServletAPI規(guī)范定義了一個(gè)HttpSession接口,允許Servlet容器針對(duì)每一個(gè)會(huì)話建立一個(gè)HTTP會(huì)話對(duì)象(即HttpSession對(duì)象),該會(huì)話對(duì)象將會(huì)自動(dòng)被賦予一個(gè)唯一的“會(huì)話編號(hào)”(sessionID),而無需程序員編程實(shí)現(xiàn)。同時(shí),HttpSession對(duì)象提供了一組存取會(huì)話屬性的方法,這樣就可以很容易的在服務(wù)器端存放用戶會(huì)話狀態(tài)。12.5

Session對(duì)象Session對(duì)象與Cookie的聯(lián)系內(nèi)置對(duì)象session和cookie的聯(lián)系為:session對(duì)象由servlet容器自動(dòng)創(chuàng)建,并賦予一個(gè)唯一的編號(hào)。這個(gè)編號(hào)隨著一個(gè)名為“JSESSIONID”的Cookie發(fā)送給客戶端。如圖所示。session對(duì)象的生命周期和作用范圍和名為“JSESSIONID”的Cookie緊密聯(lián)系在一起。服務(wù)器根據(jù)Cookie查找Session對(duì)象,如圖所示。通過ID號(hào)123456找到Session對(duì)象-A,通過ID號(hào)654321找到Session對(duì)象-B。12.5

Session對(duì)象Session對(duì)象的生存期session對(duì)象默認(rèn)的過期時(shí)間是1800秒,也就是30分鐘。過期指的是連續(xù)n分鐘沒有訪問過應(yīng)用內(nèi)的任意組件。超過這個(gè)時(shí)間后,服務(wù)端的session對(duì)象會(huì)被銷毀??梢詾閟ession對(duì)象設(shè)置過期的時(shí)間,下面代碼設(shè)置為30秒,只要客戶端有30秒鐘未訪問該應(yīng)用的任何組件,session過期,服務(wù)器會(huì)銷毀該session對(duì)象。session.setMaxInactiveInternal(30);與Session對(duì)象關(guān)聯(lián)的JSSESSIONIDcookie是存于瀏覽器進(jìn)程中的(maxAge=-1),瀏覽器關(guān)閉就會(huì)失效。如果瀏覽器重啟后,再訪問同一服務(wù)器,將不會(huì)發(fā)送此cookie。12.5

Session對(duì)象Session對(duì)象的重建session對(duì)象重建的場景有瀏覽器關(guān)閉導(dǎo)致session對(duì)象重建和session過期重建。當(dāng)瀏覽器首次訪問服務(wù)器時(shí),未攜帶任何cookie,服務(wù)器為其生成一個(gè)JSESSIONID為123456的cookie,并通過response對(duì)象返回給瀏覽器。當(dāng)重啟瀏覽器,瀏覽器端保存的JSESSIONID沒有了,123456Session對(duì)象還在服務(wù)器,但是由于客戶端丟失了id,已經(jīng)無法找到匹配的cookie,造成session需要重建。服務(wù)器發(fā)現(xiàn)請(qǐng)求里沒有JSESSIONIDcookie,認(rèn)為這是首次訪問的新會(huì)話,又創(chuàng)建了一個(gè)新session對(duì)象,并賦予一個(gè)新id65432112.5

Session對(duì)象當(dāng)用戶n分鐘沒有訪問過應(yīng)用的任何頁面,Session會(huì)過期重建。如圖所示。當(dāng)瀏覽器首次訪問服務(wù)器時(shí),未攜帶任何Cookie,服務(wù)器為其生成一個(gè)JSESSIONID為123456的Cookie,并通過response對(duì)象返回給瀏覽器。當(dāng)用戶n分鐘沒有訪問過應(yīng)用的任何頁面后,服務(wù)器發(fā)現(xiàn)請(qǐng)求里的id號(hào)123456,但是這個(gè)id號(hào)對(duì)應(yīng)的seesion對(duì)象已經(jīng)不存在了,又創(chuàng)建了一個(gè)新session對(duì)象。12.5

Session對(duì)象向HttpSession對(duì)象中存取屬性在servlet中,可以使用HttpServletRequest對(duì)象獲得HttpSession對(duì)象。publicvoiddoPost(HttpServletRequestrequest, HttpServletResponseresponse){HttpSessionsession=request.getSession();}在JSP頁面中可以直接使用session對(duì)象,該session對(duì)象就是HttpSession的一個(gè)實(shí)例。可以用setAttribute方法和getAttribute方法在session對(duì)象中存取屬性,存入session對(duì)象中的屬性,可以在會(huì)話范圍內(nèi)被共享。使用setAttribute向session中存儲(chǔ)屬性(attribute)。

session.setAttribute(“c”,newCircle(5));使用getAttribute從session中按屬性名取得屬性值:Circlecircle=(Circle)session.getAttribute(“c”);12.6隱含對(duì)象request對(duì)象12.6隱含對(duì)象response對(duì)象12.6隱含對(duì)象response對(duì)象12.6隱含對(duì)象application對(duì)象12.6隱含對(duì)象pageContext對(duì)象12.7

JDBCJDBC,全稱為JavaDataBaseConnectivity,它是一個(gè)面向?qū)ο蟮膽?yīng)用程序接口(API),是由Java編程語言編寫的類及接口組成,同時(shí)它為程序開發(fā)人員提供了一組用于實(shí)現(xiàn)對(duì)數(shù)據(jù)庫訪問的JDBCAPI,并支持SQL語言。利用JDBC可以將JAVA代碼連接到Oracle、DB2、SQLServer、MySQL等數(shù)據(jù)庫,從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫中的操作。12.7

JDBCJDBCAPIJDBC中常用類和接口有連接到數(shù)據(jù)庫(Connection)、建立操作指令(Statement)、獲得查詢結(jié)果(ResultSet)等。驅(qū)動(dòng)程序管理類(DriverManager):DriverManager類是JDBC的管理類,作用于用戶和驅(qū)動(dòng)程序之間。它跟蹤可用的驅(qū)動(dòng)程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動(dòng)程序之間建立連接。負(fù)責(zé)加載各種不同驅(qū)動(dòng)程序(Driver),并根據(jù)不同的請(qǐng)求,向調(diào)用者返回相應(yīng)的數(shù)據(jù)庫連接(Connection)。不同的數(shù)據(jù)庫(sqlserver2000,Sqlserver2005,Oracle,mysql,Sybase等)驅(qū)動(dòng)不同,由數(shù)據(jù)庫廠商提供,DriverManager加載驅(qū)動(dòng)的代碼也有區(qū)別。Connectioncon=DriverManager.getConnection(url,"sa","123");12.7

JDBC常見數(shù)據(jù)庫驅(qū)動(dòng)字符串12.7

JDBC數(shù)據(jù)庫連接類(Connection):Connection對(duì)象代表與數(shù)據(jù)庫的連接。連接過程包括所執(zhí)行的SQL語句和在該連接上返回的結(jié)果。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫有一個(gè)或多個(gè)連接,或者可與很多數(shù)據(jù)庫有連

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論