教學(xué)課件·JSP程序設(shè)計(jì)_第1頁(yè)
教學(xué)課件·JSP程序設(shè)計(jì)_第2頁(yè)
教學(xué)課件·JSP程序設(shè)計(jì)_第3頁(yè)
教學(xué)課件·JSP程序設(shè)計(jì)_第4頁(yè)
教學(xué)課件·JSP程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩250頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1.1 動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)第1章JSP概述動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)的原理是:將使用不同技術(shù)編寫(xiě)的動(dòng)態(tài)頁(yè)面保存在Web服務(wù)器中,當(dāng)客戶端用戶向Web服務(wù)器發(fā)出訪問(wèn)動(dòng)態(tài)頁(yè)面的請(qǐng)求時(shí),Web服務(wù)器將根據(jù)用戶所訪問(wèn)頁(yè)面的類型確定該頁(yè)面所使用的網(wǎng)絡(luò)編程技術(shù),然后將該頁(yè)面提交給相應(yīng)的解釋引擎,解釋引擎執(zhí)行位于頁(yè)面的腳本代碼以實(shí)現(xiàn)不同的功能,如訪問(wèn)數(shù)據(jù)庫(kù)、發(fā)送電子郵件和執(zhí)行算術(shù)或邏輯運(yùn)算等,最后Web服務(wù)器把解釋引擎的執(zhí)行結(jié)果連同頁(yè)面上的HTML內(nèi)容以及各種客戶端腳本一同傳送到客戶端。雖然客戶端用戶所接收到的頁(yè)面與傳統(tǒng)頁(yè)面并沒(méi)有任何區(qū)別,但實(shí)際上頁(yè)面內(nèi)容已經(jīng)經(jīng)過(guò)了服務(wù)器端處理。1.2 JSP簡(jiǎn)介第1章JSP概述1.2.1 什

2、么是JSPJSP是Java Server Pages的縮寫(xiě),是由Sun公司倡導(dǎo),與許多其他公司一起建立的一種應(yīng)用范圍廣泛的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn),是Java語(yǔ)言編寫(xiě)的在服務(wù)器端運(yùn)行的頁(yè)面。JSP就是在HTML語(yǔ)言中嵌入Java腳本,可以被看做是一種腳本語(yǔ)言,然而作為一種腳本語(yǔ)言,在JSP中幾乎可以使用全部的Java類。JSP技術(shù)的基礎(chǔ)是Servlet,包含了Java Servlet的所有優(yōu)點(diǎn),并且當(dāng)JSP與JavaBeans結(jié)合時(shí),提供了一種使內(nèi)容和顯示邏輯分開(kāi)的簡(jiǎn)單方式。許多大型Web應(yīng)用程序的開(kāi)發(fā)需要Servlet、JavaBeans與JSP配合才能完成。1.2 JSP簡(jiǎn)介第1章JSP概述1.2

3、.2 JSP的特點(diǎn)(1)將內(nèi)容的生成和顯示分離(2)使用可重用的組件(3)采用標(biāo)簽簡(jiǎn)化頁(yè)面開(kāi)發(fā)(4)具有Java技術(shù)的所有優(yōu)點(diǎn)及完善的存儲(chǔ)管理和安全性(5)一次編寫(xiě)各處運(yùn)行1.2 JSP簡(jiǎn)介第1章JSP概述1.2.3 JSP的運(yùn)行原理(1)當(dāng)用戶訪問(wèn)一個(gè)JSP頁(yè)面時(shí),通過(guò)客戶端瀏覽器向服務(wù)器發(fā)送請(qǐng)求,這些請(qǐng)求里面有很多信息,包括請(qǐng)求的文件和用戶輸入的內(nèi)容,另外還有本地計(jì)算機(jī)的一些信息。(2)JSP文件被JSP引擎編譯成Java的class文件,即Servlet。(3)將產(chǎn)生的Servlet加載到內(nèi)存執(zhí)行。(4)Servlet的運(yùn)行結(jié)果以HTML(或XML)形式通過(guò)Web服務(wù)器返回給客戶端的瀏覽

4、器。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.1 JSP運(yùn)行環(huán)境的組成(1)Web服務(wù)器WebLogic是BEA公司的產(chǎn)品,是目前應(yīng)用最廣泛的Web服務(wù)器,支持J2EE規(guī)范,并不斷地完善以適應(yīng)新的開(kāi)發(fā)要求。另一個(gè)常用的Web服務(wù)器是IBM公司的WebSphere,支持J2EE規(guī)范。在小型的應(yīng)用系統(tǒng)或者有特殊需要的系統(tǒng)中,Tomcat是一個(gè)不錯(cuò)的選擇,該服務(wù)器支持全部JSP以及Servlet規(guī)范,是Sun公司官方推薦的Servlet和JSP容器,但是目前還不支持EJB。由于Tomcat很簡(jiǎn)單,常在系統(tǒng)開(kāi)發(fā)和測(cè)試時(shí)使用。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.1 JSP運(yùn)行環(huán)

5、境的組成(2)數(shù)據(jù)庫(kù)目前基于JSP的Web項(xiàng)目的開(kāi)發(fā)離不開(kāi)數(shù)據(jù)庫(kù)的支持。在Java相關(guān)的開(kāi)發(fā)領(lǐng)域中,常用的是三種數(shù)據(jù)庫(kù)是Oracle、DB2和MySQL。有時(shí)候也使用微軟公司的SQL Server數(shù)據(jù)庫(kù)。Oracle數(shù)據(jù)庫(kù)是Oracle公司的產(chǎn)品,是一個(gè)真正面向Internet計(jì)算環(huán)境的數(shù)據(jù)庫(kù)系統(tǒng),可移植性好、使用方便、功能強(qiáng)大,適用于各類大型、中型和小型環(huán)境,是一種高效率、可靠性好和高吞吐量的數(shù)據(jù)庫(kù)解決方案。IBM公司的DB2也是一種常用的數(shù)據(jù)庫(kù),和IBM的WebSphere配合構(gòu)成完整的企業(yè)級(jí)解決方案。還有一個(gè)常用的免費(fèi)小型數(shù)據(jù)庫(kù)MySQL,常與PHP結(jié)合使用。1.3 JSP運(yùn)行環(huán)境的構(gòu)建

6、第1章JSP概述1.3.1 JSP運(yùn)行環(huán)境的組成(3) 開(kāi)發(fā)工具Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器構(gòu)成了發(fā)布平臺(tái),需要選擇合適的開(kāi)發(fā)工具以提高編碼的效率。目前有兩種常用的企業(yè)級(jí)集成開(kāi)發(fā)環(huán)境,即JBuilder和WebSphereStudio。JBuilder是Borland公司的產(chǎn)品,支持幾乎全部的J2EE組件。IBM公司的WebSphereStudio是一套集成開(kāi)發(fā)環(huán)境,同時(shí)集成Web服務(wù)器功能。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.2 安裝JDK安裝JDK是進(jìn)行JSP開(kāi)發(fā)的一個(gè)重要步驟,也是安裝JSP引擎(如Tomcat、JBoss和Weblogic等)的前提。一般的JSP引擎是由J

