




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單元3購物網(wǎng)站商品展示與查詢模塊設(shè)計(JSP+Servlet+JDBC)
對于一個基于數(shù)據(jù)庫開發(fā)的Web應(yīng)用系統(tǒng),通常將系統(tǒng)相關(guān)的數(shù)據(jù)存放在后臺的數(shù)據(jù)庫中,Web頁面都需要訪問數(shù)據(jù)庫,即從數(shù)據(jù)表中讀取數(shù)據(jù),向數(shù)據(jù)表中新增記錄或者修改、刪除數(shù)據(jù)表中的數(shù)據(jù)記錄。 JavaWeb應(yīng)用程序訪問數(shù)據(jù)庫,首先需要實現(xiàn)JSP應(yīng)用程序與數(shù)據(jù)庫的連接,JDBC(JavaDataBaseConnectivity,數(shù)據(jù)庫連接)是Java程序連接關(guān)系數(shù)據(jù)庫的標準,由一組用Java語言編寫的類和接口組成。
對Java程序開發(fā)者來說,JDBC是一套用于執(zhí)行SQL語句的JavaAPI,通過調(diào)用JDBC就可以在獨立于后臺數(shù)據(jù)庫的基礎(chǔ)上完成對數(shù)據(jù)庫的操作;對數(shù)據(jù)庫廠商而言,JDBC只是接口模型,數(shù)據(jù)庫廠商開發(fā)相應(yīng)的JDBC驅(qū)動程序,就可以使數(shù)據(jù)庫通過Java語言進行操作了。【知識梳理】1.JDBC的實現(xiàn)原理 JDBC主要通過java.sql包提供的API供Java程序開發(fā)者使用,驅(qū)動程序廠商則通過實現(xiàn)這些接口封裝各種對數(shù)據(jù)庫的操作。 JDBC為多種關(guān)系數(shù)據(jù)庫提供了統(tǒng)一訪問接口,它可以向相應(yīng)數(shù)據(jù)庫發(fā)送SQL調(diào)用,將Java語言和JDBC結(jié)合起來,程序員只需編寫一次程序就可以讓它在任何平臺上運行。 JDBC可以說是Java程序開發(fā)者和數(shù)據(jù)庫廠商之間的橋梁,Java程序開發(fā)者和數(shù)據(jù)庫廠商可以在統(tǒng)一的JDBC標準之下,負責(zé)各自的工作范圍。
同時,任何一方的改變對另一方都不會造成顯著的影響。 JDBC的作用概括起來包括以下幾方面:
①建立與數(shù)據(jù)庫的連接;
②向數(shù)據(jù)庫發(fā)出查詢請求;
③處理數(shù)據(jù)庫的返回結(jié)果。2.使用JDBC訪問數(shù)據(jù)庫(1)注冊與加載連接數(shù)據(jù)庫的驅(qū)動程序(2)創(chuàng)建與數(shù)據(jù)庫的連接(3)通過連接對象獲取指令對象(4)使用指令對象執(zhí)行SQL語句(5)獲取結(jié)果集,且對結(jié)果集做相應(yīng)處理(6)釋放資源3.JDBC的DriverManager類 DriverManager類是java.sql包中用于管理數(shù)據(jù)庫驅(qū)動程序的類,根據(jù)數(shù)據(jù)庫的不同,注冊、裝載相應(yīng)的JDBC驅(qū)動程序,JDBC驅(qū)動程序負責(zé)直接連接相應(yīng)的數(shù)據(jù)庫。
在DriverManager類中存有已注冊的驅(qū)動程序清單,當(dāng)調(diào)用DriverManager類的方法getConnection時,它將檢查清單中的所有驅(qū)動程序,一直找到可與URL中指定的數(shù)據(jù)庫進行連接的驅(qū)動程序為止。只要加載了合適的驅(qū)動程序,DriverManager對象就開始管理連接。4.JDBC的Connection接口 Connection接口負責(zé)連接數(shù)據(jù)庫并完成傳送數(shù)據(jù)的任務(wù),與特定數(shù)據(jù)源建立連接是進行數(shù)據(jù)庫訪問操作的前提。
一個Connection對象代表與數(shù)據(jù)庫的一個連接。
連接過程包括執(zhí)行的SQL語句和在該連接上所返回的結(jié)果。
只有在成功建立連接的前提下,SQL語句才可能被傳遞到數(shù)據(jù)庫,最終被執(zhí)行并返回結(jié)果。 Connection接口的主要方法如下所示。
①StatementcreateStatement():創(chuàng)建一個Statement對象。
②StatementcreateStatement(intresultSetType,intresultSetConcurrency):創(chuàng)建一個Statement對象,它將生成具有特定類型和并發(fā)性的結(jié)果集。
③voidcommit():提交對數(shù)據(jù)庫的改變并釋放當(dāng)前持有的數(shù)據(jù)庫的鎖。
④voidrollback():回滾當(dāng)前事務(wù)中所有改變并釋放當(dāng)前連接持有的數(shù)據(jù)庫的鎖。
⑤booleanisClose():判斷連接是否已關(guān)閉。
⑥booleanisReadOnly():判斷連接是否為只讀模式。
⑦voidsetReadOnly():設(shè)置連接的只讀模式。
⑧voidclearWarning():清除連接的所有警告信息。
⑨voidclose():立即釋放連接對象的數(shù)據(jù)庫和JDBC資源。5.JDBC的Statement接口 Statement接口由Connection接口產(chǎn)生,用于在已經(jīng)建立的連接的基礎(chǔ)上向數(shù)據(jù)庫發(fā)送SQL語句,包括查詢、新增、修改和刪除等操作。 Statement接口提供了3種執(zhí)行SQL語句的方法:executeQuery、executeUpdate和execute。
使用哪一個方法由SQL語句所產(chǎn)生的內(nèi)容決定。(1)ResultSetexecuteQuery(StringstrSql)
這種方法的執(zhí)行結(jié)果將返回單個結(jié)果集,主要用于在Statement對象中執(zhí)行SQL查詢語句,并返回該查詢生成的ResultSet對象。(2)intexecuteUpdate(StringstrSql)
這種方法用于執(zhí)行Insert、Update、Delete和SQLDDL(數(shù)據(jù)定義語言)語句,返回一個整數(shù)值,表示執(zhí)行SQL語句影響的數(shù)據(jù)行數(shù)。(3)booleanexecute(Stringsql)
這種方法是執(zhí)行SQL語句調(diào)用的一般方法,允許用戶執(zhí)行SQL數(shù)據(jù)定義命令,然后獲取一個布爾值,顯示是否返回了ResultSet對象。用于執(zhí)行返回多個結(jié)果集、多個更新結(jié)果或兩者組合的語句。6.JDBC的ResultSet接口 ResultSet接口負責(zé)保存Statement執(zhí)行后返回的查詢結(jié)果。 ResultSet對象實際上是一個由查詢結(jié)果數(shù)據(jù)構(gòu)成的表,在ResultSet中隱含著一個指針,利用這個指針移動數(shù)據(jù)行,可以取得所要的數(shù)據(jù),或者對數(shù)據(jù)進行簡單的操作。 ResultSet接口的常用方法如下所示。(1)voidfirst():將記錄指針移動到記錄集的第一行。(2)voidlast():將記錄指針移動到記錄集的最后一行。(3)voidprevious():將記錄指針從當(dāng)前位置向前移動一行。(4)voidnext():將記錄指針從當(dāng)前位置向后移動一行。(5)voidbeforeFistr():將記錄指針移動到記錄集的第一行之前。(6)voidafterLast():將記錄指針移動到記錄集的最后一行之后。(7)booleanabsolute(introw):將記錄指針移動到記錄集中給定編號的行。(8)booleanisFirst():如果記錄指針位于記錄集的第一行,則返回true,否則返回false。(9)booleanisLast():如果記錄指針位于記錄集的最后一行,則返回true,否則返回false。(10)booleanisBeforFirst():如果記錄指針位于記錄集的第一行之前,則返回true。(11)booleanisAfterLast():如果記錄指針位于記錄集的最后一行之后,則返回true。(12)intgetRow():獲取當(dāng)前行的編號。7.JDBC的PreparedStatement接口 PreparedStatement接口繼承自Statement接口,PreparedStatement實例包含已編譯的SQL語句,其執(zhí)行速度要快于Statement對象。8.EL表達式語言簡介 EL(ExpressionLanguage,EL)表達式語言是JSP2.0中引入的一種計算和輸出Java對象的簡單語言,可以簡化在JSP開發(fā)中對對象的引用,從而規(guī)范頁面代碼,增強程序的可讀性和可維護性。
如今EL表達式是一項成熟、標準的技術(shù),只要安裝的Web服務(wù)器能夠支持Servlet2.4/JSP2.0,就可以在JSP頁面中直接使用EL表達式。9.OGNL(對象圖導(dǎo)航語言)簡介 OGNL(Object-GraphNavigationLanguage,對象圖導(dǎo)航語言),它是一種功能強大的表達式語言(ExpressionLanguage,EL),通過它簡單一致的表達式語法,可以存取對象的任意屬性,調(diào)用對象的方法,遍歷整個對象的結(jié)構(gòu)圖,實現(xiàn)字段類型轉(zhuǎn)化等功能。
它使用相同的表達式去存取對象的屬性,這樣可以更好地取得數(shù)據(jù)。 OGNL是通常要結(jié)合Struts2的標簽一起使用,主要是#、%和$這3個符號的使用。(1)#符號 #符號的用途一般有以下3種。
①訪問OGNL上下文和Action上下文,#相當(dāng)于ActionContext.getContext(),#session.msg表達式相當(dāng)于ActionContext.getContext().getSession().getAttribute("msg")。 ActionContext常用的屬性如下所示: parameters包含當(dāng)前HTTP請求參數(shù)的Map,#parameters.id[0]相當(dāng)于request.getParameter
("id").get(0)。 request包含當(dāng)前HttpServletRequest的屬性的Map,#request.userName相當(dāng)于request.get
Attribute("userName")。 session包含當(dāng)前HttpSession的屬性的Map,#session.userName相當(dāng)于session.getAttribute
("userName")。 application包含當(dāng)前應(yīng)用的ServletContext的屬性的Map,#application.userName相當(dāng)于application.getAttribute("userName")。
②用于過濾和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#=='
pla1'}.{age}[0]。
③用來構(gòu)造Map,如#{'foo1':'bar1','foo2':'bar2'}。(2)%符號 %符號的用途是在標志的屬性為字符串類型時,計算OGNL表達式的值,這個類似js中的eval。(3)$符號 $符號主要有兩個方面的用途。
其一是在國際化資源文件中,引用OGNL
表達式,例如,國際化資源文件中的代碼:reg.agerange=年齡必須在${min}同${max}之
間。其二是在Struts2框架的配置文件中引用OGNL表達式?!緫?yīng)用技巧】
本單元的應(yīng)用技巧如下所示。
①使用JDBC訪問數(shù)據(jù)庫。
②EL表達式的正確使用。
③實體對象及其方法的正確使用?!经h(huán)境創(chuàng)設(shè)】 ①下載并安裝數(shù)據(jù)庫管理系統(tǒng)SQLServer2008。
②下載MicrosoftSQLServer2008JDBCDriver,即sqljdbc4.jar。
③準備開發(fā)Web應(yīng)用程序所需的圖片文件和JavaScript文件。
④在MicrosoftSQLServer2008中創(chuàng)建數(shù)據(jù)庫eshop,并在該數(shù)據(jù)庫中創(chuàng)建“商品數(shù)據(jù)表”、“商品類型表”和“用戶表”,其結(jié)構(gòu)信息分別如表3-1、表3-2和表3-3所示。字段名數(shù)據(jù)類型字段名數(shù)據(jù)類型商品IDint售出數(shù)量int商品編碼nvarchar(10)圖片地址nvarchar(100)商品名稱nvarchar(100)大圖片地址nvarchar(100)型號參數(shù)nvarchar(100)上架時間smalldatetime價格money是否推薦bit優(yōu)惠價格money商品類型int庫存數(shù)量int表3-1“商品數(shù)據(jù)表”的結(jié)構(gòu)信息字段名數(shù)據(jù)類型字段名數(shù)據(jù)類型類型IDint層次int類型名稱nvarchar(20)父類IDint表3-2“商品類型表”的結(jié)構(gòu)信息字段名數(shù)據(jù)類型字段名數(shù)據(jù)類型用戶IDintEmailnvarchar(50)用戶名nvarchar(30)用戶類型nvarchar(20)密碼nvarchar(10)頭像nvarchar(50)表3-3“用戶表”的結(jié)構(gòu)信息
⑤在計算機的【資源管理器】中創(chuàng)建文件夾unit03。
⑥啟動Eclipse,設(shè)置工作空間為unit03,然后進入Eclipse的開發(fā)環(huán)境。
⑦在Eclipse集成開發(fā)環(huán)境中配置與啟動Tomcat服務(wù)器。
⑧在Eclipse集成開發(fā)環(huán)境中新建動態(tài)Web項目project03。
⑨將文件sqljdbc4.jar拷貝到Web項目project03的文件夾“WebContent\WEB-INF\lib”下,并在Eclipse集成開發(fā)環(huán)境的“項目資源管理器”刷新Web項目project03。
⑩在Eclipse集成開發(fā)環(huán)境中創(chuàng)建包package03。【任務(wù)描述】【任務(wù)3-1】創(chuàng)建JSP頁面task3-1.jsp,并在頁面中動態(tài)顯示商品數(shù)據(jù)
①在Web項目project03中創(chuàng)建JSP頁面task3-1.jsp。
②在JSP頁面中通過JDBC連接SQLServer2008數(shù)據(jù)庫“eshop”。
③將“商品數(shù)據(jù)表”中前5條記錄的商品名稱、型號參數(shù)、價格及圖片顯示在頁面中?!救蝿?wù)3-2】使用JSP+Servlet+JavaBean獲取數(shù)據(jù),并在頁面中動態(tài)顯示商品數(shù)據(jù)
①創(chuàng)建名為“GoodsInfo”的類,該類是一個JavaBean,在該類定義多個屬性及相應(yīng)的getXXX()與setXXX()方法。
②創(chuàng)建名為“ConnDB”的類,該類主要用于連接數(shù)據(jù)庫,執(zhí)行數(shù)據(jù)查詢和關(guān)閉數(shù)據(jù)庫的連接。
③創(chuàng)建名為“GoodsServlet”的Servlet類,該類主要實現(xiàn)查詢操作,從數(shù)據(jù)表中獲取所需的數(shù)據(jù)。
④創(chuàng)建JSP頁面goodsSearch3-2.jsp,在該頁面主要用于輸出從數(shù)據(jù)表查詢獲取的商品數(shù)據(jù)。
⑤創(chuàng)建JSP頁面task3-2.jsp,該頁面用于重定向到Servlet映射地址GoodsServlet,并傳遞keywords參數(shù)。圖3-1在頁面goodsSearch3-2中動態(tài)顯示商品數(shù)據(jù)的流程【任務(wù)實施】【網(wǎng)頁結(jié)構(gòu)設(shè)計】
本單元將會創(chuàng)建多個網(wǎng)頁,其主體結(jié)構(gòu)的HTML代碼如表3-4所示。行號HTML代碼010203040506070809101112<divid="filterPage"><!--公用頭部導(dǎo)航--><navclass="navnav-subprw"></nav><!--用于取出搜索關(guān)鍵字--><divclass="search-boxw"style="position:relative;top:0;margin-top:10px;"></div><divid="resultMsg"class="wf14search-result"></div><divclass="search-listw"><ulclass="my-order-listpro-listlist-ui-c"id="productList"><li><divclass="wbox"><divclass="pro-img"></div><divclass="pro-info"></div>表3-4單元3網(wǎng)頁主體結(jié)構(gòu)的HTML代碼行號HTML代碼1314151617181920212223242526
</div><spanclass="arrow"></span></li></ul></div><divid="more_loadw"></div><divid="BottomSearchDiv"class="search-boxwmt10"></div><!--公用尾部--><footerclass="footerw"><divclass="tr"></div><ulclass="list-ui-afoot-listtc"></ul><divclass="tccopyright"></div></footer></div>續(xù)表【網(wǎng)頁CSS設(shè)計】
在DreamweaverCS6開發(fā)環(huán)境中創(chuàng)建兩個CSS文件:base.css和view.css,base.css文件中主要的CSS代碼如表3-5所示,view.css文件中主要的CSS代碼如表3-6所示。
這兩個CSS文件具體的代碼見本書提供的電子資源。【靜態(tài)網(wǎng)頁設(shè)計】行號CSS代碼行號CSS代碼0102030405060708091011121314151617181920212223242526.search-box{position:absolute;height:29px;width:100%;top:4px;}.search-boxinput[type="search"]{height:29px!important;line-height:27px;font-size:14px;border-radius:29px;padding:030px05px;width:90%!important;margin:0auto;border:1pxsolid#fff;border-bottom:none;background:#fff;color:#999;-webkit-box-sizing:border-box;overflow:hidden;position:absolute;left:5%;z-index:10;}.search-box.search-btn{position:absolute;3637383940414243444546474849505152535455565758596061.list-ui-cli{border-bottom:1pxsolid#ccc;padding:2px0;}.list-ui-clip{margin:2px0;}.wbox{display:-webkit-box;}.pro-list{font-size:14px;}.pro-listli{position:relative;padding:10px0;}.pro-listli.pro-img{margin-right:10px;}.pro-listli.pro-imga{display:block;height:100%;}表3-5
base.css文件的主要CSS代碼行號CSS代碼行號CSS代碼272829303132333435
width:17px;height:17px;right:22px;top:6px;background:url(../images/seacher.png)no-repeat00;z-index:11;background-size:contain;}626364656667686970.pro-listli.pro-info{overflow:hidden;-webkit-box-flex:1;}.pro-listli.pro-infop{margin-bottom:5px;width:90%;}續(xù)表行號CSS代碼行號CSS代碼010203040506070809101112#filterPage{box-shadow:5px05px#ccc;position:relative;z-index:100;}.search-result{height:29px;line-height:29px;text-indent:10;text-align:center;display:block;}131415161718192021222324.pro-listli.arrow{display:block;position:absolute;right:0px;top:52px;width:12px;height:15px;background-size:contain;background-image:url(../images/arrow1.png);background-repeat:no-repeat;}表3-6
view.css文件的主要CSS代碼圖3-2網(wǎng)頁unit03.html的瀏覽效果【網(wǎng)頁功能實現(xiàn)】【任務(wù)3-1】創(chuàng)建JSP頁面task3-1.jsp,并在頁面中動態(tài)顯示商品數(shù)據(jù)(1)創(chuàng)建JSP頁面task3-1.jsp
在項目project03中創(chuàng)建一個JSP頁面task3-1.jsp。(2)引入必要的包及相關(guān)類
首先編寫以下代碼引入必要的包及相關(guān)類:<%@pageimport="java.sql.Connection"%><%@pageimport="java.sql.*"%>(3)引入所需的CSS樣式文件
在JSP頁面task3-1.jsp中<head>和</head>之間編寫代碼,引入所需的CSS樣式文件和JavaScript文件。(4)編寫代碼連接與訪問數(shù)據(jù)庫
在JSP頁面task3-1.jsp中編寫連接與訪問數(shù)據(jù)庫的JSP代碼,代碼如表3-11所示。(5)編寫代碼顯示從數(shù)據(jù)表獲取的商品數(shù)據(jù)(6)運行程序輸出結(jié)果行號JSP代碼01020304050607
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療軟件購買合同范本
- 縣城餐飲轉(zhuǎn)讓合同范本
- 三個合伙購房合同范例
- 廚師保密協(xié)議合同范本
- 原油供銷合同范例
- 合伙創(chuàng)業(yè)辦廠合同范本
- 賣賣布合同范本
- 加工磚頭銷售合同范本
- 人保車險客戶專員合同范本
- 分期購買釘鞋合同范本
- 店鋪商鋪出租協(xié)議書
- 小學(xué)生網(wǎng)絡(luò)安全教育
- 2024年中國作家協(xié)會所屬單位招聘考試真題
- 2025年東方電氣長三角(杭州)創(chuàng)新研究院限公司第二批招聘高頻重點提升(共500題)附帶答案詳解
- 2025山東能源集團中級人才庫選拔高頻重點提升(共500題)附帶答案詳解
- 高血壓性視網(wǎng)膜病變
- 2025山東能源集團中級人才庫選拔管理單位筆試遴選500模擬題附帶答案詳解
- CNAS-R03:2023申訴、投訴和爭議處理規(guī)則
- 四大名著之紅樓夢飲食文化
- 員工互評表(含指標)
- 2024年浙江省中考社會(開卷)真題卷及答案解析
評論
0/150
提交評論