JavaWeb程序設(shè)計(jì) 課件全套 郭克華 第1-15章 JavaWeb開發(fā)環(huán)境配置-Web 網(wǎng)站安全_第1頁
JavaWeb程序設(shè)計(jì) 課件全套 郭克華 第1-15章 JavaWeb開發(fā)環(huán)境配置-Web 網(wǎng)站安全_第2頁
JavaWeb程序設(shè)計(jì) 課件全套 郭克華 第1-15章 JavaWeb開發(fā)環(huán)境配置-Web 網(wǎng)站安全_第3頁
JavaWeb程序設(shè)計(jì) 課件全套 郭克華 第1-15章 JavaWeb開發(fā)環(huán)境配置-Web 網(wǎng)站安全_第4頁
JavaWeb程序設(shè)計(jì) 課件全套 郭克華 第1-15章 JavaWeb開發(fā)環(huán)境配置-Web 網(wǎng)站安全_第5頁
已閱讀5頁,還剩467頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第1章JavaWeb開發(fā)環(huán)境配置本課教學(xué)內(nèi)容B/S結(jié)構(gòu)服務(wù)器安裝IDE安裝第一個(gè)Web項(xiàng)目B/S簡介兩種基本結(jié)構(gòu)C/S(客戶機(jī)/服務(wù)器)B/S(瀏覽器/服務(wù)器)B/S簡介C/S(客戶機(jī)/服務(wù)器) C/S,分為客戶機(jī)和服務(wù)器兩層,把應(yīng)用軟件安裝在客戶機(jī)端,通過網(wǎng)絡(luò)與服務(wù)器端相互通信。如果客戶端改動(dòng)了(如界面豐富,功能增加),就必須通知所有的客戶端重新安裝,維護(hù)稍有不便C/S結(jié)構(gòu)模式圖B/S簡介B/S(瀏覽器/服務(wù)器) B/S結(jié)構(gòu)卻可以不用通知客戶端安裝某個(gè)軟件,內(nèi)容修改了,也不需要通知客戶端升級。B/S也分為客戶機(jī)和服務(wù)器兩層,但是客戶機(jī)上不用安裝軟件,只需要使用瀏覽器即可B/S結(jié)構(gòu)模式圖Web程序定義:Web原意是"蜘蛛網(wǎng)",或"網(wǎng)"。在互聯(lián)網(wǎng)等技術(shù)領(lǐng)域,特指網(wǎng)絡(luò),在應(yīng)用程序領(lǐng)域,又是"WorldWideWeb(萬維網(wǎng))"的簡稱。在Web程序結(jié)構(gòu)中,瀏覽器端與Web服務(wù)器端采用請求/響應(yīng)模式進(jìn)行交互。Web程序運(yùn)行描述客戶端Web服務(wù)器數(shù)據(jù)庫服務(wù)器1:用戶輸入2:發(fā)送請求5:返回響應(yīng)3:訪問數(shù)據(jù)4:返回結(jié)果6:顯示

瀏覽器端與服務(wù)器端的交互模式Web程序運(yùn)行描述瀏覽器端與服務(wù)器端的交互模式過程描述:客戶端(通常是瀏覽器,如IE、Firefox等)接受用戶的輸入,如用戶名、密碼、查詢字符串等客戶端向Web服務(wù)器發(fā)送請求:輸入之后,提交,客戶端把請求信息(包含表單中的輸入以及其他請求等信息)發(fā)送到Web服務(wù)器端,客戶端等待服務(wù)器端的響應(yīng)Web程序運(yùn)行描述數(shù)據(jù)處理:Web服務(wù)器端使用某種腳本語言訪問數(shù)據(jù)庫,查詢數(shù)據(jù),并獲得查詢結(jié)果數(shù)據(jù)庫向Web服務(wù)器中的程序返回結(jié)果發(fā)送響應(yīng):Web服務(wù)器端向客戶端發(fā)送響應(yīng)信息(一般是動(dòng)態(tài)生成的HTML頁面)顯示:由用戶的瀏覽器解釋HTML代碼,呈現(xiàn)用戶界面Web程序應(yīng)用于Web的編程語言:CGIPHPASPJSP服務(wù)器的作用要建立Web網(wǎng)站,最基本的要求是要讓客戶能夠通過http/https協(xié)議訪問網(wǎng)站里面的網(wǎng)頁。為了能通過http/https協(xié)議訪問網(wǎng)頁,需將網(wǎng)頁放在服務(wù)器中運(yùn)行。Java系列的服務(wù)器很多,如Tomcat、WebLogic等。服務(wù)器安裝-Tomcat下載。

在瀏覽器地址欄中輸入:,可以看到tomcat的可下載版本在Windows環(huán)境下,選擇"WindowsServiceInstaller",即可下載安裝版本。下載之后,得到一個(gè)可執(zhí)行文件,在本章中為:apache-tomcat-6.0.45.exe。注意,也可以下載壓縮包服務(wù)器安裝-Tomcat雙擊安裝文件即可進(jìn)行安裝,具體安裝過程見課本圖解如果是默認(rèn)安裝,Tomcat安裝完畢之后,可以在C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat6.0下找到安裝的目錄服務(wù)器安裝-TomcatTomcat安裝目錄中,比較重要的文件夾或文件的內(nèi)容如下表服務(wù)器安裝-TomcatTomcat安裝后完畢后需要測試其是否安裝成功,步驟為:1.進(jìn)入Tomcat安裝目錄下的bin目錄;2.雙擊bin目錄下的Tomcat6.exe;3.打開瀏覽器,在地址欄輸入“http://localhost:8080/index.jsp”,若能正常訪問即安裝成功。服務(wù)器安裝-Tomcat啟動(dòng)Tomcat的過程中,可能會(huì)遇到端口被占用的情況,這時(shí)可以配置服務(wù)器,將服務(wù)器運(yùn)行的端口號改為別的端口。找到Tomcat安裝目錄下的文件“/conf/server.xml”;使用記事本或?qū)懽职宕蜷_文件,在文件中找到“Connectorport=8080”;將“8080”改為“8888”,然后保存配置文件;重啟Tomcat服務(wù)器。IDE安裝IDE(IntegratedDevelopmentEnvironment,集成開發(fā)環(huán)境),是幫助用戶進(jìn)行快速開發(fā)的軟件。如JCreator、Eclipse、DreamWeaver,都屬于IDE。Java系列的IDE很多,如JBuilder、JCreator、Eclipse、MyEclipse等。其中,MyEclipse是收費(fèi)軟件,但是對JavaEE應(yīng)用開發(fā)進(jìn)行了很多支持,功能比較強(qiáng)大。IDE安裝-MyEclipse在瀏覽器地址欄中輸入:,能夠看到MyEclipse的各個(gè)版本。可以根據(jù)提示下載。下載之后,得到一個(gè)可執(zhí)行文件,為:MyEclipse_7.0_win32.exe。雙擊下載后的安裝文件,可以根據(jù)提示進(jìn)行安裝,具體安裝過程見課本圖解。綁定MyEclipse和服務(wù)器在MyEclipse中使用服務(wù)器,需要首先綁定JDK。雖然MyEclipse下已經(jīng)內(nèi)置了Java環(huán)境,但仍可以使用自行安裝的JDK來進(jìn)行支持。具體的綁定過程見課本圖解。綁定好了JDK后,需要在MyEclipse中配置自行安裝的Tomcat。建立Web項(xiàng)目創(chuàng)建Web網(wǎng)站所涉及的幾個(gè)步驟如下:創(chuàng)建Web項(xiàng)目,建立基本結(jié)構(gòu);設(shè)計(jì)Web項(xiàng)目的目錄結(jié)構(gòu),將網(wǎng)站中的各個(gè)文件分門別類;編寫Web項(xiàng)目的代碼,編寫網(wǎng)頁;部署Web項(xiàng)目,在服務(wù)器中運(yùn)行該項(xiàng)目。在MyEclipse中創(chuàng)建Web項(xiàng)目見課本圖解目錄結(jié)構(gòu)Web項(xiàng)目要求按特定的目錄結(jié)構(gòu)組織文件,當(dāng)在MyEclipse中創(chuàng)建完畢新的Web項(xiàng)目,就可以在MyEclipse的"PackageExplorer"中看到該Web項(xiàng)目的目錄結(jié)構(gòu),由MyEclipse自動(dòng)生成。目錄用途src目錄:用來存放Java源文件。WebRoot目錄:是該Web應(yīng)用的頂層目錄,也稱為文檔根目錄,由以下部分組成:

兩個(gè)重要目錄(不要隨意修改或者刪除):META-INF目錄:系統(tǒng)自動(dòng)生成,存放系統(tǒng)描述信息,一般情況下使用較少目錄用途W(wǎng)EB-INF目錄:該目錄存在于文檔根目錄下。但是該目錄不能被引用,即該目錄下存放的文件無法對外發(fā)布,則無法被用戶訪問到。web.xml:Web應(yīng)用的配置文件,不能刪除或隨意修改。lib目錄:其中包含Web應(yīng)用所需的.jar或.zip文件。classes目錄:在MyEclipse中沒有顯示出來,里面包含的是src目錄下的Java源文件所編譯的class文件。目錄用途其他目錄:主要是網(wǎng)站中的一些用戶文件。靜態(tài)文件:包括所有的HTML網(wǎng)頁、CSS文件、圖像文件等。JSP文件。部署頁面編寫完成之后,必須要將整個(gè)項(xiàng)目放到服務(wù)器中去運(yùn)行,這叫做部署Web項(xiàng)目,具體操作步驟分為以下幾步:單擊MyEclipse工具欄上的部署圖標(biāo)在新彈出的對話框中選擇欲部署的項(xiàng)目,接著單擊Add按鈕在下一個(gè)新彈出的對話框中,選擇server為Tomcat6.x,然后單擊"Finish"按鈕運(yùn)行部署Web項(xiàng)目后,就要開始訪問頁面: 運(yùn)行Tomcat6.x服務(wù)器(前面已經(jīng)敘述過),開啟IE窗口,輸入U(xiǎn)RL為http://localhost:8080/Prj01/index.jsp,按回車鍵并查看運(yùn)行結(jié)果項(xiàng)目已經(jīng)被放到了服務(wù)器中,路徑是: C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat6.0\webappsURLURL是UniformResourceLocator的縮寫,譯為“統(tǒng)一資源定位符”,就是通常所說的網(wǎng)址,URL是惟一能夠識別Internet上具體的計(jì)算機(jī)、目錄或文件位置的命名約定。URLURL的格式由下列三部分組成。http://localhost:8080/Prj01/index.jsp第一部分是協(xié)議,如http。第二部分是主機(jī)IP地址(有時(shí)也包括端口號),如localhost:8080,注意,localhost也可以用,或者主機(jī)IP地址代替。第三部分是主機(jī)資源的具體地址,如目錄和文件名等。開發(fā)Web程序的常見錯(cuò)誤未啟動(dòng)Tomcat未部署Web應(yīng)用就訪問URL輸入錯(cuò)誤本章結(jié)束本章總結(jié)B/S結(jié)構(gòu)服務(wù)器安裝IDE安裝第一個(gè)Web項(xiàng)目上機(jī)習(xí)題第2章HTML基礎(chǔ)本課教學(xué)內(nèi)容靜態(tài)網(wǎng)頁制作HTML中的常見標(biāo)簽表格標(biāo)簽鏈接和圖片標(biāo)簽表單標(biāo)簽框架靜態(tài)網(wǎng)頁制作HTML簡介HTML(HyperTextMark-upLanguage,超文本標(biāo)記語言),是構(gòu)成網(wǎng)頁文檔的主要語言。一般情況下,網(wǎng)頁上看到的文字、圖形、動(dòng)畫、聲音、表格、鏈接等元素大部分都是由HTML語言描述的靜態(tài)網(wǎng)頁制作HTML簡介

HTML語言的基本組成部分是各種標(biāo)簽,一張生動(dòng)的網(wǎng)頁往往含有大量的標(biāo)簽。使用標(biāo)簽,實(shí)際上就是采用一系列指令符號來控制輸出的效果,如:<BR>,是最常使用的控制格式的標(biāo)簽,它表示在網(wǎng)頁上換行靜態(tài)網(wǎng)頁制作HTML簡介HTML有兩種類型的標(biāo)簽,一類是單標(biāo)簽,<BR>就是一種單標(biāo)簽,它只需要單獨(dú)一組符號就可以表示完整的功能。另一種是雙標(biāo)簽,形如<B>內(nèi)容</B>,表示將"內(nèi)容"顯示為粗體,這種標(biāo)簽所圍繞的內(nèi)容就是標(biāo)簽作用的作用域靜態(tài)網(wǎng)頁制作HTML簡介標(biāo)簽還有屬性,如:<ahref=page.html/>,其中的“href”就是一個(gè)屬性名稱,“page.html”是屬性值。以HTML編寫成的文本文件的后綴名為.html,另外,版本較老的.htm后綴名也是被支持的,它們的意義相同。靜態(tài)網(wǎng)頁制作HTML簡介HTML語言對于大小寫不敏感,比如馬上將要學(xué)習(xí)的表示HTML文檔的標(biāo)簽:<html></html>,也可寫做<HTML></HTML>,甚至可以寫為<HtmL></htMl>,但是一般推薦,自始至終使用同一種書寫方式HTML文檔的基本結(jié)構(gòu)HTML文檔的基本結(jié)構(gòu)如下:<html> <head>頭部信息 </head> <body> 主體 </body></html>文字布局及字體標(biāo)簽標(biāo)題、換行、段落標(biāo)簽標(biāo)題標(biāo)簽

在HTML中,標(biāo)題的一般形式為:<hn>內(nèi)容</hn>。n可取1~6,n越小,標(biāo)題字號就越大。換行標(biāo)簽

<br>是換行標(biāo)簽,在需要換行的地方加上此標(biāo)簽即可。段落標(biāo)簽

<p>為段落標(biāo)簽,一個(gè)段落開始由<p>來標(biāo)記,結(jié)束用</p>表示。<p>有一個(gè)常用屬性align,用來指明內(nèi)容顯示時(shí)的對齊方式,常用的有l(wèi)eft、center和right,分別表示左對齊、居中對齊和右對齊。文字布局及字體標(biāo)簽水平線段標(biāo)簽<hr>是水平線段標(biāo)簽,此標(biāo)簽較為常用的屬性有:size:水平線的寬度,單位為像素width:水平線的長,如不設(shè)置則默認(rèn)為頁面長度,單位默認(rèn)為像素,但也可以使用百分制,如width=50%表示長度為頁面長度的50%align:水平線的對齊方式,常用的有l(wèi)eft,center,right。noshade:線段無陰影屬性,沒有屬性值,若設(shè)置,則線段為實(shí)心線段color:線段內(nèi)部的顏色文字布局及字體標(biāo)簽文字設(shè)計(jì)標(biāo)簽

<font></font>

<font></font>標(biāo)簽一般用于標(biāo)記字體,此標(biāo)簽有以下幾種常見的屬性:size:用來設(shè)置字體大小,它的屬性值有兩種寫法:一種為size=X,其中X為從1到7,值越大,字體越大,屬性值為3是客戶端網(wǎng)頁的默認(rèn)字體大??;另一種方法是size=+X或-X,X同樣為從1到7的值,意思是以基準(zhǔn)字體大小為標(biāo)準(zhǔn)大X號字體或者小X號字體face:用來設(shè)置字體類型,默認(rèn)為宋體。如<fontface="楷體_GB2312">,即設(shè)置該內(nèi)容的輸出的字體為楷體但是需要注意的是,只有電腦中安裝的字體才可以在瀏覽器中出現(xiàn)相應(yīng)風(fēng)格,如果用戶沒有安裝該字體,則會(huì)顯示默認(rèn)字體的風(fēng)格color:用于設(shè)置字體顏色HTML中的常見標(biāo)簽常見的設(shè)置文字風(fēng)格的標(biāo)簽有:<b>內(nèi)容</b>:將內(nèi)容設(shè)置為粗體。<u>內(nèi)容</u>:將內(nèi)容設(shè)置下劃線。<i>內(nèi)容</i>:將內(nèi)容設(shè)置為斜體。<sup>內(nèi)容</sup>:將內(nèi)容設(shè)置為上標(biāo)。<sub>內(nèi)容</sub>:將內(nèi)容設(shè)置為下標(biāo)<blink>內(nèi)容</blink>:將內(nèi)容設(shè)置為閃爍(非標(biāo)準(zhǔn)元素)。列表標(biāo)簽在網(wǎng)頁制作過程中,常常要將某些信息以列表的方式列舉出來,這就需要用到HTML中的列表標(biāo)簽。列表標(biāo)簽分為兩種,一種是有序的,一種是無序的。<ul>內(nèi)容</ul>,表示它所包圍的內(nèi)容是無序列表標(biāo)簽,即列表中每一項(xiàng)目前不會(huì)加上序號,而是會(huì)加上●、○、■等符號。其中列表的每一項(xiàng)用<li>列表項(xiàng)</li>標(biāo)示。<ol>內(nèi)容</ol>表示有序標(biāo)簽,意義與使用方法和無序列表標(biāo)簽大致相同,不同點(diǎn)為它會(huì)在每個(gè)列表項(xiàng)前加上數(shù)字表格標(biāo)簽表格基本設(shè)計(jì)編寫表格所用到的標(biāo)簽如下:<table></table>:定義表格,表格的所有內(nèi)容都寫在這個(gè)標(biāo)簽之內(nèi)<caption></caption>:定義標(biāo)題,標(biāo)題會(huì)自動(dòng)出現(xiàn)在整張表格的上方<tr></tr>:定義表行<th></th>:定義表頭,包含在<tr></tr>之間,表頭中的文字會(huì)自動(dòng)變成粗體<td></td>:定義表元(表格的具體數(shù)據(jù)),包含在<tr></tr>之間表格標(biāo)簽以下為制作表格的標(biāo)簽中大多擁有的公共屬性:align:水平布局方式,常用屬性值有l(wèi)eft,right,center,表示左對齊,右對齊和居中對齊,<table>的該屬性表示表格在頁面的布局方式,<tr>、<td>的該屬性表示該行和該表元內(nèi)的內(nèi)容的布局方式。默認(rèn)布局方式為左對齊bgcolor:設(shè)置背景顏色border:設(shè)置邊框的寬度,屬性值為整數(shù),為0時(shí)表格沒有邊框,默認(rèn)值為0width:寬度,默認(rèn)單位為像素,也可以使用百分制單位height:高度,默認(rèn)單位為像素;也可以使用百分制單位表格標(biāo)簽對于整張表格,<table>標(biāo)簽常用的屬性有以下幾個(gè):bordercolor:表格邊框的顏色,默認(rèn)為黑色cellpadding:表元邊框的寬度cellspacing:表元的邊框與表格邊框之間的寬度合并單元格合并單元格必須對<td>標(biāo)簽中的rowspan、colspan進(jìn)行設(shè)置,屬性值都為整數(shù),默認(rèn)為1,表示沒有合并。這兩個(gè)屬性的意思分別為:從該表元起,該表元在行或者列上占有的單元格數(shù),比如設(shè)置某個(gè)<td>標(biāo)簽rowspan=2,表示該表元及其下面的表元合并成一個(gè)。鏈接和圖片標(biāo)簽鏈接標(biāo)簽可以使用戶鏈接到另一個(gè)頁面,它的寫法是<a>內(nèi)容</a>,標(biāo)簽內(nèi)的內(nèi)容為鏈接所顯示的內(nèi)容,可以是文字、空格占位符、圖片等,此標(biāo)簽的一個(gè)重要屬性是:href,它的值表示鏈接所指向的資源地址鏈接和圖片標(biāo)簽圖片標(biāo)簽比較重要和常用的標(biāo)簽有以下幾個(gè):src:表示圖片儲存的位置width,height,border,align:作用與前文所提到屬性相同alt:當(dāng)圖片未載入或者載入失敗時(shí)提供的替代性的文字說明表單標(biāo)簽很多網(wǎng)頁上,可以讓用戶在一些控件中輸入一些內(nèi)容,如文本框、密碼框等,輸入之后,提交,這些控件所在的區(qū)域叫做表單(form)。表單中的控件叫做表單元素。一個(gè)表單是這樣組成的:<formaction="提交地址"> 表單內(nèi)容(包括按鈕、輸入框、選擇框等)</form>表單標(biāo)簽表單最基本的標(biāo)簽是<input>標(biāo)簽,該標(biāo)簽可以用來顯示輸入框和按鈕等表單元素。它的屬性type決定了表單元素的類型,可以為以下的值:text:文本框,text也為type的默認(rèn)屬性password:密碼框radio:單選按鈕,可以將多個(gè)單選按鈕的name屬性設(shè)置相同,使其成為一組。checked屬性可設(shè)置默認(rèn)被選checkbox:復(fù)選框,checked屬性可設(shè)置默認(rèn)被選表單標(biāo)簽