7、ava語(yǔ)言編寫(xiě)的。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述在Windows平臺(tái)上安裝JDK比較簡(jiǎn)便,步驟如下:1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.3 安裝Tomcat在眾多的Web應(yīng)用服務(wù)器中,Apache開(kāi)源社區(qū)的Tomcat是最常用的Web服務(wù)器之一。Tomcat是Apache軟件基金會(huì)(Apache Soft

8、ware Foundation)的Jakarta項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和JSP規(guī)范總是能在Tomcat中得到體現(xiàn)。Tomcat技術(shù)先進(jìn),性能穩(wěn)定,而且免費(fèi),因而深受Java愛(ài)好者的喜愛(ài),并得到了部分軟件開(kāi)發(fā)商的認(rèn)可,成為目前比較流行的Web應(yīng)用服務(wù)器。用戶可以在“”找到各個(gè)版本的Tomcat服務(wù)器。本書(shū)以Tomcat 6.0.35為例,支持最新的Servlet 2.5和JSP 2.1規(guī)范。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述在Windows平臺(tái)上安裝Tomcat有兩種方式,即安裝版和

9、解壓版。首先要到“”網(wǎng)站下載這兩個(gè)版本。 進(jìn)入Tomcat主頁(yè)面后,如圖1-12所示,在頁(yè)面左面的下載鏈接中選擇要下載的Tomcat版本,此處選擇“Tomcat 6.0”,單擊進(jìn)入Tomcat 6.0的下載頁(yè)面,如圖1-13所示。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.Tomcat6.0安裝版的安裝步驟()運(yùn)行安裝文件“apache-tomcat-6.0.35.exe”,單擊【Next】按鈕,出現(xiàn)如圖1-14所示界面。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.Tomcat6.0安裝版的安裝步驟1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.Tomcat6.0安裝版的安裝步驟1.3

10、 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.Tomcat6.0安裝版的安裝步驟1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.Tomcat6.0安裝版的安裝步驟1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.Tomcat6.0安裝版的安裝步驟1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.Tomcat6.0安裝版的安裝步驟1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.4 Tomcat 6 的目錄結(jié)構(gòu)Tomcat 6 安裝后的目錄層次結(jié)構(gòu)如圖1-23所示:1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.4 Tomcat 6 的目錄結(jié)構(gòu)1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.5

11、 建立第一個(gè)JSP應(yīng)用 利用搭建好了Apache的Tomcat可建立一個(gè)JSP應(yīng)用。Tomcat是一個(gè)免費(fèi)的Web服務(wù)器,能處理HTML、JSP和Servlet的請(qǐng)求。步驟如下: ()啟動(dòng)Tomcat服務(wù)器 安裝版的用戶可以單擊windows的“開(kāi)始”菜單,選擇【所有程序】【Apache Tomcat 6.0 Tomcat6】【Configure Tomcat】,彈出如圖1-24所示對(duì)話框,單擊【Start】按鈕,啟動(dòng)Tomcat;或單擊【Monitor Tomcat】,任務(wù)欄會(huì)出現(xiàn)服務(wù)器圖標(biāo)(紅色)后,選中圖標(biāo)后右擊,選擇“Start service”,啟動(dòng)Tomcat,圖標(biāo)變?yōu)榫G色。 解壓

12、版的用戶在Tomcat已解壓的安裝目錄下的bin子目錄中,運(yùn)行處理文件“startup.bat”,啟動(dòng)Tomcat。 ()在文本編輯器中編寫(xiě)JSP代碼,保存時(shí)注意擴(kuò)展名為“.jsp”,文件名為“HelloJsp.jsp”。1.3 JSP運(yùn)行環(huán)境的構(gòu)建第1章JSP概述1.3.5 建立第一個(gè)JSP應(yīng)用 2.1 HTTP協(xié)議第2章JSP基礎(chǔ)知識(shí)2.1.1 HTTP協(xié)議概述HTTP協(xié)議(Hyper Text Transfer Protocol)是超文本傳輸協(xié)議的縮寫(xiě),是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,所有的WWW(World Wide Web,萬(wàn)維網(wǎng))文件都必須遵守這個(gè)標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初目的是

13、為了提供一種發(fā)布和接收HTML頁(yè)面的方法。簡(jiǎn)單來(lái)說(shuō),HTTP協(xié)議就是一個(gè)基于應(yīng)用層的通信規(guī)范。雙方要進(jìn)行通信,都要遵守一個(gè)規(guī)范,即HTTP協(xié)議。Internet的基本協(xié)議是TCP/IP協(xié)議,然而在TCP/IP模型最上層的是應(yīng)用層(Application layer),包含所有高層的協(xié)議。高層協(xié)議有文件傳輸協(xié)議FTP、電子郵件傳輸協(xié)議SMTP、域名系統(tǒng)服務(wù)DNS、網(wǎng)絡(luò)新聞傳輸協(xié)議NNTP和HTTP協(xié)議等。2.1 HTTP協(xié)議第2章JSP基礎(chǔ)知識(shí)2.1.2 HTTP工作過(guò)程HTTP協(xié)議定義Web客戶端如何從Web服務(wù)器請(qǐng)求Web頁(yè)面,以及服務(wù)器如何把Web頁(yè)面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請(qǐng)求/

14、響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文,包含請(qǐng)求的方法、URL、協(xié)議版本、請(qǐng)求頭部和請(qǐng)求數(shù)據(jù)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、成功或者錯(cuò)誤代碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。圖2-1所示為這種請(qǐng)求/響應(yīng)模型。2.1 HTTP協(xié)議第2章JSP基礎(chǔ)知識(shí)HTTP請(qǐng)求/響應(yīng)的步驟如下:()客戶端連接到Web服務(wù)器()發(fā)送HTTP請(qǐng)求()服務(wù)器接受請(qǐng)求并返回HTTP響應(yīng)()釋放TCP連接()客戶端瀏覽器解析HTML內(nèi)容2.1 HTTP協(xié)議第2章JSP基礎(chǔ)知識(shí)2.1.3 利用Telnet觀察HTTP協(xié)議的通訊過(guò)程Telnet是Internet遠(yuǎn)程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式,為用

15、戶提供了在本地計(jì)算機(jī)上登錄遠(yuǎn)程主機(jī)工作的能力。利用MS的Telnet工具,通過(guò)手動(dòng)輸入HTTP請(qǐng)求信息,向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器接收、解釋和接受請(qǐng)求后會(huì)返回一個(gè)響應(yīng)并在Telnet窗口上顯示出來(lái),從而從感性上加深對(duì)HTTP協(xié)議通訊過(guò)程的認(rèn)識(shí)。步驟如下:2.1 HTTP協(xié)議第2章JSP基礎(chǔ)知識(shí)2.1.3 利用Telnet觀察HTTP協(xié)議的通訊過(guò)程2.1 HTTP協(xié)議第2章JSP基礎(chǔ)知識(shí)2.1.3 利用Telnet觀察HTTP協(xié)議的通訊過(guò)程2.1 HTTP協(xié)議第2章JSP基礎(chǔ)知識(shí)2.1.3 利用Telnet觀察HTTP協(xié)議的通訊過(guò)程2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)2.2.1 安

16、裝EclipseEclipse是著名的跨平臺(tái)的自由集成開(kāi)發(fā)環(huán)境(IDE)。最初主要用來(lái)作為Java語(yǔ)言開(kāi)發(fā)工具,但是目前亦有人通過(guò)插件使其作為其他計(jì)算機(jī)語(yǔ)言如C+和Python的開(kāi)發(fā)工具。Eclipse最初是由IBM公司開(kāi)發(fā)用于替代商業(yè)軟件Visual Age for Java的下一代IDE開(kāi)發(fā)環(huán)境,2001年11月貢獻(xiàn)給開(kāi)源社區(qū),現(xiàn)在由非營(yíng)利軟件供應(yīng)商聯(lián)盟Eclipse基金會(huì)(Eclipse Foundation)管理。2001年11月7日,Eclipse 1.0發(fā)布。目前已知的Eclipse各版本代號(hào)如下:2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)2.2.2 使用Eclipse開(kāi)

17、發(fā)Web項(xiàng)目Eclipse開(kāi)發(fā)Web項(xiàng)目的步驟如下:()在Eclipse中整合Tomcat 6容器在Eclipse IDE 中,選擇Eclipse菜單的【W(wǎng)indows】【Preferences】【Server】【Runtime Environment】命令,單擊【Add】按鈕添加應(yīng)用程序服務(wù)器。如圖2-9所示。2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)在下一步中,選擇【Apache】Apache Tomcat v6.0選項(xiàng),單擊【Next】按鈕,如圖2-10所示。2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)設(shè)置Tomcat的安裝路徑,單擊【Browse】按鈕,選擇Tomca

18、t所在的位置,同時(shí)配置所要使用的JRE路徑,單擊【Finish】按鈕完成配置,如圖2-11所示。2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(2)創(chuàng)建Web工程2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(2)創(chuàng)建Web工程2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(2)創(chuàng)建Web工程2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(2)創(chuàng)建Web工程2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(3)部署Web工程2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)2.2.3 Eclipse的調(diào)試功能在編寫(xiě)程序過(guò)程中,調(diào)試是一個(gè)非常重要的環(huán)節(jié)。有人這樣說(shuō):

19、“程序是調(diào)試出來(lái)的,而不是寫(xiě)出來(lái)的?!币灿腥苏f(shuō):“調(diào)試是一門(mén)藝術(shù)”。程序員常常遇到一個(gè)bug,調(diào)試了半天都沒(méi)結(jié)果,于是只好請(qǐng)“高手”過(guò)來(lái)幫忙,迅速搞定之后不免會(huì)問(wèn),怎么調(diào)試得這么快?其實(shí)調(diào)試是需要技巧的,當(dāng)然經(jīng)驗(yàn)可以幫助程序員快速定位問(wèn)題。下面以一個(gè)Java程序?yàn)槔榻BEclipse的調(diào)試步驟。在調(diào)試項(xiàng)目之前,要保證項(xiàng)目能夠正常編譯和運(yùn)行。調(diào)試代碼“debugtest.java”如下:2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(1)設(shè)置斷點(diǎn)2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(2)運(yùn)行已設(shè)置斷點(diǎn)的程序,不過(guò)運(yùn)行方式要

20、改為啟動(dòng)調(diào)試狀態(tài)方式。2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(3)準(zhǔn)備調(diào)試。2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(4)Debug視圖顯示在調(diào)試視圖(Debug Perspective)的左上側(cè)。2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(5)單擊快捷按鈕或使用快捷鍵(主要使用F6和F5)即可進(jìn)行調(diào)試工作。2.2 Eclipse工具的使用第2章JSP基礎(chǔ)知識(shí)(6)調(diào)試完畢后,一定要使用Terminate(F12)關(guān)閉虛擬機(jī)。同時(shí)在Breakpoints視圖選擇“Remove All Breakpoints”,移除所有斷點(diǎn)。3.1 JSP語(yǔ)法與對(duì)象第3章JS

21、P語(yǔ)法與對(duì)象3.1.1 聲明3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.2 表達(dá)式【語(yǔ)法】expression【功能】表達(dá)式( expression )是指一個(gè)在腳本語(yǔ)言中定義的表達(dá)式在運(yùn)行后被自動(dòng)轉(zhuǎn)化為字符串,然后插入到這個(gè)表達(dá)式在JSP文件中的位置上顯示。JSP中的表達(dá)式可以被看做是一種簡(jiǎn)單的輸出形式,表達(dá)式的值將直接輸出到頁(yè)面。需要注意的是表達(dá)式一定要是Java的合法表達(dá)式。3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.3 JSP腳本(Scriptlet)【語(yǔ)法】code fragment【功能】所謂腳本代碼,即Scriptlet,是JSP中的代碼部分。腳本代碼被插入到

22、JSP所生成的目標(biāo)Servlet的Service方法中,可包含多個(gè)JSP語(yǔ)句、變量和表達(dá)式。在該部分中可以使用幾乎任何有效的程序片段,只要符合Java本身的標(biāo)準(zhǔn)語(yǔ)法即可。通常主要的程序也是寫(xiě)在腳本代碼中。Scriptlet主要用于:()聲明將要用到的變量。()顯示表達(dá)式。()使用內(nèi)部對(duì)象或jsp:useBean聲明過(guò)的對(duì)象編寫(xiě)JSP程序。3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.4 注釋為了便于程序的閱讀,需要在編寫(xiě)代碼時(shí)寫(xiě)注釋。JSP中的注釋可分為兩種:一種是在客戶端顯示的注釋,被稱為HTML注釋;另外一種就是客戶端看不到,只給開(kāi)發(fā)人員專用的注釋,被稱為隱藏注釋。1.HTML注釋

23、【語(yǔ)法】!-注釋-【功能】發(fā)送到客戶端的HTML文本中,可以通過(guò)查看源代碼看到,并且所有嵌入其中的JSP腳本將被編譯執(zhí)行。3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.4 注釋2.隱藏注釋【語(yǔ)法】-注釋-【功能】隱藏注釋為JSP的標(biāo)準(zhǔn)注釋,寫(xiě)在JSP程序中,包含在其中的所有內(nèi)容將被JSP編譯器忽略,返回的HTML源代碼中也看不到,隱藏注釋主要供編程人員使用。3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.5 JSP指令JSP指令是為JSP引擎設(shè)計(jì)的,不直接產(chǎn)生輸出,主要用來(lái)提供與整個(gè)JSP 網(wǎng)頁(yè)相關(guān)的信息,并且用來(lái)設(shè)定JSP網(wǎng)頁(yè)的相關(guān)屬性page指令【語(yǔ)法】page屬性列表【功能

24、】設(shè)定整個(gè)JSP頁(yè)面的屬性和相關(guān)功能。在一個(gè)JSP頁(yè)面中,page指令可以出現(xiàn)多次,但是每一種屬性卻只能出現(xiàn)一次(import屬性除外),重復(fù)的屬性設(shè)置將覆蓋先前的設(shè)置。在page指令中定義的屬性適用于該JSP頁(yè)面以及所有通過(guò)include指令或者jsp:include動(dòng)作包含的靜態(tài)文件,但是不能用于動(dòng)態(tài)文件。3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.5 JSP指令include指令【語(yǔ)法】include fileURL【功能】JSP文件編譯時(shí)將URL所指文件靜態(tài)包含進(jìn)來(lái)并且展開(kāi)。這個(gè)包含的過(guò)程是靜態(tài)的,而包含的文件可以是JSP網(wǎng)頁(yè)、HTML網(wǎng)頁(yè)、文本文件或一段Java程序,被包含