reset:重置按鈕,按下之后,所有的表單元素內(nèi)容變?yōu)槟J(rèn)值button:普通按鈕submit:提交按鈕,按下之后,網(wǎng)頁會(huì)將表單的內(nèi)容提交給action設(shè)定的網(wǎng)頁,action的值為空時(shí)提交給本頁image:圖片,但是點(diǎn)擊它的效果與提交按鈕一樣,都會(huì)提交表單表單標(biāo)簽表單中其他類型的表單元素還包括多行文本框和選擇菜單等。<textarea></textarea>表示多行文本框,可用rows屬性表示其行數(shù),cols屬性表示其列數(shù)。<select></select>表示下拉菜單,其中的選項(xiàng)使用<option>選項(xiàng)內(nèi)容</option>表示,multiple屬性可將其設(shè)置為可多選,size屬性的值為下拉菜單的顯示的項(xiàng)目數(shù)??蚣芸蚣艿膶懛ㄈ缦拢?/p>

<framesetcols="30%,70%"> <framesrc="left.html"noresizescrolling="no"name="left"></frame> <framesrc="right.html"noresizescrolling="no"name="right"></frame> </frameset>框架<frameset></frameset>的屬性有:rows:橫向分割網(wǎng)頁。屬性值決定了分割頁面之間的寬度的比值。cols:縱向分割網(wǎng)頁。屬性值決定了分割頁面之間的長度的比值。border:框架邊框的寬度。當(dāng)值為0時(shí),表示沒有邊框。

注:<frameset></frameset>是可以嵌套使用的,所以可以構(gòu)造很多不同類型的頁面??蚣?lt;frame></frame>的屬性有:src:表示框架內(nèi)容的地址。noresize:表示該框架不可被用戶改變大小。scrolling:表示是否有滾動(dòng)條。本章結(jié)束本章總結(jié)靜態(tài)網(wǎng)頁制作HTML中的常見標(biāo)簽表格標(biāo)簽鏈接和圖片標(biāo)簽表單標(biāo)簽框架上機(jī)習(xí)題第3章JavaScript基礎(chǔ)本課教學(xué)內(nèi)容JavaScript簡介JavaScript內(nèi)置對象JavaScript簡介JavaScript是一種網(wǎng)頁腳本語言,雖然名字中含有Java,但它與Java語言是完全兩種不同的語言。不過,JavaScript的語法與Java語言的語法非常類似

JavaScript簡介JavaScript代碼可以很容易地嵌入到HTML頁面中。瀏覽器對JavaScript腳本程序進(jìn)行解釋執(zhí)行。第一個(gè)JavaScript程序JavaScript與Java一樣,對大小寫是敏感的在JavaScript中,注釋有三種寫法:一種是HTML注釋的寫法:<!—注釋內(nèi)容-->,還有兩種和Java語言相同,分別為:"http://單行注釋"和"/*多行注釋*/"第一個(gè)JavaScript程序除了可以將JavaScript代碼嵌入HTML中之外,還可以專門將JavaScript代碼寫在單獨(dú)的文件中:

window.alert("第一個(gè)JavaScript程序"); 然后在另外的HTML頁面中插入:

<scriptsrc="code.js"type="text/javascript"></script>

來導(dǎo)入該文件JavaScript語法變量定義JavaScript中的變量為弱變量類型,即變量的類型根據(jù)它被賦值的類型改變,定義一個(gè)變量使用的格式為:"var變量名",比如定義變量arg,就可以使用"vararg";如果將一個(gè)字符串賦給它,它就是String類型,如果將一個(gè)數(shù)組賦給它,它的類型也就是數(shù)組類型需要注意的是,JavaScript中變量未聲明就使用是不會(huì)報(bào)錯(cuò)的,但很容易出現(xiàn)不可預(yù)知的錯(cuò)誤,所以建議所有變量先聲明后使用。JavaScript語法變量定義JavaScript語法函數(shù)定義JavaScript中定義一個(gè)函數(shù)的基本格式是: function函數(shù)名(參數(shù)列表){ return值; } 也可以在使用中直接匿名定義: vararg1=function(參數(shù)列表){ return值; }JavaScript內(nèi)置對象除了在代碼里面進(jìn)行簡單的編程之外,我們還可以通過JavaScript提供的內(nèi)置對象來對網(wǎng)頁進(jìn)行操作,內(nèi)置對象由瀏覽器提供,可以直接使用,不用事先定義。比如,在上例中的window.alert("第一個(gè)JavaScript程序"),其中window就是一個(gè)內(nèi)置對象JavaScript內(nèi)置對象使用最多的內(nèi)置對象有四個(gè),并且之后的學(xué)習(xí)也將主要圍繞著四個(gè)對象展開: window:負(fù)責(zé)操作瀏覽器窗口,負(fù)責(zé)窗口狀態(tài),開閉等 document:負(fù)責(zé)操作瀏覽器載入的文檔(HTML文件)。它從屬于window history:可以代替后退(前進(jìn))按鈕訪問歷史記錄,從屬于windowlocation:訪問地址欄,也是從屬于windowwindow對象window對象的作用有如下幾個(gè):出現(xiàn)提示框window對象可以跳出提示框。主要有如下功能:window.alert("內(nèi)容"):出現(xiàn)消息框window.confirm("內(nèi)容"):出現(xiàn)確認(rèn)框mpt("內(nèi)容"):出現(xiàn)輸入框window對象window對象的作用有如下幾個(gè):打開、關(guān)閉窗口 window.open()在網(wǎng)頁制作中使用非常廣泛,參數(shù)有3個(gè),第1個(gè)是新窗口的地址,第2個(gè)是新窗口名稱,第3個(gè)是新窗口狀態(tài),其中新窗口狀態(tài)的屬性可設(shè)置的有: toolbar:是否有工具欄,可選1和0 location:是否有地址欄,可選1和0 status:是否有狀態(tài)欄,可選1和0

window對象window對象的作用有如下幾個(gè):打開、關(guān)閉窗口 menubar:是否有菜單條,可選1和0 scrollbars::是否有滾動(dòng)條,可選1和0 resizable::是否有可改變大小,可選1和0 width,height:窗口的寬度和高度,用像素表示 left,top:窗口左上角相對于桌面左上角的x和y坐標(biāo)。 各屬性值用逗號隔開。如:

newWindow=window.open("window1.html","new1", "toolbar=0,width=300,height=300,top=500,left=500");

window對象window對象的作用有如下幾個(gè):定時(shí)器window對象負(fù)責(zé)管理和控制頁面的定時(shí)器,定時(shí)器的作用是讓某個(gè)函數(shù)隔一段時(shí)間之后運(yùn)行一次,格式為:

timer=window.setTimeout("需要運(yùn)行的函數(shù)","時(shí)間(用毫秒計(jì))");如果要清除定時(shí)器,則可以:

clearTimeout(timer);history對象history對象包含用戶的瀏覽歷史等信息,用到這個(gè)對象的原因,是因?yàn)樗梢源婧笸?前進(jìn))按鈕訪問歷史記錄,該對象從屬于window。history對象history最常用的函數(shù)為:history.back():返回上一頁,相當(dāng)于點(diǎn)了瀏覽器上的后退按鈕history.forward():返回下一頁,相當(dāng)于點(diǎn)了瀏覽器上的前進(jìn)按鈕window.history.go(n):n為整數(shù),正數(shù)表示向前進(jìn)n格頁面,負(fù)數(shù)表示向后退n格頁面document對象document對象從屬于window,其功能如下:在網(wǎng)頁上輸出writeln()函數(shù)為輸出一些簡單卻重復(fù)的代碼提供很大的便利,在下面一個(gè)例子中,將要使用表格顯示出一個(gè)8*8的國際象棋棋盤,正常的方法需要寫一個(gè)8行8列的表格代碼,那樣會(huì)使源代碼非常的冗長,借助writeln()和循環(huán)方法,省去了很多HTML代碼的編寫。document對象document對象document對象從屬于window,其功能如下:設(shè)置網(wǎng)頁的屬性document可以進(jìn)行一些簡單網(wǎng)頁屬性的設(shè)置,如網(wǎng)頁標(biāo)題、顏色等,并且可以得到網(wǎng)頁的某些屬性,如當(dāng)前地址。比較常用的有:通過document.title來訪問標(biāo)題,通過document.location來獲取網(wǎng)頁當(dāng)前的地址document對象document對象從屬于window,其功能如下:訪問文檔元素,特別是表單元素document可以訪問文檔中的元素(如圖片、表單、表單中的控件等),前提是元素的name屬性是確定的。訪問方法為:document.元素名.子元素名。比如,名為form1的表單中有一個(gè)文本框account,其中的內(nèi)容可以用如下代碼獲得:

varaccount=document.form1.account.value;

location對象location對象可以訪問瀏覽器地址欄,也是從屬于window,最常見功能就是跳轉(zhuǎn)到另一個(gè)網(wǎng)頁。跳轉(zhuǎn)的方法就是修改location的href屬性。如:window.location.href=”page.html”location對象location對象另一個(gè)比較常見的應(yīng)用是定時(shí)跳轉(zhuǎn)。需要結(jié)合window的定時(shí)器使用。具體代碼見課本示例。本章結(jié)束本章總結(jié)JavaScript簡介JavaScript內(nèi)置對象上機(jī)習(xí)題第4章JSP基本語法本課教學(xué)內(nèi)容第一個(gè)JSP頁面注釋jsp表達(dá)式、程序段和聲明URL傳值jsp指令和動(dòng)作第一個(gè)JSP頁面JSP屬于動(dòng)態(tài)網(wǎng)頁,動(dòng)態(tài)網(wǎng)頁隨時(shí)都可以遇到。當(dāng)在google上輸入關(guān)鍵詞,如"Java"時(shí),提交搜索,google能夠?qū)⑺信cJava有關(guān)的搜索結(jié)果呈現(xiàn)在頁面上。此時(shí),google在服務(wù)器端進(jìn)行了一次搜索工作,這次搜索工作顯然不可能是人工完成的,人工不可能在幾秒的時(shí)間之內(nèi),搜索到成千上萬的結(jié)果。因此,搜索過程是程序完成的,程序進(jìn)行了查詢數(shù)據(jù)庫的操作。HTML不能夠查詢數(shù)據(jù)庫,Java代碼卻訪問數(shù)據(jù)庫。因此,在HTML代碼中間混合Java代碼,就能夠讓網(wǎng)頁擁有動(dòng)態(tài)的功能。而嵌入了Java代碼的網(wǎng)頁,就是JSP。JSP與HTML區(qū)別JSP和HTML有什么區(qū)別?

HTML頁面是靜態(tài)頁面,也就是事先由用戶寫好放在服務(wù)器上,由Web服務(wù)器向客戶端發(fā)送。JSP頁面是由JSP容器執(zhí)行該頁面的Java代碼部分,然后,實(shí)時(shí)生成的HTML頁面,因而說其是服務(wù)器端動(dòng)態(tài)頁面。JSP與JavaScript區(qū)別頁面效果,用JavaScript也能夠?qū)崿F(xiàn),有何區(qū)別?最大的區(qū)別是:JavaScript源代碼是被服務(wù)器發(fā)送到客戶端,由客戶端執(zhí)行,因此,客戶端可以看到JavaScript源代碼;而Java代碼卻不會(huì)。注釋JSP注釋可以分為兩類:一類是能發(fā)送給客戶端,可以在源代碼文件中顯示出其內(nèi)容。主要是以HTML注釋語法出現(xiàn)。格式為:<!--注釋內(nèi)容-->注釋另一類是不能發(fā)送給客戶端的,也就是說不會(huì)在客戶端的源代碼文件中顯示其內(nèi)容,僅提供給程序員閱讀的,分為兩種:

JSP注釋語法:<%--注釋內(nèi)容--%>Java代碼注釋://注釋內(nèi)容 /*注釋內(nèi)容*/表達(dá)式JSP表達(dá)式的作用是定義JSP的一些輸出。表達(dá)式基本語法如下所示: <%=變量/返回值/表達(dá)式%>JSP表達(dá)式的作用是將其里面內(nèi)容所運(yùn)算的結(jié)果輸出到客戶端表達(dá)式例:“<%=msg%>”是JSP表達(dá)式,即將msg內(nèi)容輸出給客戶端。等價(jià)于“<%out.print(msg);%>”。表達(dá)式使用JSP表達(dá)式,需要注意幾個(gè)細(xì)節(jié):JSP表達(dá)式中不能用";"結(jié)束在JSP表達(dá)式中不能出現(xiàn)多條語句JSP表達(dá)式的內(nèi)容一定是字符串類型,或者能通過toString()函數(shù)轉(zhuǎn)換成字符串的形式

*詳細(xì)代碼示例見課本程序段如果需要在JSP程序中既要輸出數(shù)據(jù),也要實(shí)現(xiàn)定義變量等一系列復(fù)雜的邏輯操作,表達(dá)式是不能滿足要求的,這時(shí)候需要JSP程序段。實(shí)際上,JSP程序段就是插入到JSP程序的Java代碼段。程序段JSP程序段的用法如下:

<%Java代碼%>不能在JSP程序段中定義方法。JSP中可以放入HTML,也可以放入JSP程序段和JSP表達(dá)式,可以靈活地混合使用。JSP聲明JSP中提供了聲明,JSP聲明中可以定義網(wǎng)頁中的全局變量,這些變量在JSP頁面中的任何地方都能夠使用。在實(shí)際的應(yīng)用中,方法、頁面全局變量、甚至類的聲明都可以放在JSP聲明部分。JSP聲明使用方法如下:

<%!代碼%>可以看到其與JSP程序段的用法相似(只是多了一個(gè)感嘆號),但功能卻有所不同。在JSP程序段中定義的變量只能先聲明后使用。而JSP聲明中定義的變量是網(wǎng)頁級別的,系統(tǒng)會(huì)優(yōu)先執(zhí)行,也就是說使用JSP聲明可以在JSP的任何地方定義變量。JSP聲明使用JSP聲明時(shí),要注意:在JSP聲明中,只能定義,不能實(shí)現(xiàn)控制邏輯。如:不能在其中使用out.println作輸出操作。URL傳值HTTP是無狀態(tài)的協(xié)議。Web頁面本身無法向下一個(gè)頁面?zhèn)鬟f信息,如果需要讓下一個(gè)頁面得知該頁面中的值,除非通過服務(wù)器。Web頁面之間傳遞數(shù)據(jù),是Web程序的重要功能,其流程如圖:URL傳值客戶端頁面1輸入guokehua客戶端頁面2顯示guokehuaP2發(fā)送guokehua響應(yīng)服務(wù)器URL傳值URL,通俗地說,就是網(wǎng)址。如:http://localhost:8080/Prj04/page.jsp,表示訪問項(xiàng)目Prj04中的page.jsp,但是還可以在該頁面后面給出一些參數(shù),格式是,在原url后面添加:

?參數(shù)名1=參數(shù)值1&參數(shù)名2=參數(shù)值2&……如:http://localhost:8080/Prj04/page.jsp?m=3&n=5表示訪問http://localhost:8080/Prj04/page.jsp,并給其傳送參數(shù)m,值為3,參數(shù)n,值為5。URL傳值在http://localhost:8080/Prj04/page.jsp中獲得m和n的方法是:<%//獲得參數(shù)m,賦值給strStringstr=request.getParameter("m");%>URL傳值URL傳值的局限性:傳輸?shù)臄?shù)據(jù)只能是字符串,對數(shù)據(jù)類型具有一定限制傳輸數(shù)據(jù)的值會(huì)在瀏覽器地址欄里面被看到, 秘密性要求很嚴(yán)格的數(shù)據(jù)(如密碼),不應(yīng)該用URL方法來傳值URL傳值URL傳值的優(yōu)勢: 簡單性和平臺支持的多樣性(沒有瀏覽器不支持URL),很多程序還是用URL傳值比較方便JSP指令和動(dòng)作JSP指令告訴JSP引擎對JSP頁面如何編譯,不包含控制邏輯,不會(huì)產(chǎn)生任何可見的輸出。其用法如下:

<%@指令類別屬性1="屬性值1"屬性n="屬性值n"%>*注意,屬性名大小寫是敏感的JSP指令和動(dòng)作JSP包含三個(gè)指令:page、include和taglib。其中,使用最多的是page指令和include指令JSP指令page指令的作用有:導(dǎo)入包:<%@pageimport="包名.類名"%>設(shè)定字符集:

<%@pagepageEncoding="編碼類名"%>JSP指令page指令的作用有:設(shè)定錯(cuò)誤頁面:

在發(fā)生異常的頁面上寫:<%@pageerrorPage="anErrorPage.jsp"%>

在anErrorPage.jsp頁面上寫:<%@pageisErrorPage="true"%>JSP指令page指令的作用有:設(shè)定MIME類型和字符編碼:<%@pagecontentType="MIME類型;charset=字符編碼"%>JSP指令在實(shí)際的應(yīng)用開發(fā)中經(jīng)常會(huì)遇到這樣的情況:在項(xiàng)目的每一個(gè)頁面底下都需要顯示公司的地址和圖標(biāo)信息。顯然,不可能在每一個(gè)網(wǎng)頁都編寫一次顯示該信息的代碼。為了保證代碼重用,可以使用include指令解決該需求。JSP指令include指令可以在JSP程序中插入多個(gè)外部文件,這些文件可以是JSP、HTML或者Java程序,甚至是文本。編譯時(shí),include指令就會(huì)把相應(yīng)的文件包含進(jìn)主文件。其語法格式如下:<%@includefile="文件名"%>JSP動(dòng)作JSP動(dòng)作指使用XML語法格式的標(biāo)記來控制服務(wù)器的行為。其用法如下:<jsp:動(dòng)作名屬性1="屬性值1"屬性n="屬性值n"/><jsp:動(dòng)作名>相關(guān)內(nèi)容</jsp:動(dòng)作名>

JSP動(dòng)作JSP動(dòng)作包括:1.jsp:include:當(dāng)頁面被請求的時(shí)候引入一個(gè)文件。2.jsp:forward:將請求轉(zhuǎn)到另外一個(gè)頁面。3.jsp:useBean:獲得JavaBean的一個(gè)實(shí)例。4.jsp:setProperty:設(shè)置JavaBean的屬性。5.jsp:getProperty:獲得JavaBean的屬性。6.jsp:plugin根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED兩種標(biāo)記。JSP動(dòng)作兩個(gè)常見的JSP動(dòng)作:jsp:include:當(dāng)頁面被請求時(shí)引入一個(gè)文件 <jsp:includepage="文件名"/>或者<jsp:includepage="文件名">相關(guān)標(biāo)簽</jsp:include>JSP動(dòng)作include動(dòng)作和include指令的區(qū)別?1.include動(dòng)作只會(huì)把文件中的輸出包含進(jìn)來。因此,前一節(jié)中提及到的被包含頁面與本頁面有相同變量的問題,在此處不會(huì)出現(xiàn)問題。2.include動(dòng)作還會(huì)自動(dòng)檢查被包含文件的變化。也就是說,當(dāng)被包含資源的內(nèi)容發(fā)生變化的時(shí)候,使用include指令的話,服務(wù)器可能不會(huì)檢測到。但是,include動(dòng)作則可以在每次客戶端發(fā)出請求時(shí)重新把資源包含進(jìn)來,進(jìn)行實(shí)時(shí)的更新。JSP動(dòng)作jsp:forward:可以實(shí)現(xiàn)跳轉(zhuǎn)。<jsp:forwardpage="文件名"/>顯然,page屬性就是指定要跳轉(zhuǎn)到的目標(biāo)文件。當(dāng)該forward動(dòng)作被執(zhí)行后,當(dāng)前的頁面將不再被執(zhí)行,而是去執(zhí)行指定的目標(biāo)頁面。本章結(jié)束本章總結(jié)第一個(gè)JSP頁面注釋jsp表達(dá)式、程序段和聲明URL傳值jsp指令和動(dòng)作上機(jī)習(xí)題第5章表單開發(fā)本課教學(xué)內(nèi)容認(rèn)識表單單一表單元素?cái)?shù)據(jù)的獲取捆綁表單元素?cái)?shù)據(jù)的獲取隱藏表單其他問題表單開發(fā)表單是用戶和服務(wù)器之間進(jìn)行信息交互的重要手段,有了表單,JSP程序才可以更加豐富多彩。表單是一種可以由用戶輸入,并提交給服務(wù)器端的一個(gè)圖形界面。表單開發(fā)表單有如下性質(zhì):表單中可以輸入一些內(nèi)容,這些輸入功能由控件提供,叫做表單元素表單中一般都有一個(gè)按鈕負(fù)責(zé)提交點(diǎn)擊提交按鈕,表單元素中的內(nèi)容會(huì)提交給服務(wù)器端表單元素放在<form></form>之間表單開發(fā)表單是提交給服務(wù)器的,如何確定到底提交給哪一個(gè)界面?用<form>中的action屬性確定。如:<formaction="page.jsp"> 請您輸入賬號:<inputname="account"type="text"><BR> 請您輸入密碼:<inputname="password"type="password"><BR> <inputtype="submit"value="登錄"> </form>表示該表單中輸入的內(nèi)容,提交給page.jsp去運(yùn)行。表單開發(fā)page.jsp如何獲取提交過來的值?用request對象。如:<%//獲得表單中name=account的表單元素中輸入的值,賦值給strStringstr=request.getParameter("account");%>注意:如果表單中沒有name=account的表單元素,str為null;如果在表單元素account中沒有輸入任何內(nèi)容就提交,str為""。表單開發(fā)<inputtype="submit"value="登錄">表示提交按鈕,可以寫普通按鈕嗎?不行,如果將該按鈕改為:<inputtype="button"value="登錄">,顯示效果一樣,但是點(diǎn)擊,沒有提交功能。不過可以用JavaScript進(jìn)行提交。單一表單元素?cái)?shù)據(jù)的獲取單一表單元素,是指表單元素的值送給服務(wù)器端時(shí),僅僅是一個(gè)變量。這種情況下的表單元素主要有:文本框、密碼框、多行文本框、單選按鈕、下拉菜單等。單一表單元素?cái)?shù)據(jù)的獲取文本框、密碼框、多行文本框、單選按鈕和下拉菜單,其中的內(nèi)容的獲取方法均相同,利用request.getParameter("表單元素名")方法獲得一個(gè)字符串。*具體代碼示例見課本捆綁表單元素?cái)?shù)據(jù)的獲取捆綁表單元素,是指多個(gè)同名表單元素的值送給服務(wù)器端時(shí),是一個(gè)捆綁的數(shù)組。這種情況下的表單元素主要有:復(fù)選框、多選列表框、其他同名表單元素等。捆綁表單元素?cái)?shù)據(jù)的獲取具體獲得方法和一般表單元素類似,但在獲取數(shù)據(jù)時(shí),利用request.getParameterValues("表單元素名")方法來獲得字符串?dāng)?shù)組。*具體代碼示例見課本獲取其他同名表單元素中的數(shù)據(jù)