25、文件與包含它的JSP文件一起參加編譯。3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.6 動(dòng)作指令jsp:xxx表示動(dòng)作,可以用來(lái)控制JSP引擎的動(dòng)作。.jsp:include指令【語(yǔ)法】jsp:includerelativeURLflushtrue【功能】請(qǐng)求時(shí),將指定文件的內(nèi)容插入到服務(wù)器的響應(yīng)輸出中。 jsp:include 元素允許包含動(dòng)態(tài)和靜態(tài)文件,產(chǎn)生的結(jié)果是不盡相同的。如果包含進(jìn)來(lái)的是靜態(tài)文件,則只是把靜態(tài)文件的內(nèi)容加到JSP頁(yè)面中;如果包含進(jìn)來(lái)的是動(dòng)態(tài)文件,則這個(gè)被包含的文件也會(huì)被JSP容器編譯執(zhí)行。jsp:include能夠同時(shí)處理動(dòng)態(tài)和靜態(tài)兩種文件,因此使用時(shí)不需要判

26、斷此文件是動(dòng)態(tài)還是靜態(tài)的,從而方便了編程。3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1.6 動(dòng)作指令jsp:forward指令【語(yǔ)法】 jsp:forward pagerelativeURL【功能】用于引導(dǎo)客戶端的請(qǐng)求到另一個(gè)頁(yè)面或另一個(gè)Servlet中去?!九e例】3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.1 JSP語(yǔ)法與對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.1 request對(duì)象【說(shuō)明】request對(duì)象代表請(qǐng)求對(duì)象,包含所有客戶端傳送給服務(wù)器端的數(shù)據(jù),如請(qǐng)求的來(lái)源、Cookies和與請(qǐng)求相關(guān)的參數(shù)值等,其作用域就是一次request請(qǐng)

27、求?!境S梅椒ā縭equest對(duì)象的常用方法如表3-1所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.2 response對(duì)象【說(shuō)明】response對(duì)象封裝了JSP的響應(yīng),主要功能是將服務(wù)器處理后的結(jié)果傳回到客戶端輸出,由于JSP中有out對(duì)象可以方便地向客戶端輸出內(nèi)容,response對(duì)象常用于與Cookie有關(guān)的操作及網(wǎng)頁(yè)的重定向?!境S梅椒ā縭esponse對(duì)象的常用方法如表3-2所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.3 session對(duì)象【說(shuō)明】session對(duì)象用來(lái)保存每個(gè)用戶信息,以便追蹤每個(gè)用戶的狀態(tài)。 session對(duì)象和客戶端的會(huì)話緊密聯(lián)系在一

28、起,由服務(wù)器自動(dòng)創(chuàng)建。用此項(xiàng)機(jī)制可以識(shí)別每一個(gè)用戶,然后針對(duì)每一個(gè)用戶的要求,給予正確的響應(yīng)。 session對(duì)象的生命周期在客戶端向該頁(yè)面發(fā)出請(qǐng)求時(shí)建立,在session對(duì)象到期或者被終止時(shí)撤銷(xiāo)?!境S梅椒ā縮ession對(duì)象的常用方法如表3-3所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.4 application對(duì)象【說(shuō)明】application對(duì)象為多個(gè)應(yīng)用程序保存信息,每個(gè)用戶都使用同一個(gè)application對(duì)象。 application對(duì)象擁有application的使用范圍,即其生命周期是由服務(wù)器啟動(dòng)開(kāi)始至服務(wù)器關(guān)閉為止。

29、【常用方法】application對(duì)象常用方法如表3-4所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.5 out對(duì)象【說(shuō)明】out對(duì)象是JSP使用最頻繁的對(duì)象,能把結(jié)果輸出到網(wǎng)頁(yè)上。最常使用的方法是out.println()和out.println() ,兩者最大的差別在于println()在輸出的數(shù)據(jù)后面會(huì)自動(dòng)加上換行符。但這個(gè)空行只是在輸出的html代碼的空行,在瀏覽器解析時(shí)這個(gè)空行將被忽略,要想在頁(yè)面中實(shí)現(xiàn)換行,需要通過(guò)“out.println() (br)”來(lái)實(shí)現(xiàn)?!境S梅椒ā縪ut對(duì)象的常用方法如表3-5所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.5 out

30、對(duì)象3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.6 exception對(duì)象【說(shuō)明】JSP文件執(zhí)行過(guò)程中發(fā)生錯(cuò)誤時(shí)會(huì)產(chǎn)生異常,exception對(duì)象可以對(duì)異常進(jìn)行處理。exception對(duì)象并不是在每一個(gè)JSP頁(yè)中都能夠使用。若要使用exception對(duì)象,必須在page指令中設(shè)定“page isErrorPagetrue”才能使用,否則編譯時(shí)會(huì)產(chǎn)生錯(cuò)誤?!境S梅椒ā縠xception對(duì)象的常用方法如表3-6所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.7 其他內(nèi)部對(duì)象1.config對(duì)象【說(shuō)明】config對(duì)象表示Servlet的配置,提供對(duì)初始化JSP的配置數(shù)據(jù)的訪問(wèn)。【

31、常用方法】 config對(duì)象的常用方法如表3-7所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.7 其他內(nèi)部對(duì)象2.pageContext對(duì)象【功能】pageContext對(duì)象能夠存取其他隱含對(duì)象。當(dāng)隱含對(duì)象本身支持屬性時(shí), pageContext對(duì)象提供存取那些屬性的方法?!境S梅椒ā?pageContext對(duì)象的常用方法如表3-8所示。3.2 JSP內(nèi)部對(duì)象第3章JSP語(yǔ)法與對(duì)象3.2.7 其他內(nèi)部對(duì)象3.page對(duì)象【說(shuō)明】page對(duì)象是JSP文件產(chǎn)生的類對(duì)象,更準(zhǔn)確地說(shuō)代表JSP被編譯后的Servlet。因此,page對(duì)象可以調(diào)用Servlet類所定義的方法。3.3 Cook

32、ie第3章JSP語(yǔ)法與對(duì)象3.3.1 CookieCookie是在HTTP協(xié)議下,服務(wù)器維護(hù)客戶端信息的一種方式。瀏覽器與Web服務(wù)器之間是使用HTTP協(xié)議進(jìn)行通信的,當(dāng)用戶發(fā)出頁(yè)面請(qǐng)求時(shí),Web服務(wù)器只是簡(jiǎn)單地進(jìn)行響應(yīng),然后就關(guān)閉這個(gè)連接,并不記錄這次連接的狀態(tài)。因此當(dāng)一個(gè)頁(yè)面請(qǐng)求發(fā)送到Web服務(wù)器時(shí),無(wú)論該用戶是否是第一次來(lái)訪,服務(wù)器都會(huì)把它當(dāng)做是第一次來(lái)對(duì)待,這種實(shí)現(xiàn)方法簡(jiǎn)單而有效,但在需要保存連接狀態(tài)的情況下有著明顯的缺陷,Cookie可以有效地解決這個(gè)問(wèn)題。 Cookie實(shí)際上是一段純文本信息,由服務(wù)器隨網(wǎng)頁(yè)一起發(fā)送到瀏覽器端,并保存在瀏覽器端硬盤(pán)中的指定目錄下。當(dāng)用戶訪問(wèn)某個(gè)Web

33、服務(wù)器時(shí), Web服務(wù)器將要求瀏覽器查找并返回先前發(fā)送給瀏覽器的Cookie信息來(lái)識(shí)別上次連接的狀態(tài)。Cookie對(duì)象通常用來(lái)在瀏覽器端保存連接過(guò)程中的一些參數(shù),如用戶名和密碼等。3.3 Cookie第3章JSP語(yǔ)法與對(duì)象3.3.1 Cookie使用Cookie時(shí)應(yīng)注意以下問(wèn)題:()大多數(shù)瀏覽器允許用戶禁止Cookie的使用,如果在程序中必須使用Cookie ,一定要事先通知用戶。() Cookie對(duì)象在創(chuàng)建時(shí)需要指定名稱和值。其中,名稱不能包含逗號(hào)、分號(hào)和空格,也不能以“”符號(hào)開(kāi)頭。()當(dāng)Cookie對(duì)象被保存在瀏覽器端時(shí),可以指定Cookie的有效時(shí)間,當(dāng)保存時(shí)間超過(guò)有效時(shí)間時(shí),Cooki

34、e對(duì)象會(huì)被瀏覽器刪除。()某些重要的信息不要使用Cookie來(lái)存儲(chǔ),因?yàn)镃ookie在瀏覽器端是以不加密的文件形式存放在硬盤(pán)上的。3.3 Cookie第3章JSP語(yǔ)法與對(duì)象Cookie對(duì)象常用方法3.4 JSP程序的調(diào)試第3章JSP語(yǔ)法與對(duì)象3.4.1 常見(jiàn)錯(cuò)誤常見(jiàn)錯(cuò)誤有以下幾種:()運(yùn)行環(huán)境相關(guān)錯(cuò)誤找不到服務(wù)器:Tomcat安裝和啟動(dòng)問(wèn)題等。不能解析JSP代碼:JDK環(huán)境變量路徑設(shè)置問(wèn)題。不能執(zhí)行Servlet代碼:servlet.jar沒(méi)有加到路徑中。文件修改后不起作用:靜態(tài)包含的文件被修改等。3.4 JSP程序的調(diào)試第3章JSP語(yǔ)法與對(duì)象3.4.1 常見(jiàn)錯(cuò)誤()語(yǔ)法錯(cuò)誤關(guān)鍵字、類名和內(nèi)置

35、對(duì)象名寫(xiě)錯(cuò)(嚴(yán)格區(qū)分大小寫(xiě))。變量沒(méi)有定義、重復(fù)定義、沒(méi)有初始化和名字寫(xiě)錯(cuò)。方法名字錯(cuò)誤、參數(shù)錯(cuò)誤和沒(méi)有定義返回值。類型不匹配,多數(shù)是因?yàn)闆](méi)有進(jìn)行類型轉(zhuǎn)換。需要的類沒(méi)有導(dǎo)入,文件名和類名不一致。結(jié)構(gòu)性錯(cuò)誤,如缺少“”、缺少“)”、缺少“”、缺少“;”、標(biāo)簽或指令錯(cuò)誤以及異常沒(méi)有處理等。出現(xiàn)中文標(biāo)點(diǎn)符號(hào),字符串常量格式不對(duì)。3.4 JSP程序的調(diào)試第3章JSP語(yǔ)法與對(duì)象3.4.1 常見(jiàn)錯(cuò)誤()運(yùn)行期間錯(cuò)誤請(qǐng)求的資源不可用,如資源(文件、數(shù)據(jù)庫(kù)、驅(qū)動(dòng)程序或包)本身不存在、沒(méi)有導(dǎo)入需要的資源、書(shū)寫(xiě)不正確以及路徑不正確等。,對(duì)沒(méi)有實(shí)例化的對(duì)象進(jìn)行操作。無(wú)法獲取表單的值,如變量名字不正確、范圍不正確等。

36、單擊提交按鈕不起作用。按鈕是而不是或?qū)傩詻](méi)有定義值等。提交失敗。屬性值本身有問(wèn)題。3.4 JSP程序的調(diào)試第3章JSP語(yǔ)法與對(duì)象3.4.2 調(diào)試方法()設(shè)置alert彈出窗口判斷代碼運(yùn)行到哪里停止了,或者觀察某句代碼是否執(zhí)行。()JSP中使用打印“out.println(anyString)”或者對(duì)Java語(yǔ)句設(shè)置斷點(diǎn)觀察執(zhí)行情況。()用debug單步執(zhí)行來(lái)查找問(wèn)題所在。()查看后臺(tái)的錯(cuò)誤信息,查找一下JSP編譯成的Servlet文件,根據(jù)錯(cuò)誤信息里提示的錯(cuò)誤所在行數(shù)找到JSP出錯(cuò)位置。4.1 簡(jiǎn)易計(jì)算器第4章JSP基本語(yǔ)法綜合實(shí)例4.1.1 簡(jiǎn)易計(jì)算器程序分析進(jìn)入Calculator目錄,執(zhí)

37、行index.jsp顯示簡(jiǎn)易計(jì)算器的主頁(yè),頁(yè)面上有“登錄”和“小計(jì)算器”兩個(gè)鏈接,如果在沒(méi)登錄時(shí)單擊計(jì)算器鏈接,則進(jìn)入登錄頁(yè)面(login.htm)。登錄頁(yè)面要求輸入用戶名和密碼,輸入后調(diào)用login.jsp進(jìn)行處理。 login.jsp判斷用戶名和密碼,如果正確則調(diào)用Calculator.jsp,否則返回login.jsp。 Calculator.jsp要求用戶輸入兩個(gè)操作數(shù),單擊【加法】、【減法】、【乘法】和【除法】按鈕,調(diào)用action.jsp進(jìn)行計(jì)算。顯示結(jié)果。4.1 簡(jiǎn)易計(jì)算器第4章JSP基本語(yǔ)法綜合實(shí)例4.1.2 簡(jiǎn)易計(jì)算器的文件目錄結(jié)構(gòu)簡(jiǎn)易計(jì)算器的文件目錄結(jié)構(gòu)如表4-1所示。4.

38、1 簡(jiǎn)易計(jì)算器第4章JSP基本語(yǔ)法綜合實(shí)例4.1.3 簡(jiǎn)易計(jì)算器界面1.計(jì)算器主界面4.1 簡(jiǎn)易計(jì)算器第4章JSP基本語(yǔ)法綜合實(shí)例4.1.3 簡(jiǎn)易計(jì)算器界面2.登錄界面4.1 簡(jiǎn)易計(jì)算器第4章JSP基本語(yǔ)法綜合實(shí)例4.1.3 簡(jiǎn)易計(jì)算器界面3.計(jì)算器界面4.1 簡(jiǎn)易計(jì)算器第4章JSP基本語(yǔ)法綜合實(shí)例4.1.3 簡(jiǎn)易計(jì)算器界面4.計(jì)算結(jié)果界面4.2 猜數(shù)游戲第4章JSP基本語(yǔ)法綜合實(shí)例4.2.1 猜數(shù)游戲程序分析進(jìn)入guessNumber目錄,執(zhí)行index.jsp顯示猜數(shù)游戲的主頁(yè),系統(tǒng)隨機(jī)生成一個(gè)1100之間的數(shù),要求在文本框中輸入猜的數(shù),調(diào)用處理頁(yè)面(process.jsp)。處理頁(yè)面進(jìn)行