多個(gè)同名文本框是如何存儲在獲取到的數(shù)組里的?以文本框在源代碼中出現(xiàn)的順序,從數(shù)組的第0位開始向后放置。隱藏表單例子:頁面1中定義了一個(gè)數(shù)值變量,并顯示其平方;要求在頁面2中顯示其立方。很明顯,頁面2必須知道頁面1中定義的那個(gè)變量??梢杂肬RL傳值。但是通過URL方法,傳遞的數(shù)據(jù)可能被看到。為了避免這個(gè)問題,我們可以用表單將頁面1中的變量傳給頁面2,這個(gè)表單就可以設(shè)定為頁面1中的隱藏表單。隱藏表單網(wǎng)頁制作中,input有一type="hidden"的選項(xiàng),它是隱藏在網(wǎng)頁中的一個(gè)表單元素,并不在網(wǎng)頁中顯示出來。這就是實(shí)現(xiàn)隱藏表單的方法。實(shí)現(xiàn)方法:隱藏表單此時(shí)瀏覽器地址欄上的地址數(shù)據(jù)還是能夠被看到。解決該問題的方法是將form的action屬性設(shè)置為post(默認(rèn)為get)解決數(shù)據(jù)傳輸安全問題方法:隱藏表單隱藏表單的弊端和URL方法類似,該方法傳輸?shù)臄?shù)據(jù)只能是字符串,對數(shù)據(jù)類型具有一定限制傳輸數(shù)據(jù)的值雖然在瀏覽器地址欄內(nèi)不被看到,但是在客戶端源代碼里面也會(huì)被看到*具體代碼示例見課本用JavaScript進(jìn)行提交有時(shí)候,可能要對表單中的輸入進(jìn)行一些驗(yàn)證。如在登錄表單中,需要輸入的賬號密碼不能為空。因此,當(dāng)點(diǎn)擊提交按鈕時(shí),不能馬上提交,應(yīng)該調(diào)用JavaScript進(jìn)行驗(yàn)證,然后進(jìn)行提交。因此,提交按鈕的類型不能被設(shè)置為submit,而應(yīng)該設(shè)置為button。*具體代碼示例見課本中文亂碼問題如果使用的是Tomcat服務(wù)器,在提交過程中,如果提交的內(nèi)容中含有中文,經(jīng)常會(huì)出現(xiàn)中文亂碼問題。

中文亂碼問題中文無法顯示 沒有把文件頭上的字符集設(shè)置為中文字符集。一定要保證文件頭上寫明:<%@pagelanguage="java"pageEncoding="gb2312"%>或 <%@pagelanguage="java"contentType="text/html;charset=gb2312"%>

中文亂碼問題提交過程中顯示亂碼,有3種方法解決這個(gè)問題將其轉(zhuǎn)成gb2312格式直接修改request的編碼利用過濾器

中文亂碼問題將其轉(zhuǎn)成gb2312格式方法如下:變量(字符串)=newString(變量(字符串).getBytes("ISO-8859-1"),"gb2312")中文亂碼問題直接修改request的編碼可以將request的編碼修改為支持中文的編碼,這樣,整個(gè)頁面中的請求,都可以自動(dòng)轉(zhuǎn)為中文request.setCharacterEncoding("gb2312")中文亂碼問題利用過濾器 利用過濾器,可以對整個(gè)Web應(yīng)用進(jìn)行統(tǒng)一的編碼過濾,比較方便。該內(nèi)容在后面的章節(jié)中提到*具體代碼實(shí)例見課本本章結(jié)束本章總結(jié)表單開發(fā)隱藏表單其他問題上機(jī)習(xí)題第6章JSP訪問數(shù)據(jù)庫本課教學(xué)內(nèi)容JDBC簡介建立ODBC數(shù)據(jù)源JDBC操作使用PreparedStatement事務(wù)使用廠商驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫連接JDBC簡介商業(yè)應(yīng)用的后臺數(shù)據(jù)一般存放在數(shù)據(jù)庫中,很明顯,可以通過Java代碼來訪問數(shù)據(jù)庫。在Java技術(shù)系列中,訪問數(shù)據(jù)庫的技術(shù)叫做JDBC,它提供了一系列的API,讓Java語言編寫的代碼連接數(shù)據(jù)庫,對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行添加、刪除、修改和查詢JDBC簡介JDBC中以下類或接口java.sql.Connection:負(fù)責(zé)連接數(shù)據(jù)庫

java.sql.Statement:負(fù)責(zé)執(zhí)行數(shù)據(jù)庫SQL語句java.sql.ResultSet:負(fù)責(zé)存放查詢結(jié)果JDBC簡介針對不同類型的數(shù)據(jù)庫,JDBC機(jī)制中提供了"驅(qū)動(dòng)程序"的的概念。對于不同的數(shù)據(jù)庫,程序只需要使用不同的驅(qū)動(dòng)廠商驅(qū)動(dòng)連接數(shù)據(jù)庫JDBC簡介安裝數(shù)據(jù)庫廠商驅(qū)動(dòng),需要去各自的數(shù)據(jù)庫廠商網(wǎng)站下載驅(qū)動(dòng)包,用戶也許覺得很麻煩。此時(shí),微軟公司提供了一個(gè)解決的方案。在微軟公司的Windows中,預(yù)先設(shè)計(jì)了一個(gè)ODBC(OpenDatabaseConnectivity,開放數(shù)據(jù)庫互連)功能,由于ODBC是微軟公司的產(chǎn)品,因此它幾乎可以連接到所有在Windows平臺下運(yùn)行的數(shù)據(jù)庫,由它連接到特定的數(shù)據(jù)庫,不需要具體的驅(qū)動(dòng)。而JDBC就只需要連接到ODBC就可以了

JDBC簡介ODBC驅(qū)動(dòng)連接數(shù)據(jù)庫建立ODBC數(shù)據(jù)源在使用ODBC之前,需要配置ODBC的數(shù)據(jù)源,讓ODBC知道連接的具體數(shù)據(jù)庫ODBC支持連接到各種數(shù)據(jù)庫。如Oracle、MySQL、MSSQLServer等,具體的設(shè)置詳見課本圖解過程建立ODBC數(shù)據(jù)源在配置時(shí),要注意:access的數(shù)據(jù)源驅(qū)動(dòng)器都是32位的,64位機(jī)上可能會(huì)找不到access數(shù)據(jù)源驅(qū)動(dòng)器。對于64位機(jī),可以打開32位版本的ODBC管理工具,其界面和設(shè)置過程與32位的相同。由于JDK1.8及以上的版本都已經(jīng)不再包含access橋接驅(qū)動(dòng),在使用JDBC-ODBC橋接方式時(shí),需要下載access驅(qū)動(dòng)的jar包,具體操作方法大家可以參見其他詳細(xì)文檔。建立ODBC數(shù)據(jù)源操作如下:首先在控制面板中選擇"管理工具",雙擊"數(shù)據(jù)源(ODBC)圖標(biāo)"建立ODBC數(shù)據(jù)源操作如下:在"ODBC數(shù)據(jù)源管理器"的"系統(tǒng)DSN"選項(xiàng)卡中單擊"添加"按鈕建立ODBC數(shù)據(jù)源操作如下: 從彈出的"創(chuàng)建新數(shù)據(jù)源"窗口的數(shù)據(jù)源名稱列表中選擇"MicrosoftAccesDriver(*.mdb)"并單擊"完成"按鈕建立ODBC數(shù)據(jù)源操作如下:在彈出的"ODBCMicrosoftAccess安裝"窗口的"數(shù)據(jù)源名"文本框輸入自定義的數(shù)據(jù)源名稱,然后點(diǎn)擊"選擇"按鈕,選擇Access數(shù)據(jù)庫所在的目錄,得到的結(jié)果如圖JDBC操作JDBC的操作分為4個(gè)步驟:通過JDBC連接到ODBC,并獲取連接對象Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectionconn=DriverManager.getConnection("jdbc:odbc:DSSchool");JDBC操作

使用Statement接口運(yùn)行SQL語句Statementstat=conn.createStatement();stat.executeQuery(SQL語句);//查詢或者

stat.executeUpdate(SQL語句);//添加、刪除或修改

JDBC操作處理SQL語句運(yùn)行結(jié)果關(guān)閉數(shù)據(jù)庫連接:stat.close();conn.close();添加數(shù)據(jù)具體添加案例見課本在這里,重點(diǎn)介紹下面一句代碼: inti=stat.executeUpdate(sql);

它返回一個(gè)整型,意思為這條sql語句執(zhí)行受影響的行數(shù),即成功添加的條數(shù)刪除、修改數(shù)據(jù)具體代碼案例見課本兩種操作均調(diào)用stat.executeUpdate(sql),并返回一個(gè)整型量查詢數(shù)據(jù)具體代碼案例見課本查詢格式: ResultSetrs=stat.executeQuery(sql);查詢到的結(jié)果放入ResultSet中,實(shí)際上是一個(gè)小表格查詢數(shù)據(jù)游標(biāo) 是在ResultSet中一個(gè)可以移動(dòng)的指針,它指向一行數(shù)據(jù)。初始時(shí)指向第一行的前一行,實(shí)際上不指向任何數(shù)據(jù)。rs.next()可以將游標(biāo)移到下一行,它的返回值是一個(gè)布爾類型,即如果下一行有數(shù)據(jù)則返回為true,否則為flase。很明顯,可以使用rs.next()配上while循環(huán)來對結(jié)果進(jìn)行遍歷查詢數(shù)據(jù)游標(biāo) 當(dāng)游標(biāo)指向某一行,可以通過ResultSet的getXXX("列名")方法得到這一行的某個(gè)數(shù)據(jù), XXX是該列的數(shù)據(jù)類型,可以是String,也可以是int等,但是所有類型的數(shù)據(jù)都可以用getString()方法獲得。除了通過列名獲得數(shù)據(jù)外,還可以通過列的編號來獲得查詢數(shù)據(jù)關(guān)于游標(biāo)的注意 游標(biāo)的初始值并不是指向第1行數(shù)據(jù),而是指向第1行的前面那條數(shù)據(jù)。所以必須要運(yùn)行一次next()函數(shù)之后,才能從開始取數(shù)據(jù),如果強(qiáng)行取則會(huì)找不到該列而報(bào)錯(cuò)查詢數(shù)據(jù)關(guān)于游標(biāo)的注意從某一行中通過getXXX()方法取數(shù)據(jù)每一列只能取一次,超過一次,程序?qū)?huì)報(bào)錯(cuò),如果需要重復(fù)使用某列數(shù)據(jù),可以先定義一個(gè)變量,將取出的數(shù)據(jù)賦予它,再重復(fù)使用使用PreparedStatement引出 以添加數(shù)據(jù)為例,在很多情況下,具體需要添加的值,是由客戶自己輸入的,因此,應(yīng)該是一個(gè)個(gè)變量。該情況下,SQL語句的寫法就比較麻煩,而且依賴了變量,比較容易出錯(cuò)PreparedStatement解決了這個(gè)問題