39、判斷,如果猜的數(shù)等于生成的數(shù),則調(diào)用ok.jsp;如果猜的數(shù)小于生成的數(shù),則調(diào)用smaller.jsp;如果猜的數(shù)大于生成的數(shù),則調(diào)用larger.jsp。在smaller.jsp中,提示猜的數(shù)小于生成的數(shù),并要求重新輸入,將重新猜的數(shù)提交給處理頁(yè)面(process.jsp)重新判斷。在larger.jsp中,提示猜的數(shù)大于生成的數(shù),并要求重新輸入,將重新猜的數(shù)提交給處理頁(yè)面(process.jsp)重新判斷。在ok.jsp中提示已經(jīng)猜中。4.2 猜數(shù)游戲第4章JSP基本語(yǔ)法綜合實(shí)例4.2.2 猜數(shù)游戲程序的目錄結(jié)構(gòu)4.2 猜數(shù)游戲第4章JSP基本語(yǔ)法綜合實(shí)例4.2.3 猜數(shù)游戲界面猜數(shù)游戲的

40、主頁(yè)4.2 猜數(shù)游戲第4章JSP基本語(yǔ)法綜合實(shí)例4.2.3 猜數(shù)游戲界面 2smaller.jsp的界面4.2 猜數(shù)游戲第4章JSP基本語(yǔ)法綜合實(shí)例4.2.3 猜數(shù)游戲界面 3larger.jsp的界面4.2 猜數(shù)游戲第4章JSP基本語(yǔ)法綜合實(shí)例4.2.3 猜數(shù)游戲界面 4ok.jsp的界面5.1 JavaBean介紹第5章JSP與javaBean什么是JavaBean?JSP和JavaBean結(jié)合使用是目前比較流行的Web開(kāi)發(fā)技術(shù)。JavaBean是一個(gè)可以重復(fù)使用的、跨平臺(tái)的組件。我們可以把JavaBean想象為一個(gè)黑盒子,如電視,不必了解其內(nèi)部的構(gòu)造和運(yùn)行原理,只需要利用面板上的按鈕即可

41、實(shí)現(xiàn)調(diào)臺(tái)和調(diào)音量等功能,這體現(xiàn)了組件最主要的特征,即信息封裝,外界不必了解其內(nèi)部實(shí)現(xiàn),只需通過(guò)接口對(duì)組件進(jìn)行訪問(wèn)。電視的面板就相當(dāng)于接口。JavaBean組件是Java類,這些類遵循一定的標(biāo)準(zhǔn),通常封裝成為具有特定功能或者處理某個(gè)業(yè)務(wù)的對(duì)象,這樣在JSP頁(yè)面內(nèi)即可訪問(wèn)JavaBean以及其方法。5.2 在JSP中使用JavaBean第5章JSP與javaBean關(guān)于如何在JSP中使用JavaBean,我們來(lái)看一個(gè)例子(例程5-1)。本例的源代碼在本書(shū)配套光盤(pán)的“源代碼ch5-1”目錄下,讀者只需把整個(gè)ch5-1目錄拷貝到Tomcat的Webapps目錄下即可發(fā)布這個(gè)應(yīng)用了。例程5-1是一個(gè)用戶

42、注冊(cè)的例子,游客首先填寫(xiě)注冊(cè)信息,然后提交,出現(xiàn)確認(rèn)注冊(cè)信息頁(yè)面。由于尚未學(xué)習(xí)如何連接數(shù)據(jù)庫(kù),本例暫不將用戶的注冊(cè)信息存入數(shù)據(jù)庫(kù)。5.2.1 使用JavaBean的實(shí)例5.2 在JSP中使用JavaBean第5章JSP與javaBean1.創(chuàng)建應(yīng)用程序目錄,配置用程序5.2 在JSP中使用JavaBean第5章JSP與javaBean1.創(chuàng)建應(yīng)用程序目錄,配置用程序5.2 在JSP中使用JavaBean第5章JSP與javaBean5.2.2 5.2 在JSP中使用JavaBean第5章JSP與javaBean5.2.3 5.2 在JSP中使用JavaBean第5章JSP與javaBean5.

43、2.3 5.2 在JSP中使用JavaBean第5章JSP與javaBean5.2.4 5.3 JavaBean的范圍第5章JSP與javaBean當(dāng)JavaBean的范圍設(shè)為page時(shí),表示這個(gè)JavaBean的生命周期只在一個(gè)頁(yè)面內(nèi),當(dāng)頁(yè)面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或轉(zhuǎn)到另一個(gè)文件,則JSP容器會(huì)自動(dòng)釋放該JavaBean ,結(jié)束其生命周期,該JavaBean存在于當(dāng)前頁(yè)的PageContext對(duì)象中。我們看一個(gè)頁(yè)面訪問(wèn)計(jì)數(shù)的例子,包含一個(gè)JavaBean和一個(gè)JSP頁(yè)面。5.3.1 page范圍5.3 JavaBean的范圍第5章JSP與javaBean當(dāng)JavaBean的范圍設(shè)為requ

44、est時(shí),這個(gè)JavaBean在整個(gè)請(qǐng)求的范圍內(nèi)都有效,而不僅僅在一個(gè)頁(yè)面內(nèi)有效。當(dāng)一個(gè)JSP程序使用jsp:forward操作指令定向到另外一個(gè)JSP程序或者是使用jsp:include操作指令導(dǎo)入另外的JSP程序時(shí),第一個(gè)JSP程序會(huì)把request對(duì)象傳送到下一個(gè)JSP程序,由于request范圍的JavaBean存在于request對(duì)象中,JavaBean對(duì)象也隨著request對(duì)象送出,被第二個(gè)JSP程序接收。5.3.2 request范圍5.3 JavaBean的范圍第5章JSP與javaBean當(dāng)JavaBean的范圍設(shè)為session時(shí),表示JavaBean可以在當(dāng)前HTTP會(huì)

45、話的生命周期內(nèi)被所有頁(yè)面訪問(wèn),該JavaBean存在于session對(duì)象中。也許有的讀者對(duì)會(huì)話過(guò)程還不太了解,實(shí)際上,會(huì)話過(guò)程是對(duì)于單個(gè)用戶而言的,會(huì)話過(guò)程的開(kāi)始以用戶開(kāi)始訪問(wèn)某個(gè)網(wǎng)站為標(biāo)志,會(huì)話過(guò)程的結(jié)束以用戶結(jié)束對(duì)該網(wǎng)站的訪問(wèn)為標(biāo)志。不同的用戶對(duì)應(yīng)著不同的會(huì)話過(guò)程,不同的會(huì)話過(guò)程之間互不干涉、互不影響。5.3.3 session范圍5.3.4 application范圍設(shè)為application范圍的Bean生命周期是最長(zhǎng)的,從創(chuàng)建了這個(gè)Bean開(kāi)始,即可在任何使用相同application的JSP文件中使用這個(gè)Bean ,該Bean存在于application對(duì)象中, applicati

46、on對(duì)象從Web應(yīng)用程序啟動(dòng)時(shí)就被創(chuàng)建了。6.1 數(shù)據(jù)庫(kù)概述第6章連接數(shù)據(jù)庫(kù)我們可以把數(shù)據(jù)庫(kù)看做是一種存儲(chǔ)數(shù)據(jù)的方法,數(shù)據(jù)庫(kù)模型包括層次模型、網(wǎng)狀模型、關(guān)系模型和對(duì)象模型。目前最常見(jiàn)的數(shù)據(jù)庫(kù)是關(guān)系數(shù)據(jù)庫(kù),市場(chǎng)上使用較多的關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品有Oracle、DB2、SQL Server、Sybase和MySQL等。由于關(guān)系數(shù)據(jù)庫(kù)在市場(chǎng)上占據(jù)了絕對(duì)主導(dǎo)地位,所以本章將重點(diǎn)介紹涉及關(guān)系數(shù)據(jù)庫(kù)的解決方案。因?yàn)槲覀兛梢悦赓M(fèi)地得到MySQL作為數(shù)據(jù)庫(kù)平臺(tái),而且在開(kāi)發(fā)群體中MySQL的支持率也很高,掌握起來(lái)也比較容易,所以本書(shū)使用MySQL來(lái)測(cè)試所有的代碼。6.2 SQL介紹第6章連接數(shù)據(jù)庫(kù)SQL全名為Struc

47、turedQueryLanguage。ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì))聲稱,SQL是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言。SQL通常用于完成一些數(shù)據(jù)庫(kù)的操作任務(wù),如為數(shù)據(jù)庫(kù)更新數(shù)據(jù)或者從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)等。下面重點(diǎn)介紹幾個(gè)常用的SQL語(yǔ)句。6.2 SQL介紹第6章連接數(shù)據(jù)庫(kù)6.2 SQL介紹第6章連接數(shù)據(jù)庫(kù)6.2 SQL介紹第6章連接數(shù)據(jù)庫(kù)6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)前面介紹了數(shù)據(jù)庫(kù)知識(shí)和SQL語(yǔ)言,在設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序的時(shí)候,首先需要連接到要訪問(wèn)的數(shù)據(jù)庫(kù),解決此問(wèn)題的方法是采用數(shù)據(jù)庫(kù)接口技術(shù)。目前在市面上最常用的兩種數(shù)據(jù)庫(kù)接口是ODBC(OpenDatabaseConnectivity,開(kāi)放數(shù)據(jù)

48、庫(kù)連接)和JDBC(JavaDatabaseConnectivity,java數(shù)據(jù)庫(kù)連接)。ODBC是Microsoft公司推出的數(shù)據(jù)庫(kù)接口,而JDBC是Sun公司推出的。JDBC是一種可用于執(zhí)行SQL語(yǔ)句的JavaAPI,由一些Java語(yǔ)言編寫(xiě)的類和接口組成。JDBC為開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)庫(kù)前臺(tái)工具提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使程序開(kāi)發(fā)人員可以用純Java語(yǔ)言編寫(xiě)完整的數(shù)據(jù)庫(kù)應(yīng)用程序。6.3.1 JDBC介紹6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)JDBC的總體結(jié)構(gòu)有四個(gè)組件,即應(yīng)用程序、JDBC API、JDBC驅(qū)動(dòng)程序管理器(JDBCDriverManager)和數(shù)據(jù)源(DataSou

49、rce)。JDBCAPI通過(guò)一個(gè)JDBC驅(qū)動(dòng)程序管理器和為各種數(shù)據(jù)庫(kù)定制的JDBC驅(qū)動(dòng)程序,提供與不同數(shù)據(jù)庫(kù)的透明連接。JDBC的結(jié)構(gòu)參見(jiàn)圖6-5。6.3.2 JDBC的結(jié)構(gòu)6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)1.JDBC-ODBC橋6.3.3 JDBC驅(qū)動(dòng)程序6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)2.部分Java、部分本機(jī)驅(qū)動(dòng)程序6.3.3 JDBC驅(qū)動(dòng)程序6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)3.中間數(shù)據(jù)訪問(wèn)服務(wù)器6.3.3 JDBC驅(qū)動(dòng)程序6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)4.純Java驅(qū)動(dòng)程序6.3.3 JDBC驅(qū)動(dòng)程序6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)6.3.4 JDBC常用接口6.

50、3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)6.3 JDBC介紹第6章連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)在編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序之前,首先需要找到所要連接的數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序,MySQL的驅(qū)動(dòng)程序稱為“ConnectorJ”,讀者可以在MySQL的官方網(wǎng)站上免費(fèi)取得,網(wǎng)址為“/products/connectorj/index.html”,或者直接使用光盤(pán)內(nèi)附的驅(qū)動(dòng)程序。這里使用“Connector/J3.1.10”作為本書(shū)范例的JDBC驅(qū)動(dòng)程序,文件名為“mysqlconnector java 3.1.10 bin.jar”,將JDBC驅(qū)動(dòng)程序部署到To

51、mcat的“commonlib”目錄下,注意,部署完后一定要重新啟動(dòng)Tomcat服務(wù)器。6.4.1 在JSP中使用JDBC連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)在編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),往往會(huì)遇到中文亂碼問(wèn)題。例如上一節(jié)我們舉了在數(shù)據(jù)庫(kù)表中插入記錄的例子,如果讀者修改程序,將插入的數(shù)據(jù)改為中文,就會(huì)發(fā)現(xiàn)插入到表中的數(shù)據(jù)變成了亂碼。有時(shí)候,即使表中的數(shù)據(jù)都是正常的中文,但從表中查詢出來(lái)顯示到頁(yè)面上的卻是亂碼。6.4.2 中文亂碼問(wèn)題的處理6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)前面筆者介紹了如何在JSP頁(yè)面中訪問(wèn)數(shù)據(jù)庫(kù),我們把所有的數(shù)據(jù)訪問(wèn)代碼都寫(xiě)入了JSP頁(yè)面,這樣雖然看起來(lái)

52、編程簡(jiǎn)單,但是可維護(hù)性和代碼的重用性卻得不到滿足。在真正的JSP開(kāi)發(fā)中,很少直接在JSP頁(yè)面中寫(xiě)入大量的邏輯代碼,而是把訪問(wèn)數(shù)據(jù)庫(kù)的代碼封裝到JavaBean中,實(shí)現(xiàn)系統(tǒng)的邏輯分層,這樣不僅頁(yè)面容易維護(hù),而且代碼也能得到很好的重用。6.4.3 在JavaBean中使用JDBC連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)6.4.3 在JavaBean中使用JDBC連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)

53、據(jù)庫(kù)6.4 連接MySQL數(shù)據(jù)庫(kù)第6章連接數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)訪問(wèn)往往比較消耗系統(tǒng)資源,如前面所介紹的數(shù)據(jù)庫(kù)連接方式,每次JSP接收到一個(gè)請(qǐng)求,就向數(shù)據(jù)庫(kù)要求一個(gè)連接,當(dāng)執(zhí)行完就通知數(shù)據(jù)庫(kù)中斷連接。這樣,每次操作都建立一個(gè)物理連接,使用完都關(guān)閉連接,造成系統(tǒng)性能低下。本節(jié)我們將利用連接池(Connection Pool)的方式來(lái)解決這個(gè)問(wèn)題。連接池技術(shù)的原理是在Web服務(wù)器啟動(dòng)的時(shí)候就與數(shù)據(jù)庫(kù)建立很多的Connection連接對(duì)象并存儲(chǔ)起來(lái),就像一個(gè)池子,需要的時(shí)候就從連接池中取出一個(gè)連接,使用完畢后再釋放回連接池。簡(jiǎn)單地說(shuō),就是做一個(gè)緩沖區(qū),使JSP與數(shù)據(jù)庫(kù)之間能夠獲得最大的執(zhí)行效率。6.4.4 連