使用PreparedStatementPreparedStatement是Statement的子接口,功能與Statement類似它在sql語句中使用了?代替了需要插入的參數(shù) 用PreperedStatement的setString(n,參數(shù))方法可以將第n個(gè)?用傳進(jìn)的參數(shù)代替。這樣做增加了程序的可維護(hù)性,也增加了程序的安全性事務(wù)在銀行轉(zhuǎn)賬時(shí),要對數(shù)據(jù)庫進(jìn)行兩個(gè)操作,即將一個(gè)賬戶的錢減少,將另一個(gè)賬戶的錢增多。但是由于操作的先后順序,如果在兩個(gè)操作之間發(fā)生故障,則會(huì)導(dǎo)致數(shù)據(jù)不一致。因此,需要設(shè)計(jì)一個(gè)事務(wù),在兩條語句都被執(zhí)行成功后,數(shù)據(jù)修改才被真正提交(Commit)放入數(shù)據(jù)庫,否則數(shù)據(jù)操作回滾(Rollback)事務(wù)在默認(rèn)情況下,executeUpdate函數(shù)會(huì)在數(shù)據(jù)庫中提交改變的結(jié)果,此時(shí),可以用Connection來定義該函數(shù)是否自動(dòng)提交改變結(jié)果,并進(jìn)行事務(wù)的提交或者回滾使用廠商驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫連接缺點(diǎn):這類驅(qū)動(dòng)程序的彈性較差,由于是數(shù)據(jù)庫廠商自己提供的專屬驅(qū)動(dòng)程序,往往只適用于自己的數(shù)據(jù)庫系統(tǒng),甚至只適合某個(gè)版本的數(shù)據(jù)庫系統(tǒng)。如果后臺數(shù)據(jù)庫換了一個(gè)或者版本升級了,則就有可能需要更換數(shù)據(jù)庫驅(qū)動(dòng)程序優(yōu)點(diǎn):跨平臺使用廠商驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫連接使用廠商驅(qū)動(dòng),有2個(gè)步驟: 到相應(yīng)的數(shù)據(jù)庫廠商網(wǎng)站上下載廠商驅(qū)動(dòng),或者從數(shù)據(jù)庫安裝目錄下找到相應(yīng)的廠商驅(qū)動(dòng)包,拷貝到項(xiàng)目的WEB-INF/lib下。在JDBC代碼中,設(shè)定特定的驅(qū)動(dòng)程序名稱和url,

不同的驅(qū)動(dòng)程序和不同的數(shù)據(jù)庫可以采用不同的驅(qū)動(dòng)名稱和url。使用廠商驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫連接常見數(shù)據(jù)庫的驅(qū)動(dòng)程序名稱和url如下 MSSQLServer:驅(qū)動(dòng)程序?yàn)椋?com.microsoft.jdbc.sqlserver.SQLServerDriver",url為:"jdbc:microsoft:sqlserver://[IP]:1433;DatabaseName=[DBName];user=[user];password=[password]"使用廠商驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫連接 Oracle:驅(qū)動(dòng)程序?yàn)椋?oracle.jdbc.driver.OracleDriver",url為:"jdbc:oracle:thin:@[ip]:1521:[sid]"使用廠商驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫連接 MySQL:驅(qū)動(dòng)程序?yàn)椋?com.mysql.jdbc.Driver",url為:"jdbc:mysql://localhost:3306/[DBName]"使用廠商驅(qū)動(dòng)進(jìn)行數(shù)據(jù)庫連接程序能夠正常工作的前提是:必須將相應(yīng)的包拷貝到Web項(xiàng)目中去,否則會(huì)拋出異常。本章結(jié)束本章總結(jié)ODBC數(shù)據(jù)源的配置 數(shù)據(jù)庫的增刪改查PreparedStatement和事務(wù)處理使用廠商驅(qū)動(dòng)上機(jī)習(xí)題第7章JSP內(nèi)置對象1本課教學(xué)內(nèi)容認(rèn)識JSP內(nèi)置對象out對象request對象response對象Cookie操作認(rèn)識JSP內(nèi)置對象內(nèi)置對象:指在JSP頁面中內(nèi)置的不需要定義就可以在網(wǎng)頁中直接使用的對象內(nèi)置對象預(yù)定義的原因:因?yàn)檫@些內(nèi)置對象有些能夠存儲參數(shù),有些能夠提供輸出,還有些能提供其他的功能,JSP程序員一般情況下使用這些內(nèi)置對象的頻率比較高認(rèn)識JSP內(nèi)置對象內(nèi)置對象特點(diǎn)內(nèi)置對象是自動(dòng)載入的,因此它不需要直接實(shí)例化內(nèi)置對象是通過Web容器來實(shí)現(xiàn)和管理的在所有的JSP頁面中,直接調(diào)用內(nèi)置對象都是合法的認(rèn)識JSP內(nèi)置對象JSP規(guī)范中定義了九種內(nèi)置對象,本章主要介紹前五種out對象:負(fù)責(zé)管理對客戶端的輸出request對象:負(fù)責(zé)得到客戶端的請求信息response對象:負(fù)責(zé)向客戶端發(fā)出響應(yīng)session對象:負(fù)責(zé)保存同一客戶端一次會(huì)話過程中的一些信息application對象:表示整個(gè)應(yīng)用的環(huán)境的信息認(rèn)識JSP內(nèi)置對象exception對象:表示頁面上發(fā)生的異常,可以通過它獲得頁面異常信息page對象:表示的是當(dāng)前JSP頁面本身,就像Java類定義中的this一樣pageContext對象:表示的是此JSP的上下文config對象:表示此JSP的ServletConfigout對象out對象,對應(yīng)的類型是javax.servlet.jsp.JspWriterout對象的作用用來向客戶端輸出各種數(shù)據(jù)類型的內(nèi)容對應(yīng)用服務(wù)器上的輸出緩沖區(qū)進(jìn)行管理out對象out輸出的主要有2個(gè)方法:voidprint()voidprintln()out對象out對象一些常用的與管理緩沖區(qū)有關(guān)的函數(shù):voidclose():關(guān)閉輸出流,從而可以強(qiáng)制終止當(dāng)前頁面的剩余部分向?yàn)g覽器輸出voidclearBuffer():清除緩沖區(qū)里的數(shù)據(jù),并且把數(shù)據(jù)寫到客戶端去voidclear():清除緩沖區(qū)里的數(shù)據(jù),但不把數(shù)據(jù)寫到客戶端去out對象out對象一些常用的與管理緩沖區(qū)有關(guān)的函數(shù):intgetRemaining():獲取緩沖區(qū)中沒有被占用的空間的大小voidflush():輸出緩沖區(qū)的數(shù)據(jù)。out.flush()函數(shù)也會(huì)清除緩沖區(qū)中的數(shù)據(jù),但是此函數(shù)先將之前緩沖區(qū)的數(shù)據(jù)輸出至客戶端,然后再清除緩沖區(qū)的數(shù)據(jù)intgetBufferSize():獲得緩沖區(qū)的大小request對象request對應(yīng)類型是javax.servlet.http.HttpServletRequestrequest包含的方法StringgetMethod():得到提交方式StringgetRequestURI():得到請求的URL地址StringgetProtocol():得到協(xié)議名稱request對象request包含的方法StringgetServletPath():獲得客戶端請求服務(wù)器文件的路徑StringgetQueryString():得到URL的查詢部分,對post請求來說,該方法得不到任何信息request對象request包含的方法StringgetServerName():得到服務(wù)器的名稱StringgetServerPort():得到服務(wù)器口號StringgetRemoteAddr():得到客戶端的IP地址

*具體代碼示例見課本request對象request對象獲取客戶端得參數(shù)常用的是通過2個(gè)方法:StringgetParameter(Stringname):獲得客戶端傳送給服務(wù)器的name參數(shù)的值。當(dāng)傳遞給此函數(shù)的參數(shù)名沒有實(shí)際參數(shù)與之對應(yīng)時(shí),則返回nullString[]getParameterValues(Stringname):以字符串?dāng)?shù)組的形式返回指定參數(shù)所有值response對象response與reuqest是一對相對應(yīng)的內(nèi)置對象,response可以理解為客戶端的響應(yīng),request可以理解為客戶端的請求,二者所表示范圍是相對應(yīng)的2個(gè)部分,具有很好的對稱性。response對應(yīng)的類(接口)是:javax.servlet.http.HttpServletResponse??梢酝ㄟ^查找文檔中javax.servlet.http.HttpServletResponse來了解response的API利用response對象進(jìn)行重定向重定向:就是跳轉(zhuǎn)到另一個(gè)頁面重定向方法為:

response.sendRedirect(目標(biāo)頁面路徑); <jsp:forwardpage=""></jsp:forward>

兩種重定向方法的不同從瀏覽器的地址顯示上來看forward方法屬于服務(wù)器端去請求資源,服務(wù)器直接訪問目標(biāo)地址,并對該目標(biāo)地址的響應(yīng)內(nèi)容進(jìn)行讀取,再把讀取的內(nèi)容發(fā)給瀏覽器,因此客戶端瀏覽器的地址不變兩種重定向方法的不同從瀏覽器的地址顯示上來看redirect是告訴客戶端,使瀏覽器知道去請求哪一個(gè)地址,相當(dāng)于客戶端重新請求一遍。所以地址顯示欄會(huì)變兩種重定向方法的不同從數(shù)據(jù)共享來看forward轉(zhuǎn)發(fā)的頁,以及轉(zhuǎn)發(fā)到的目標(biāo)頁面能夠共享request里面的數(shù)據(jù)redirect轉(zhuǎn)發(fā)的頁以及轉(zhuǎn)發(fā)到的目標(biāo)頁面不能共享request里面的數(shù)據(jù)兩種重定向方法的不同從功能來看redirect能夠重定向到當(dāng)前應(yīng)用程序的其他源,而且還能夠重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點(diǎn)的資源兩種重定向方法的不同從功能來看forward方法只能在同一個(gè)Web應(yīng)用程序內(nèi)的資源之間轉(zhuǎn)發(fā)請求,可以理解為服務(wù)器內(nèi)部的一種操作兩種重定向方法的不同從效率來看forward效率較高,因?yàn)樘D(zhuǎn)僅發(fā)生在服務(wù)器端redirect相對較低,因?yàn)轭愃朴谠龠M(jìn)行了一次請求使用頻率不是很高的一種重定向sendError():向客戶端發(fā)送HTTP狀態(tài)碼的出錯(cuò)信息使用頻率不是很高的一種重定向常見的錯(cuò)誤代碼有:400:BadRequest,請求出現(xiàn)語法錯(cuò)誤401:Unauthorized,客戶試圖未經(jīng)授權(quán)訪問受密碼保護(hù)的頁面403:Forbidden,資源不可用404:NotFound,無法找到指定位置的資源500:InternalServerError,服務(wù)器遇到了無法預(yù)料的情況,不能完成客戶的請求利用response設(shè)置HTTP頭HTTP頭一般用來設(shè)置網(wǎng)頁的基本屬性response的setHeader()方法來進(jìn)行設(shè)置 response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires",0);以上都是表示在客戶端緩存中不保存頁面的拷貝Cookie操作Cookie是一個(gè)小的文本數(shù)據(jù),由服務(wù)器端生成,發(fā)送給客戶端瀏覽器,客戶端瀏覽器如果設(shè)置為啟用Cookie,則會(huì)將這個(gè)小文本數(shù)據(jù)保存到某個(gè)目錄下的文本文件內(nèi)。下次登錄同一網(wǎng)站,客戶端瀏覽器則會(huì)自動(dòng)將Cookie讀入之后,傳給服務(wù)器端。一般情下,Cookie中的值是以key-value的形式進(jìn)行表達(dá)的Cookie操作Cookie操作主要用到以下幾個(gè)方法:response.addCookie(Cookiec):通過該方法,將Cookie寫入客戶端Cookie.setMaxAge(intsecond):通過該方法,設(shè)置Cookie的存活時(shí)間。參數(shù)表示存活Cookie操作從客戶端獲取Cookie內(nèi)容,主要通過以下方法:Cookie[]request.getCookies():讀取客戶端傳過來的Cookie,以數(shù)組形式返回Cookie的盜取盜取的方法:利用跨站腳本技術(shù),將信息發(fā)給目標(biāo)服務(wù)器;為了隱藏URL,甚至可以結(jié)合Ajax(異步Javascript和XML技術(shù))在后臺竊取CookieCookie的盜取通過某些軟件,竊取硬盤下的Cookie。一般說來,當(dāng)用戶訪問完某站點(diǎn)后,Cookie文件會(huì)存在機(jī)器的某個(gè)文件夾下,因此可以通過某些盜取和分析軟件來盜取CookieCookieCookie在Web編程中應(yīng)用很廣的原因:Cookie的值能夠持久化,即使客戶端機(jī)器關(guān)閉,下次打開還是可以得到里面的值Cookie可以幫助服務(wù)器端保存多個(gè)狀態(tài)信息,但是不用服務(wù)器端專門分配存儲資源Cookie可以持久保持一些和客戶相關(guān)的信息解決Cookie安全的方法方法有以下幾種替代Cookie。將數(shù)據(jù)保存在服務(wù)器端,可選的是session方案及時(shí)刪除Cookie解決Cookie安全的方法要?jiǎng)h除一個(gè)已經(jīng)存在的Cookie,有以下幾種方法:給一個(gè)Cookie賦以空置設(shè)置Cookie的失效時(shí)間為當(dāng)前時(shí)間,讓該Cookie在當(dāng)前頁面的瀏覽完之后就被刪除了解決Cookie安全的方法通過瀏覽器刪除Cookie。如在IE中,可以選擇"工具"——"Internet選項(xiàng)"——"常規(guī)",在里面點(diǎn)擊"刪除Cookies",就可以刪除文件夾中的Cookie禁用Cookie。很多瀏覽器中都設(shè)置了禁用Cookie的方法,如IE中,可以在"工具"——"Internet選項(xiàng)"——"隱私"中,將隱私級別設(shè)置為禁用Cookie本章結(jié)束本章總結(jié)JSP中的內(nèi)置對象Cookie的使用方法上機(jī)習(xí)題第8章JSP內(nèi)置對象2本課教學(xué)內(nèi)容利用session開發(fā)購物車session其他APIapplication對象其他對象利用session開發(fā)購物車購物車需求例子 想象用戶去購物超市買東西時(shí),都會(huì)推一個(gè)購物車,購物車中包含了用戶所需要購買的商品,用戶可以將商品添加到購物車,也可將商品從購物車中取出或刪除。用戶可以推著購物車從這個(gè)專柜走到那個(gè)專柜,用戶也不用擔(dān)心別人的購物車?yán)锩娴臇|西算到自己賬上,這在生活中已經(jīng)成為常識利用session開發(fā)購物車購物車的特點(diǎn)同一個(gè)用戶使用的是同一個(gè)購物車不同的用戶使用的是不同的購物車。否則,別人買的東西就會(huì)算到自己的賬上在不同貨架(頁面)之間進(jìn)行訪問時(shí),購物車中的內(nèi)容可以保持以上3點(diǎn)中,最關(guān)鍵的是“跨頁面保持”。利用session開發(fā)購物車實(shí)際上,JSP中的內(nèi)置對象session,就是跨頁面保持的,當(dāng)訪問網(wǎng)站時(shí),服務(wù)器端已經(jīng)分配了一個(gè)session對象給用戶使用,對于同一個(gè)用戶,不管在哪個(gè)頁面,他使用的都是同一個(gè)session。利用session開發(fā)購物車session,是JSP九大內(nèi)置對象之一,它對應(yīng)的類(接口)是:javax.servlet.http.HttpSession。可以通過查找文檔中javax.servlet.http.HttpSession來了解session的API。如何用session開發(fā)購物車一些session常用的API將內(nèi)容放入購物車voidsession.setAttribute(Stringname,Objectobj);在該函數(shù)里面,參數(shù)1:name就是來為每一個(gè)物品起一個(gè)屬性(attribute)的名字(標(biāo)記);參數(shù)2:obj,就是內(nèi)容本身如何用session開發(fā)購物車*針對放入的提醒:如果兩次調(diào)用setAttribute(Stringname,Objectobj);并且name相同,那么后面放進(jìn)去的內(nèi)容將會(huì)覆蓋以前放進(jìn)去的內(nèi)容setAttribute(Stringname,Objectobj);的第二個(gè)參數(shù)是Object類型,即可以放入session的不僅僅是一些簡單字符串,還可以是Object。集合、數(shù)據(jù)結(jié)構(gòu)對象都可以放入session。如何用session開發(fā)購物車一些session常用的API讀取購物車中的內(nèi)容Objectsession.getAttribute(Stringname);在該函數(shù)里面,name就是被取出的內(nèi)容所對應(yīng)的標(biāo)記;返回值,就是內(nèi)容本身。

*具體代碼示例見課本如何用session開發(fā)購物車實(shí)際項(xiàng)目中,可以使session中的內(nèi)容多種多樣

溫馨提示

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

最新文檔

評論

0/150

提交評論