54、接池技術(shù)7.1 Servlet介紹第7章JSP與ServletServlet是用Java編寫(xiě)的服務(wù)器端小程序,與協(xié)議和平臺(tái)無(wú)關(guān),運(yùn)行于支持Java的Web服務(wù)器中。JavaServlet具有動(dòng)態(tài)擴(kuò)展Server的能力,并采用請(qǐng)求響應(yīng)模式提供Web服務(wù)。Servlet看起來(lái)像是普通的Java程序。 Servlet需要導(dǎo)入特定的屬于Java Servlet API的包。由于Servlet運(yùn)行于服務(wù)器中,并不需要一個(gè)圖形用戶界面,從這個(gè)角度講Servlet也被稱為FacelessObject(無(wú)界面對(duì)象)。Servlet有以下優(yōu)點(diǎn): 可移植性 功能 性能 安全性7.2 Servlet的生命周期第7章

55、JSP與ServletServlet有良好的生命周期的定義,包括加載、實(shí)例化、初始化、處理客戶端請(qǐng)求以及被移除。這個(gè)生存期由javax.servlet.Servlet接口的init( )、service()和destroy()方法來(lái)實(shí)現(xiàn)。Servlet從產(chǎn)生到結(jié)束的流程如圖7-1所示。7.3 JSP本質(zhì)上就是Servlet第7章JSP與Servlet其實(shí),JSP本質(zhì)上就是Servlet。Tomcat服務(wù)器總是把每個(gè)JSP文件翻譯為Servlet,然后再編譯執(zhí)行。7.4 開(kāi)發(fā)和部署一個(gè)簡(jiǎn)單的Servlet第7章JSP與Servlet本節(jié)使用Servlet輸出當(dāng)前時(shí)間。該例程的源代碼在本書(shū)配套光盤(pán)

56、的“源代碼ch7”目錄下。7.5 JSP與Servlet聯(lián)合應(yīng)用實(shí)例第7章JSP與Servlet本節(jié)舉例說(shuō)明Servlet和網(wǎng)頁(yè)是如何溝通的。該例程的源代碼在本書(shū)配套光盤(pán)的“源代碼ch7”目錄下。7.6 JSP開(kāi)發(fā)的兩種模型第7章JSP與Servlet Java的Web框架雖然各不相同,但基本也都是遵循特定的路數(shù),如使用Servlet或Filter攔截請(qǐng)求;使用MVC的思想設(shè)計(jì)架構(gòu),使用約定XML或Annotation實(shí)現(xiàn)配置,運(yùn)用Java面向?qū)ο蟮奶攸c(diǎn),面向抽象實(shí)現(xiàn)請(qǐng)求和響應(yīng)的流程,支持JSP、Freemarker和Velocity等視圖。早期的JSP規(guī)范提出了兩種用JSP技術(shù)建立應(yīng)用程序的

57、方式。這兩種方式在術(shù)語(yǔ)中分別稱作JSPModell和JSPModel12(模型2),其本質(zhì)區(qū)別在于處理批量請(qǐng)求的位置不同。7.6.1 Java Web框架7.6 JSP開(kāi)發(fā)的兩種模型第7章JSP與Servlet 1.傳統(tǒng)的JSPModel1模型 JSP是獨(dú)立的,自主完成所有的任務(wù),中心是JSP頁(yè)面。 JSP頁(yè)面中結(jié)合業(yè)務(wù)邏輯、服務(wù)端處理過(guò)程和HTML等,這樣就在JSP頁(yè)面中同時(shí)實(shí)現(xiàn)了業(yè)務(wù)邏輯和流程控制,從而實(shí)現(xiàn)快速開(kāi)發(fā)。如圖7-7所示。7.6.2 模型17.6 JSP開(kāi)發(fā)的兩種模型第7章JSP與Servlet 2.改進(jìn)的JSPModel1模型 Jsp頁(yè)面與JavaBeans技術(shù)共同協(xié)作完成任務(wù)

58、,將頁(yè)面顯示和業(yè)務(wù)邏輯處理分開(kāi)。JSP實(shí)現(xiàn)頁(yè)面的顯示,JavaBean對(duì)象用來(lái)承載數(shù)據(jù)和實(shí)現(xiàn)業(yè)務(wù)邏輯。改進(jìn)的JSPModel1模型的結(jié)構(gòu)如圖7-10所示。在模型中,JSP頁(yè)面獨(dú)自響應(yīng)請(qǐng)求并將處理結(jié)果返回給客戶,所有的數(shù)據(jù)通過(guò)JavaBean來(lái)處理,JSP實(shí)現(xiàn)頁(yè)面的顯示。7.6.2 模型17.6 JSP開(kāi)發(fā)的兩種模型第7章JSP與Servlet ()JSPModel2中使用了三種技術(shù),即JSP、Servlet和JavaBeans。JSP負(fù)責(zé)生成動(dòng)態(tài)網(wǎng)頁(yè),只用來(lái)顯示頁(yè)面;Servlet負(fù)責(zé)流程控制,用來(lái)處理各種請(qǐng)求的分派;JavaBeans負(fù)責(zé)業(yè)務(wù)邏輯,如對(duì)數(shù)據(jù)庫(kù)的操作。 ()使用JSPModel

59、2的交互過(guò)程如下: 用戶通過(guò)瀏覽器向Web應(yīng)用中的Servlet發(fā)送請(qǐng)求,Servlet接收到請(qǐng)求后實(shí)例化JavaBeans對(duì)象,調(diào)用該對(duì)象的方法,并返回從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)。Servlet選擇合適JSP,并且把從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)通過(guò)這個(gè)JSP進(jìn)行顯示,最后JSP頁(yè)面把最終的結(jié)果返回給瀏覽器。結(jié)構(gòu)如圖7-13所示。7.6.3 模型27.7 中文亂碼問(wèn)題第7章JSP與Servlet Java的內(nèi)核和class文件是基于Unicode(統(tǒng)一字符編碼標(biāo)準(zhǔn)集)的,這使得Java程序具有良好的跨平臺(tái)性,但在JavaWeb應(yīng)用開(kāi)發(fā)中,經(jīng)常會(huì)出現(xiàn)頁(yè)面顯示中文亂碼的情況。究其原因,主要是由于在Web組件之間

60、和Web組件與瀏覽器之間、Web組件與數(shù)據(jù)庫(kù)之間所使用的字符集標(biāo)準(zhǔn)不統(tǒng)一,Web應(yīng)用程序運(yùn)行過(guò)程中,中文字符往往需要在不同的字符集之間來(lái)回轉(zhuǎn)換,因此導(dǎo)致了中文亂碼問(wèn)題的頻繁出現(xiàn)。 什么是字符集?在計(jì)算機(jī)中,無(wú)論數(shù)據(jù)是在內(nèi)存中還是在外部存儲(chǔ)設(shè)備上,只有二進(jìn)制的數(shù)據(jù)。我們所看到的字符也是以二進(jìn)制數(shù)據(jù)的形式存在的。不同字符對(duì)應(yīng)二進(jìn)制數(shù)的規(guī)則,就是字符的編碼。字符編碼的集合稱為字符集。7.7.1 Java中文問(wèn)題的由來(lái)7.7 中文亂碼問(wèn)題第7章JSP與Servlet Web頁(yè)面常見(jiàn)的亂碼主要有三種,即JSP頁(yè)面顯示亂碼、表單提交中出現(xiàn)亂碼和數(shù)據(jù)庫(kù)連接亂碼。 1.JSP頁(yè)面顯示亂碼 這種亂碼問(wèn)題比較簡(jiǎn)單

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論