Java Web開發(fā)教程-基于Struts2+Hibernate+Spring全套課件_第1頁
Java Web開發(fā)教程-基于Struts2+Hibernate+Spring全套課件_第2頁
Java Web開發(fā)教程-基于Struts2+Hibernate+Spring全套課件_第3頁
Java Web開發(fā)教程-基于Struts2+Hibernate+Spring全套課件_第4頁
Java Web開發(fā)教程-基于Struts2+Hibernate+Spring全套課件_第5頁
已閱讀5頁,還剩304頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第1章javaweb應(yīng)用開發(fā)概述1.1Web的概念1.2計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)1.3HTTP協(xié)議1.4本章小結(jié)第1章javaweb應(yīng)用開發(fā)概述.pptx第2章JavaWeb開發(fā)環(huán)境.pptx第3章JSP基礎(chǔ).pptx第4章JSP文件操作.pptx第5章JavaWeb的數(shù)據(jù)庫操作.pptx第6章Struts基礎(chǔ).pptx第7章Struts核心文件.pptx第8章Struts基本方法和關(guān)鍵技術(shù).pptx第9章Hibernate開發(fā)基礎(chǔ).pptx第10章Hibernate核心文件和接口.pptx第11章Spring基礎(chǔ).pptx第12章深入Spring技術(shù).pptx第13章SSH集成方法及綜合實(shí)例.pptx1.1.1Web的定義1.1.2JSP和其他Web編程語言1.1.3Web的相關(guān)標(biāo)準(zhǔn)1.1.4JSP開發(fā)Web應(yīng)用的四種方式1.1Web的概念在萬維網(wǎng)出現(xiàn)以前,用戶如果查詢信息時(shí)非常麻煩,不僅需要記住信息的地址,還要記住各種網(wǎng)絡(luò)命令,有了萬維網(wǎng),就不需要再像以前那樣死記硬背了,可以直接利用超級(jí)鏈接進(jìn)行網(wǎng)上沖浪。需要注意的是,萬維網(wǎng)和我們通常所說的互聯(lián)網(wǎng)是不同的,應(yīng)該說萬維網(wǎng)提供了在網(wǎng)上獲取資源的模式,而互聯(lián)網(wǎng)是保證萬維網(wǎng)正常運(yùn)行的手段,只有通過互聯(lián)網(wǎng)才能提供相關(guān)的資源獲取服務(wù)。1.1.1Web的定義JSP(JavaServerPages)是由SunMicrosystems公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo),與asp、php并列為三大后臺(tái)編程語言。JSP技術(shù)有點(diǎn)類似ASP技術(shù),它是在傳統(tǒng)的網(wǎng)頁HTML文件中插入Java程序段和JSP標(biāo)記,從而形成JSP文件。PHP(HypertextPreprocessor)是超級(jí)文本預(yù)處理語言的縮寫。它是一種HTML內(nèi)嵌式的語言,是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言,有點(diǎn)類似于C語言,PHP的語法混合了C、Java、Perl以及PHP自創(chuàng)的語法。1.1.2JSP和其他Web編程語言ASP.NET

是.NETFrameWork的一部分,是一種使嵌入網(wǎng)頁中的腳本可由因特網(wǎng)服務(wù)器執(zhí)行的服務(wù)器端腳本技術(shù),可以在通過HTTP請(qǐng)求文檔時(shí)再在Web服務(wù)器上動(dòng)態(tài)創(chuàng)建它們。在php/java/這三個(gè)開發(fā)語言中,jsp的優(yōu)勢(shì)是在企業(yè)級(jí)應(yīng)用、php的優(yōu)勢(shì)在于輕量級(jí)WEB應(yīng)用,一方面二者都可以跨操作平臺(tái)部署,另一方面比起.net來更輕巧和精簡(jiǎn)。php的安裝包,加上apache服務(wù)器,也就只有幾十兆大小;jsp更是只需jdk和appserver即可,加一起也就100多M,相反,.net安裝包不僅只能部署在windows下面,需要.netframework的支持。并且經(jīng)常大于1G,也給應(yīng)用者帶來了極大困惑和不便。

Web的三個(gè)主要標(biāo)準(zhǔn)。1.超文本標(biāo)記語言(HTML)HTML是一種制作Web網(wǎng)頁的標(biāo)準(zhǔn)語言。2.超文本傳輸協(xié)議(HTTP)HTTP是一種通信協(xié)議,它規(guī)定了客戶端(瀏覽器)與服務(wù)器之間信息交互的方式。3.統(tǒng)一資源定位符(URL)

在瀏覽器的地址欄中輸入的網(wǎng)站地址就是URL,每個(gè)網(wǎng)頁都有一個(gè)Internet地址。1.1.3Web的相關(guān)標(biāo)準(zhǔn)采用JSP開發(fā)Web應(yīng)用時(shí),通常根據(jù)項(xiàng)目的規(guī)模采用不同的模式,主要有以下四種方式:1.JSP+JavaBean開發(fā)模式2.Servlet+JSP+JavaBean開發(fā)模式3.JSP+Struts+HIbernate開發(fā)模式4.JSP+Struts+Spring+Hibernate開發(fā)模式1.1.4JSP開發(fā)Web應(yīng)用的四種方式1.2.1OSI模型1.2.2TCP/IP模型1.2.3B/S的應(yīng)用軟件架構(gòu)1.2計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)

OSI(OpenSystemInterconnect),即開放式系統(tǒng)互聯(lián)。通常叫做OSI參考模型,是ISO(國際標(biāo)準(zhǔn)化組織)組織在1985年研究的網(wǎng)絡(luò)互聯(lián)模型。該模型的目標(biāo)就是使各種計(jì)算機(jī)在世界范圍內(nèi)互連為網(wǎng)絡(luò)。OSI模型體系結(jié)構(gòu)標(biāo)準(zhǔn)定義了網(wǎng)絡(luò)互連的七層框架(物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層),即ISO開放系統(tǒng)互連參考模型。在這一框架下進(jìn)一步詳細(xì)規(guī)定了每一層的功能,以實(shí)現(xiàn)開放系統(tǒng)環(huán)境中的互連性、互操作性和應(yīng)用的可移植性。1.2.1OSI模型TCP/IP是一組用于實(shí)現(xiàn)網(wǎng)絡(luò)互連的通信協(xié)議。Internet網(wǎng)絡(luò)體系結(jié)構(gòu)以TCP/IP為核心?;赥CP/IP的參考模型將OSI模型的七層協(xié)議重新進(jìn)行了劃分,分別是:網(wǎng)絡(luò)訪問層、網(wǎng)際互聯(lián)層、傳輸層和應(yīng)用層等四個(gè)層次。1.2.2TCP/IP模型對(duì)開發(fā)人員來說,在項(xiàng)目開發(fā)過程中根據(jù)項(xiàng)目需要選擇不同的架構(gòu)。目前兩種流行的軟件體系結(jié)構(gòu)是C/S體系結(jié)構(gòu)和B/S體系結(jié)構(gòu)。B/S架構(gòu)是一種基于Internet的網(wǎng)絡(luò)結(jié)構(gòu)模式。該模式將系統(tǒng)邏輯功能的大部分實(shí)現(xiàn)集中到服務(wù)器上,客戶端只實(shí)現(xiàn)極少的事務(wù)邏輯,這樣就使得系統(tǒng)的開發(fā)、使用和維護(hù)都更加方便簡(jiǎn)潔。B/S結(jié)構(gòu)結(jié)合了瀏覽器的JavaScript、VBScript等多種腳本語言,使用通用的瀏覽器可以有效地節(jié)約了開發(fā)成本。在當(dāng)前的互聯(lián)網(wǎng)+的時(shí)代,B/S架構(gòu)已經(jīng)成為應(yīng)用軟件中首選的體系結(jié)構(gòu)。1.2.3B/S的應(yīng)用軟件架構(gòu)1.3.1什么是HTTP協(xié)議1.3.2URL含義1.3.3HTTP請(qǐng)求1.3.4HTTP響應(yīng)1.3HTTP協(xié)議HTTP是通用的、無狀態(tài)的、面向?qū)ο蟮膮f(xié)議。HTTP的版本分別是HTTP1.0,HTTP1.1和HTTP-NG。HTTP的消息分為請(qǐng)求消息和響應(yīng)消息。1.3.1什么是HTTP協(xié)議統(tǒng)一資源定位符URL用來標(biāo)識(shí)萬維網(wǎng)上的各種資源,URL由三部分組成:協(xié)議類型、主機(jī)名和路徑及文件名。HTTP的URL的一般格式為:http://host[“:”port][path]其中,http表示此處要使用HTTP協(xié)議來定位網(wǎng)絡(luò)資源;host表示表示合法的Internet主機(jī)域名,或者是主機(jī)的IP地址;port表示指定端口號(hào),默認(rèn)情況下,HTTP的端口號(hào)為80,可以省略;path表示請(qǐng)求資源的路徑,由零個(gè)或多個(gè)“/”符號(hào)間隔的字符串,表示主機(jī)上的一個(gè)目錄或文件地址,該參數(shù)可以省略,若沒有該項(xiàng),則URL會(huì)指向Internet上的某個(gè)主頁。1.3.2URL含義HTTP協(xié)議的請(qǐng)求包括請(qǐng)求行,請(qǐng)求報(bào)頭和請(qǐng)求體三部分。其中某些請(qǐng)求報(bào)頭和請(qǐng)求體的內(nèi)容是可選的,請(qǐng)求報(bào)頭和請(qǐng)求體之間需要用空行隔開。1.請(qǐng)求行請(qǐng)求行包含方法(Method),請(qǐng)求資源的URI(Request-URI)和HTTP版本(HTTP-Version)等三個(gè)內(nèi)容,2.請(qǐng)求報(bào)頭請(qǐng)求報(bào)頭包含客戶端請(qǐng)求的附加信息及自身信息。3.GET方法與POST方法1.3.3HTTP請(qǐng)求在接受到一個(gè)請(qǐng)求后,服務(wù)器會(huì)返回一個(gè)HTTP響應(yīng)。HTTP響應(yīng)包括狀態(tài)行、響應(yīng)報(bào)頭和響應(yīng)正文等三部分。1.狀態(tài)行狀態(tài)行包括HTTP版本(HTTP-Version)、狀態(tài)碼(Status-Code)以及解釋狀態(tài)碼的簡(jiǎn)單短語(Reason-phrase)三部分2.響應(yīng)報(bào)頭有了響應(yīng)報(bào)頭服務(wù)器就可以傳遞不能放在狀態(tài)行中的附加響應(yīng)信息,以及服務(wù)器的信息和對(duì)Request-URI所標(biāo)識(shí)的資源進(jìn)行下一步訪問的信息。3.響應(yīng)正文響應(yīng)正文是指服務(wù)器所返回的資源內(nèi)容,如HTML頁面。響應(yīng)報(bào)頭和響應(yīng)正文之間必須使用空行來分隔。1.3.4HTTP響應(yīng)

本章介紹了JavaWeb應(yīng)用開發(fā)的基本概念,主要內(nèi)容包括Web的定義,JSP,ASP.NET,PHP等Web編程語言的優(yōu)缺點(diǎn)比較,Web的相關(guān)標(biāo)準(zhǔn),JSP開發(fā)Web應(yīng)用的四種方式,計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)的OSI模型,TCP/IP模型,B/S的應(yīng)用軟件架構(gòu),HTTP協(xié)議的URL,HTTP請(qǐng)求和相應(yīng)等內(nèi)容。通過本章學(xué)習(xí),讀者能夠了解web的基本概念,瀏覽器與服務(wù)器之間是如何通過HTTP協(xié)議進(jìn)行通信的,并了解HTTP協(xié)議的請(qǐng)求和響應(yīng)的構(gòu)成。1.4本章小結(jié)第2章JavaWeb開發(fā)環(huán)境2.1Java開發(fā)包JDK2.2可視化集成開發(fā)環(huán)境Eclipse2.3Web服務(wù)器Tomcat2.4MySQL的下載與安裝2.5本章小結(jié)2.1.1JDK下載安裝2.1.2JDK部署測(cè)試2.1Java開發(fā)包JDKJDK有三個(gè)不同的開發(fā)版本,分別是:J2SE:標(biāo)準(zhǔn)版,主要用于開發(fā)桌面應(yīng)用程序。J2ME:微縮版,主要用來開發(fā)移動(dòng)設(shè)備、嵌入式設(shè)備上的Java應(yīng)用程序。J2EE:企業(yè)版,主要用來開發(fā)企業(yè)級(jí)應(yīng)用程序,如電子商務(wù)網(wǎng)站,ERP系統(tǒng)等。JDK的官方地址為:http://2.1.1JDK下載安裝JDK成功安裝后,要進(jìn)行JDK環(huán)境變量的配置。在JDK中需要配置JAVA_HOME、CLASSPATH和PATH等三個(gè)環(huán)境變量,其中CLASSPATH和PATH必須配置,JAVA_HOME可選。2.1.2JDK部署測(cè)試2.2.1Eclipse概述2.2.2Eclipse的體系結(jié)構(gòu)2.2.3

Eclipse的安裝及JDK集成2.2.4Eclipse開發(fā)Java程序2.2可視化集成開發(fā)環(huán)境EclipseEclipse是一個(gè)開放源碼的、基于Java的、可擴(kuò)展的開發(fā)平臺(tái)。是目前最流行的集成開發(fā)環(huán)境之一,使用它可以高效的完成Java程序的開發(fā)。Eclipse并不僅限于Java開發(fā),還支持C,PHP等多種編程語言的開發(fā)。Eclipse提供了一個(gè)框架,可以通過添加相應(yīng)的插件組件來構(gòu)建不同的開發(fā)環(huán)境。2.2.1Eclipse概述Eclipse平臺(tái)為開發(fā)者提供各種編程工具集成的機(jī)制和規(guī)則,這些機(jī)制通過應(yīng)用程序接口(API)、類和方法表現(xiàn)出來。本質(zhì)上,Eclipse是一組松散綁定,但互相連接的代碼塊。Eclipse平臺(tái)的結(jié)構(gòu)如圖:2.2.2Eclipse的體系結(jié)構(gòu)

可以從Eclipse官網(wǎng)http:///下載Eclipse的最新版本。目前,Eclipse的最新版是代號(hào)Mars

Eclipse

4.5版本。2.2.3

Eclipse的安裝及JDK集成Eclipse安裝完成后,就可以使用它來編寫一個(gè)簡(jiǎn)單的Java程序。2.2.4Eclipse開發(fā)Java程序2.3.1Tomcat概述2.3.2Tomcat的下載和安裝2.3.3在Eclipse中配置Tomcat2.3.4在Eclipse中測(cè)試Tomcat2.3.5Web應(yīng)用程序的部署2.3.6在Eclipse中部署Web應(yīng)用程序2.3Web服務(wù)器TomcatTomcat由Apache組織、Sun公司和其他參與人協(xié)作開發(fā)完成。Tomcat是開源的免費(fèi)軟件,技術(shù)先進(jìn),簡(jiǎn)單易用,穩(wěn)定性好,已成為流行的輕量級(jí)Web應(yīng)用服務(wù)器。Tomcat與平臺(tái)無關(guān)的,可以在任何一個(gè)裝有JVM的操作系統(tǒng)之上運(yùn)行。Tomcat最新發(fā)布的版本是Tomcat8.0.28。2.3.1Tomcat概述1.Tomcat下載目前,Tomcat服務(wù)器的最高版本是Tomcat8.0.28,本書采用的正是該版本的Tomcat服務(wù)器,可以登錄Tomcat官網(wǎng)下載需要的版本。2.Tomcat安裝(1)將下載的zip格式壓縮包進(jìn)行解壓(2)配置環(huán)境變量。(3)啟動(dòng)Tomcat。3.Tomcat配置(1)修改Tomcat服務(wù)器的端口號(hào)(2)添加一個(gè)用戶2.3.2Tomcat的下載和安裝Tomcat服務(wù)器下載并安裝好后,就可以在集成開發(fā)環(huán)境Eclipse中部署Tomcat,將Eclipse和Tomcat完美地結(jié)合在一起。在完成Eclipse和Tomcat服務(wù)器的集成之后,已經(jīng)可以進(jìn)行Web項(xiàng)目的開發(fā),但是有兩個(gè)細(xì)節(jié)問題還應(yīng)該注意:為開發(fā)Web項(xiàng)目指定瀏覽器和指定Eclipse中JSP頁面的編碼方式。1.為Eclipse設(shè)置瀏覽器2.指定JSP頁面的編碼方式2.3.3在Eclipse中配置Tomcat前面介紹了Eclipse中Tomcat的配置部署,本節(jié)將通過創(chuàng)建一個(gè)JavaWeb項(xiàng)目來測(cè)試配置部署是否正確,即創(chuàng)建一個(gè)JavaWeb項(xiàng)目并將其部署到Tomcat服務(wù)器中運(yùn)行2.3.4在Eclipse中測(cè)試Tomcat部署Web應(yīng)用的有三種方法。1.方法1:直接將程序放到webapps目錄2.方法2:修改server.xml文件3.方法3:創(chuàng)建配置文件進(jìn)行部署2.3.5Web應(yīng)用程序的部署

如何在Eclipse進(jìn)行Web應(yīng)用程序的部署呢?具體過程如下,(1)在ProjectExplorer視圖中選中firstWeb項(xiàng)目,單擊工具欄

按鈕中的三角標(biāo)志,在彈出的下拉菜單中選擇RunAs|RunonServer命令,打開“RunOnServer”對(duì)話框,如圖,勾選AlwaysusethisserverwhenRunningthisproject單選按鈕。其余步驟見書。2.3.6在Eclipse中部署Web應(yīng)用程序2.4.1MySQL簡(jiǎn)介2.4.2MySQL的下載2.4.3MySQL的安裝2.4.4MySQLWorkbench的使用2.4MySQL的下載與安裝MySQL是一個(gè)小型關(guān)系數(shù)據(jù)庫管理系統(tǒng),是開源的,使用結(jié)構(gòu)化查詢語言SQL進(jìn)行數(shù)據(jù)庫的管理。MySQL目前已經(jīng)被SUN公司收購,因其速度快,體積小和可靠性而引起廣泛關(guān)注,而其開放源碼的特點(diǎn),更是許多中小型網(wǎng)站選擇MySQL作為后臺(tái)數(shù)據(jù)庫的重要原因。與大型的關(guān)系型數(shù)據(jù)庫相比,MySQL規(guī)模小,操作簡(jiǎn)單,免費(fèi)。對(duì)于中小企業(yè)和個(gè)人學(xué)習(xí)來說,功能足夠。2.4.1MySQL簡(jiǎn)介可以在官網(wǎng)下載MySQL,目前MySQL的最新版本5.7.9。下面介紹下載MySQL5.7.9的過程。(1)在瀏覽器的地址欄中輸入/downloads/,進(jìn)入MySQL官方下載頁面,如圖2.40所示。點(diǎn)擊Windows|MySQLinstaller鏈接,進(jìn)入圖2.41界面,使用右側(cè)的滾動(dòng)條滾到下面可以看到MySQLInstaller5.7.9的下載鏈接,第一個(gè)是基于web的安裝包,第二個(gè)是本地安裝包,這里我們下載第二個(gè)安裝包。其余步驟見書。2.4.2MySQL的下載圖2.40圖2.412.4.3MySQL的安裝(1)雙擊下載的mysql-installer-community-.msi安裝文件,出現(xiàn)安裝向?qū)Ы缑?,單擊Next按鈕進(jìn)入如圖2.44所示界面。其余步驟見書。

點(diǎn)擊開始->所有程序->MySQL->MySQLWorkbench6.3CE,可以啟動(dòng)MySQLWorkbench可視化環(huán)境,如圖2.62所示。然后,輸入用戶名和密碼進(jìn)行登錄。2.4.4MySQLWorkbench的使用本章重點(diǎn)介紹了如何搭建JavaWeb開發(fā)環(huán)境,包括Java開發(fā)包JDK、可視化開發(fā)環(huán)境Eclipse、Web服務(wù)器Tomcat、關(guān)系數(shù)據(jù)庫管理系統(tǒng)MySQL等軟件的下載及安裝方法。學(xué)習(xí)本章的內(nèi)容時(shí),讀者應(yīng)該自己動(dòng)手完成搭建JavaWeb應(yīng)用開發(fā)環(huán)境,為下一步學(xué)習(xí)做好準(zhǔn)備。2.5本章小結(jié)第3章JSP基礎(chǔ)3.1JSP頁面3.2JSP語法3.3JSP內(nèi)置對(duì)象3.4JSP動(dòng)作標(biāo)簽3.5JavaBean的使用3.6Servlet的使用3.7本章小結(jié)3.1.1編寫JSP頁面文件3.1.2JSP的運(yùn)行分析3.1JSP頁面在HTML頁面文件中加入java程序片和JSP標(biāo)簽就構(gòu)成了一個(gè)JSP頁面文件。一個(gè)JSP頁面除了普通的HTML標(biāo)記符外,再使用標(biāo)記符號(hào)“<%”,“%>”加入Java程序段。JSP頁面文件的擴(kuò)展名為jsp,文件的名字必須符合操作系統(tǒng)的標(biāo)識(shí)符規(guī)定,JSP名字區(qū)分大小寫。為了明顯地區(qū)分普通的HTML標(biāo)記和Java程序片段以及JSP標(biāo)簽,可以用大寫字母書寫普通的HTML標(biāo)記符號(hào)。3.1.1編寫JSP頁面文件JSP的具體運(yùn)行過程分為以下步驟:(1)JSP容器先將該JSP文件轉(zhuǎn)換成JavaServlet源程序;(2)轉(zhuǎn)換成功,JSP容器將Java文件編譯成文件*.class。如果轉(zhuǎn)換過程中發(fā)現(xiàn)問題,則報(bào)錯(cuò);(3)Servlet容器加載.class文件,創(chuàng)建一個(gè)該Servlet的實(shí)例,并執(zhí)行Servlet的jspInit()方法;(4)執(zhí)行_jspService()方法來處理客戶端的請(qǐng)求;(5).jsp文件修改了,則服務(wù)器將根據(jù)設(shè)置決定是否對(duì)該文件重新編譯,如果需要重新編譯,則使用重新編譯后的結(jié)果取代內(nèi)存中常駐的Servlet,并繼續(xù)上述處理過程。(6)由于系統(tǒng)資源不足等原因,JSP容器調(diào)用jspDestroy()方法將Servlet從內(nèi)存中移去。(7)接著Servlet實(shí)例便被加入“垃圾收集”處理。(8)當(dāng)請(qǐng)求處理完成后,響應(yīng)對(duì)象由JSP容器接收,并將HTML格式的響應(yīng)信息發(fā)送回客戶端。3.1.2JSP的運(yùn)行分析3.2.1JSP聲明3.2.2JSP表達(dá)式3.2.3JSP注釋3.2.4JSP指令3.2JSP語法JSP在“<%!”和“%>”標(biāo)記符號(hào)之間聲明變量和方法。在“<%!”和“%>”標(biāo)記符之間聲明變量,即在“<%!”和“%>”之間放置Java的變量聲明語句,Java語言允許的任何數(shù)據(jù)類型變量的類型都可以是JSP變量,通常將這些變量稱為JSP頁面的成員變量。3.2.1JSP聲明可以在“<%=”和“%>”之間插入一個(gè)表達(dá)式,該表達(dá)式必須能求值。表達(dá)式的值由服務(wù)器負(fù)責(zé)計(jì)算,并將計(jì)算結(jié)果用字符串形式返回到客戶端。3.2.2JSP表達(dá)式JSP中的注釋包括HTML注釋和JSP注釋兩種,HTML注釋可以在客戶端顯示的注釋,JSP注釋發(fā)送到服務(wù)器端,在客戶端不能顯示的注釋。1.HTML注釋以<!--開始,以-->結(jié)束,中間為注釋部分。2.JSP注釋<%--開始,以--%>結(jié)束,中間為注釋部分。3.2.3JSP注釋JSP指令向JSP引擎提供編譯信息。JSP指令可以設(shè)置全局變量,如聲明類、要實(shí)現(xiàn)的方法和輸出內(nèi)容的類型等。通常JSP指令在整個(gè)頁面范圍內(nèi)有效,且并不向客戶端產(chǎn)生任何輸出。所有的JSP指令都只在當(dāng)前的頁面中有效。JSP指令包括include指令、page指令、和taglib指令等有三類指令。1.include指令該指令是文件加載指令,用于在JSP文件中插入一個(gè)文件。文件可以包含文本或代碼。2.page指令page指令用來定義JSP頁面的全局屬性,會(huì)作用于整個(gè)JSP頁面。3.taglib指令taglib指令,其實(shí)就是定義一個(gè)標(biāo)簽庫以及自定義標(biāo)簽的前綴。3.2.4JSP指令3.3.1JSP內(nèi)置對(duì)象概述3.3.2request對(duì)象3.3.3response對(duì)象3.3.4out對(duì)象3.3.5session對(duì)象3.3.6application對(duì)象3.3JSP內(nèi)置對(duì)象JSP2.0規(guī)范中定義了9種內(nèi)置對(duì)象,這9個(gè)內(nèi)置對(duì)象都是ServletAPI接口的實(shí)例,由JSP規(guī)范對(duì)它們進(jìn)行了默認(rèn)初始化,因此直接使用。這些內(nèi)置對(duì)象的名稱、相對(duì)應(yīng)的類和作用域如表3.1所示。3.3.1JSP內(nèi)置對(duì)象概述內(nèi)置對(duì)象名稱相對(duì)應(yīng)的類作用域requestjavax.servlet.ServletRequestrequestresponsejavax.servlet.ServletResponsepagepageContextjavax.servlet.jsp.pageContextsessionsessionjavax.servlet.http.HttpSessionpageapplicationjavax.servlet.ServletContextapplicationoutjavax.servlet.jsp.JspWriterpageconfigjavax.servlet.ServletConfigpagepagejava.lang.Objectpageexceptionjava.lang.Throwablepage圖3.1注意在JSP中提供了4種屬性的作用范圍,分別是page、request、session和application:page范圍:指所設(shè)置的屬性僅在當(dāng)前頁面內(nèi)有效。request范圍:指屬性僅在一次請(qǐng)求的范圍內(nèi)有效。session范圍:指的是屬性僅在瀏覽器與服務(wù)器進(jìn)行一次會(huì)話的范圍內(nèi)有效,當(dāng)和服務(wù)器斷開連接后,屬性就會(huì)失效。application范圍:指屬性在整個(gè)Web應(yīng)用中都有效,直到服務(wù)器停止后才失效。request對(duì)象用于獲取客戶端信息,JSP容器會(huì)將客戶端的請(qǐng)求信息封裝在request對(duì)象中。在客戶端發(fā)出請(qǐng)求時(shí)會(huì)創(chuàng)建request對(duì)象,在請(qǐng)求結(jié)束后,會(huì)自動(dòng)銷毀request對(duì)象。request對(duì)象中包含的主要方法如下。voidsetAttribute(String

name,Objectvalue):將指定屬性的值設(shè)置為value。ObjectgetAttribute(String

name):獲取指定的屬性值StringgetParameter(String

name):獲取請(qǐng)求參數(shù)名為name的參數(shù)值。EnumerationgetParameterNames():獲取所有請(qǐng)求參數(shù)的名字集合。String[]getParameterValues(String

name):獲得name請(qǐng)求參數(shù)的參數(shù)值。voidsetCharacterEncoding(Stringencoding):設(shè)定編碼格式。request對(duì)象中提供了一系列的方法用來獲取客戶端的請(qǐng)求參數(shù),這些方法包括getParameter、getParameterNames、getParameterValues等,通過使用這些方法就可以獲取到是客戶端請(qǐng)求的參數(shù)名稱和參數(shù)值。3.3.2request對(duì)象response對(duì)象封裝由JSP產(chǎn)生的響應(yīng),并返回客戶端以響應(yīng)請(qǐng)求。response對(duì)象包含了從JSP頁面返回客戶端的所有信息。response對(duì)象經(jīng)常用于添加cookie、設(shè)置HTTP標(biāo)題、發(fā)送HTTP重定向、設(shè)置響應(yīng)內(nèi)容的類型和狀態(tài)和編碼URL等任務(wù)。response對(duì)象的常用方法如下:voidaddCookie(Cookiecookie):添加Cookie對(duì)象,用于在客戶端保存特定信息。voidaddHeader(Stringname,Stringvalue):添加HTTP頭信息,并且發(fā)送到客戶端。voidcontainsHeader(Stringname):判斷指定名字的HTTP文件頭是否存在。voidsetContentType(StringcontentType):設(shè)置MIME類型與編碼方式。voidsendError(int):向客戶端發(fā)送錯(cuò)誤的狀態(tài)碼。voidsendRedirect(Stringurl):重定向JSP文件。3.3.3response對(duì)象out內(nèi)置對(duì)象是一個(gè)緩沖的輸出流,用來向客戶端返回信息。設(shè)置該對(duì)象的原因在于客戶端輸出時(shí)要先和服務(wù)器進(jìn)行連接,所以總是采用緩沖輸出的方式,因此out是緩沖輸出流。out對(duì)象的常用方法如下:publicabstractvoidclear()throwsjava.io.IOException:清除緩沖區(qū),不把數(shù)據(jù)輸出到客戶端。publicabstractvoidclearBuffer()throwsjava.io.IOException:清除緩沖區(qū),并將數(shù)據(jù)輸出到客戶端。publicabstractvoidclose()throwsjava.io.IOException:關(guān)閉緩沖區(qū),并輸出緩沖區(qū)中的數(shù)據(jù)。publicintgetBufferSize():獲取緩沖區(qū)的大小。publicbooleanisAutoFlush():緩沖區(qū)是否進(jìn)行自動(dòng)清除。publicabstractvoidflush()throwsjava.io.IOException:輸出緩沖區(qū)里的數(shù)據(jù)。publicabstractvoidprint(Stringstr)throwsjava.io.IOException:向客戶端輸出數(shù)據(jù)。3.3.4out對(duì)象會(huì)話指的是從一個(gè)客戶打開瀏覽器與服務(wù)器建立連接,到這個(gè)客戶關(guān)閉瀏覽器與服務(wù)器斷開連接的過程。session對(duì)象用來記錄每個(gè)客戶端的訪問狀態(tài)。當(dāng)客戶端與服務(wù)器第二次建立連接時(shí),第一次連接的信息可能已經(jīng)被銷毀,所以服務(wù)器中已經(jīng)沒有之前的連接信息了,因而無法判斷本次連接與以前的連接是否都是屬于同一客戶,該種情況下,可以采用會(huì)話(session)來記錄連接的信息。3.3.5session對(duì)象session對(duì)象的常用方法如下:StringgetId():返回session創(chuàng)建時(shí)由JSP容器所設(shè)定的唯一標(biāo)識(shí)。longgetLastAccessedTime():返回用戶最后一次通過session發(fā)送請(qǐng)求的時(shí)間,單位為毫秒。intgetMaxInactiveInterval():返回session的失效時(shí)間,即兩次請(qǐng)求間間隔多長時(shí)間(單位:秒)該session就被取消。longgetCreationTime():返回創(chuàng)建session的時(shí)間。booleanisNew():判斷是否為新的session。voidinvalidate():清空session。ObjectgetAttribute(Stringname):獲取session范圍內(nèi)name屬性的值。voidsetAttribute(Stringname,Objectvalue):設(shè)置session范圍內(nèi)name屬性的屬性值為value,并存儲(chǔ)在session對(duì)象中。voidremoveAttribute(Stringname):刪除Session范圍內(nèi)name屬性的值。與session對(duì)象相關(guān)的操作中最重要的就是關(guān)于屬性的操作,與屬性操作相關(guān)的方法主要有:setAttribute(),getAttribute()和removeAttribute()。application對(duì)象用于獲取和設(shè)置Servlet的相關(guān)信息,它的生命周期是從服務(wù)器啟動(dòng)直到服務(wù)器關(guān)閉為止,即一旦創(chuàng)建一個(gè)application對(duì)象,該對(duì)象將會(huì)一直存在,直到服務(wù)器關(guān)閉。application中封裝了JSP所在的Web應(yīng)用中的信息。application對(duì)象的常用方法如下:voidsetAttribute(Stringname,Objectvalue):將一個(gè)對(duì)象的值存放到application中,存放的方式采用鍵值對(duì)。ObjectgetAttribute(Stringname):根據(jù)屬性名獲取application中存放的值。3.3.6application對(duì)象3.4.1包含標(biāo)簽<jsp:include>3.4.2轉(zhuǎn)發(fā)標(biāo)簽<jsp:forward>3.4.3參數(shù)標(biāo)簽<jsp:param>3.4.4創(chuàng)建Bean標(biāo)簽<jsp:useBean>3.4.5設(shè)置屬性值標(biāo)簽<jsp:setProperty>3.4.6獲取屬性值標(biāo)簽<jsp:getProperty>3.4JSP動(dòng)作標(biāo)簽<jsp:include>動(dòng)作標(biāo)簽提供了一種在JSP中包含頁面的方式,可以包含靜態(tài)文件,也可以包含動(dòng)態(tài)文件。include動(dòng)作標(biāo)簽<jsp:include>時(shí)還要注意,“jsp”、“:”和“include”三者之間不能有空格。<jsp:include>標(biāo)簽包含page和flush兩個(gè)屬性。page屬性:指定被包含文件的URL地址,是一個(gè)相對(duì)路徑。flush屬性:指定當(dāng)緩沖區(qū)滿時(shí),是否將其清空。默認(rèn)值為false。3.4.1包含標(biāo)簽<jsp:include><jsp:forward>是一種用于頁面重定向的動(dòng)作標(biāo)簽,它的作用是停止當(dāng)前JSP頁面的執(zhí)行,而將客戶端請(qǐng)求轉(zhuǎn)交給另一個(gè)JSP頁面。要注意轉(zhuǎn)發(fā)與重定向的區(qū)別,轉(zhuǎn)發(fā)是在服務(wù)器端進(jìn)行的,不會(huì)引起客戶端的二次請(qǐng)求,因此瀏覽器的地址欄不會(huì)發(fā)生任何變化,效率高于重定向。<jsp:forward>標(biāo)簽只包含page屬性,用來指定轉(zhuǎn)向頁面的URL地址。指令的作用是:從該指令處停止當(dāng)前頁面的繼續(xù)執(zhí)行,而轉(zhuǎn)向其它的一個(gè)JSP頁面。3.4.2轉(zhuǎn)發(fā)標(biāo)簽<jsp:forward>參數(shù)標(biāo)簽<jsp:param>是提供參數(shù)的附屬動(dòng)作標(biāo)簽,以“名—值”對(duì)的形式為其它動(dòng)作標(biāo)簽提供附加信息,一般與標(biāo)簽<jsp:include>、<jsp:forward>、<jsp:plugin>聯(lián)合使用。當(dāng)<jsp:param>與<jsp:include>標(biāo)簽一起使用時(shí),<jsp:param>提供的參數(shù)值可以傳遞到<jsp:include>加載的文件中去。當(dāng)<jsp:param>與<jsp:forward>動(dòng)作標(biāo)簽一起使用時(shí),可以實(shí)現(xiàn)在跳轉(zhuǎn)頁面的同時(shí)向轉(zhuǎn)向的頁面?zhèn)鬟f參數(shù)的功能。3.4.3參數(shù)標(biāo)簽<jsp:param>與JavaBean相關(guān)的動(dòng)作標(biāo)簽包括<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>三個(gè)。<jsp:useBean>標(biāo)簽用來裝載一個(gè)將在JSP頁面中使用的JavaBean。該功能充分發(fā)揮了Java組件重用的優(yōu)勢(shì),也提高了JSP使用的方便性。Sun公司的倡導(dǎo)是:用HTML完成JSP頁面的靜態(tài)部分,用javabeans完成動(dòng)態(tài)部分,實(shí)現(xiàn)真正意義上的靜態(tài)和動(dòng)態(tài)分割。3.4.4創(chuàng)建Bean標(biāo)簽<jsp:useBean>獲取到Bean實(shí)例之后,便可以利用<jsp:setProperty>動(dòng)作標(biāo)簽來設(shè)置或修改Bean中的屬性值。<jsp:setProperty>動(dòng)作標(biāo)簽通過Bean中提供的setter方法來設(shè)置Bean中的屬性值,可以設(shè)置一個(gè)或者多個(gè)屬性值。在使用<jsp:setProperty>之前必須要使用<jsp:useBean>先聲明Bean,同時(shí)它們所使用的Bean實(shí)例名也應(yīng)該相匹配。3.4.5設(shè)置屬性值標(biāo)簽<jsp:setProperty><jsp:getProperty>標(biāo)簽用來提取指定Bean屬性的值,并將其轉(zhuǎn)換成字符串,然后輸出。<jsp:getProperty>可以獲取Bean的屬性值,并可以將其使用或顯示在JSP頁面中。在使用<jsp:getProperty>之前,必須用<jsp:useBean>創(chuàng)建它。3.4.6獲取屬性值標(biāo)簽<jsp:getProperty>3.5.1JavaBean概述3.5.2JavaBean種類3.5.3定義JavaBean3.5.4設(shè)置JavaBean的屬性3.5.5JavaBean的存在范圍3.5.6JavaBean示例3.5JavaBean的使用JavaBean是使用Java語言開發(fā)的一個(gè)可重用的組件,在JSP的開發(fā)中可以使用JavaBean減少重復(fù)代碼,使整個(gè)JSP代碼的開發(fā)更簡(jiǎn)潔。JSP搭配JavaBean來使用,有以下的優(yōu)點(diǎn):可將HTML和Java代碼分離,這主要是為了日后維護(hù)的方便??衫肑avaBean的優(yōu)點(diǎn)。所以說,JavaBean是一種特殊的Java類,即:有默認(rèn)構(gòu)造方法,只有g(shù)et和set方法的java類的對(duì)象。它具有以下特征:JavaBean包含一個(gè)無參的構(gòu)造方法。JavaBean的類訪問權(quán)限必須是public的。JavaBean中屬性的獲取和設(shè)置需要使用getXxx()方法和setXxx()方法。對(duì)于boolean類型的成員變量,可以使用isXxx()方法來代替getXxx()和setXxx()方法。3.5.1JavaBean概述

在JSP中的JavaBean分為可視化的JavaBean和非可視化的JavaBean兩種。可視化的JavaBean可以是簡(jiǎn)單的GUI元素,如按鈕或文本框,也可以是復(fù)雜的,如報(bào)表組件;非可視化的JavaBean沒有GUI表現(xiàn)形式,用于封裝業(yè)務(wù)邏輯、數(shù)據(jù)庫操作等。其最大的優(yōu)點(diǎn)在于可以實(shí)現(xiàn)代碼的可重用性。JavaBean又同時(shí)具有以下特性:易于維護(hù)、使用、編寫??蓪?shí)現(xiàn)代碼的重用性??梢浦残詮?qiáng),但僅限于Java工作平臺(tái)。便于傳輸,不限于本地還是網(wǎng)絡(luò)。可以以其他部件的模式進(jìn)行工作。3.5.2JavaBean種類代碼創(chuàng)建了一個(gè)類名為UserInfo的類,該類的訪問權(quán)限為public。類中定義了一個(gè)無參的構(gòu)造方法UserInfo()。類中還定義了兩個(gè)private的屬性password和name,并分別為它們添加了相應(yīng)的getter方法(getXxx()方法)和setter方法(setXxx()方法)用以獲取和設(shè)置這兩個(gè)屬性的值。UserInfo類符合JavaBean的語法特征,它是一個(gè)JavaBean。3.5.3定義JavaBean在JSP中可以調(diào)用JavaBean,JSP中提供了三個(gè)標(biāo)準(zhǔn)的動(dòng)作指令<jsp:useBean>、<jsp:setProperty>以及<jsp:getProperty>調(diào)用JavaBean。<jsp:setProperty>用來設(shè)置或修改JavaBean中的屬性值。在JSP中有如下幾種使用形式:(1)<jsp:setPropertyname="firstBean"property="*"/>(2)<jsp:setPropertyname="firstBean"property="id"value="123"/>(3)<jsp:setPropertyname="firstBean"property="id"/>(4)<jsp:setPropertyname="firstBean"property="id"param="personid"/>3.5.4設(shè)置JavaBean的屬性如同JSP屬性的4種存儲(chǔ)范圍,JavaBean中也可以設(shè)置page、request、session和application四種存儲(chǔ)范圍。page范圍:每個(gè)JavaBean對(duì)象只在當(dāng)前JSP頁面中有效。request范圍:每個(gè)JavaBean對(duì)象只在一次請(qǐng)求中有效。如果頁面發(fā)生了跳轉(zhuǎn),則該屬性失效。session范圍:每個(gè)JavaBean對(duì)象都寄存于session中,即在瀏覽器與服務(wù)器的一次會(huì)話范圍內(nèi)有效,和服務(wù)器斷開連接后,該JavaBean對(duì)象就失效了。application范圍:每個(gè)JavaBean對(duì)象都存在于application中,在整個(gè)服務(wù)器范圍內(nèi)都有效,當(dāng)服務(wù)器停止時(shí),該JavaBean對(duì)象失效。3.5.5JavaBean的存在范圍

本節(jié)給出一個(gè)使用JavaBean實(shí)現(xiàn)用戶登錄的綜合實(shí)例。(具體見書例3-14)3.5.6JavaBean示例3.6.1Servlet概述3.6.2servlet結(jié)構(gòu)體系3.6.3servlet技術(shù)特點(diǎn)3.6.4servlet與jsp的區(qū)別3.6.5Servlet的生命周期3.6.6Servlet的常用類和接口3.6.7Servlet示例3.6Servlet的使用Servlet運(yùn)行在服務(wù)器端,是獨(dú)立于平臺(tái)和協(xié)議的Java應(yīng)用程序,由Web服務(wù)器負(fù)責(zé)加載。事實(shí)上,每一個(gè)JSP都被處理成一個(gè)Servlet。Servlet優(yōu)先使用HTTP協(xié)議。HTTP協(xié)議的特點(diǎn)是每次連接只完成一個(gè)請(qǐng)求。Servlet具有跨平臺(tái)、可移植性強(qiáng)等優(yōu)點(diǎn),但是由于開發(fā)Servlet要求很高,需要全面掌握J(rèn)ava知識(shí),并且將頁面的顯示和功能處理混在一起,不利于開發(fā)分工和后期維護(hù),所以沒有得到廣泛應(yīng)用。但Servlet是JSP的準(zhǔn)備和基礎(chǔ),JSP被翻譯成Servlet才能夠執(zhí)行。3.6.1Servlet概述Servlet規(guī)范就是基于這幾個(gè)類運(yùn)轉(zhuǎn)的,與Servlet主動(dòng)關(guān)聯(lián)的是三個(gè)類,分別是ServletConfig、ServletRequest和ServletResponse。這三個(gè)類都是通過容器傳遞給Servlet的,其中ServletConfig是在Servlet初始化時(shí)就傳給Servlet了,而后兩個(gè)是在請(qǐng)求達(dá)到時(shí)調(diào)用Servlet時(shí)傳遞過來的。Servlet的運(yùn)行模式是一個(gè)典型的“握手型的交互式”運(yùn)行模式。3.6.2servlet結(jié)構(gòu)體系Servlet是Java技術(shù)對(duì)CGI編程的回答。Servlet程序在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成Web頁面。與傳統(tǒng)的CGI和許多其他類似CGI的技術(shù)相比,JavaServlet具有更高的效率,更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資。

主要特點(diǎn)為:高效、方便、可移植性好、功能強(qiáng)大、節(jié)省投資3.6.3servlet技術(shù)特點(diǎn)JSP在本質(zhì)上就是Servlet,但是兩者的創(chuàng)建方式不一樣。Servlet完全是Java程序代碼構(gòu)成,優(yōu)勢(shì)在于流程控制和事務(wù)處理,而通過Servlet來生成動(dòng)態(tài)網(wǎng)頁;JSP由HTML代碼和JSP標(biāo)簽構(gòu)成,可以方便地編寫動(dòng)態(tài)網(wǎng)頁。因此在實(shí)際應(yīng)用中采用Servlet來控制業(yè)務(wù)流程,而采用JSP來生成動(dòng)態(tài)網(wǎng)頁.在struts框架中,JSP位于MVC設(shè)計(jì)模式的視圖層,而Servlet位于控制層。3.6.4servlet與jsp的區(qū)別Servlet運(yùn)行在Servlet容器中,由容器來管理其生命周期。Servlet的生命周期主要包含4個(gè)過程:(1)加載和實(shí)例化(2)初始化(3)執(zhí)行(4)清理3.6.5Servlet的生命周期ServletAPI函數(shù)被包含在javax.servlet和javax.servlet.http兩個(gè)包中。Servlet接口是所有類型的Servlet類必須實(shí)現(xiàn)的接口。1.Servlet接口2.HttpServlet抽象類2.GenericServlet抽象類4.ServletRequest和ServletResponse接口5.HttpServletRequest接口6.HttpServletResponse接口7.HttpSession接口3.6.6Servlet的常用類和接口示例見書例3-153.6.7Servlet示例本章的內(nèi)容是讀者深入學(xué)習(xí)JavaWeb開發(fā)的基礎(chǔ),主要介紹了JSP、JavaBean和Servlet三個(gè)內(nèi)容。首先介紹了JSP頁面,語法,內(nèi)置對(duì)象和動(dòng)作標(biāo)簽等內(nèi)容。JavaBean部分介紹了什么是JavaBean,如何自己定義一個(gè)JavaBean,使用動(dòng)作指令獲取以及設(shè)置JavaBean的屬性。最后介紹了Servlet的生命周期和Servlet的常用類以及接口,最后實(shí)例幫助讀者理解Servlet的知識(shí),以及如何應(yīng)該它。3.7本章小結(jié)第4章JSP文件操作4.1獲取文件信息

4.2創(chuàng)建、刪除Web服務(wù)目錄

4.3讀寫文件

4.4文件上傳

4.5文件下載

4.6本章小結(jié)File類的對(duì)象主要用來獲取文件本身的一些信息,包括文件所在的目錄、文件的長度、文件讀寫權(quán)限等,不涉及對(duì)文件的讀寫操作。創(chuàng)建一個(gè)File對(duì)象有3種方法:File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);其中,filename是文件名字,directoryPath是文件的路徑,f是指定成一個(gè)目錄的文件。4.1獲取文件信息

4.2.1創(chuàng)建目錄4.2.2刪除文件和目錄4.2創(chuàng)建、刪除Web服務(wù)目錄

(1)創(chuàng)建目錄File對(duì)象調(diào)用方法mkdir()創(chuàng)建一個(gè)目錄,如果創(chuàng)建成功返回true,否則返回false(如果該目錄已經(jīng)存在將返回false)。(2)列出目錄下所有文件如果File對(duì)象是一個(gè)目錄,那么該對(duì)象可以調(diào)用以下方法列出目錄下的文件和子目錄:publicString[]list():用字符串形式返回目錄下的全部文件,publicFile[]listFiles():用File對(duì)象形式返回目錄下的全部文件。4.2.1創(chuàng)建目錄(3)列出指定類型的文件如果要列出目錄下指定類型的文件,比如.jsp、.txt等擴(kuò)展名的文件??梢允褂肍ile類的下述兩個(gè)方法,列出指定類型的文件,publicString[]list(FilenameFilterobj);該方法用字符串形式返回目錄下的指定類型的所有文件。publicFile[]listFiles(FilenameFilterobj);該方法用File對(duì)象返回目錄下的指定類型所有文件。其中,F(xiàn)ilenameFile是一個(gè)接口,該接口有一個(gè)方法:publicbooleanaccept(Filedir,Stringname)。當(dāng)向list方法傳遞一個(gè)實(shí)現(xiàn)該接口的對(duì)象時(shí),list方法在列出文件時(shí),將調(diào)用accept方法檢查文件是否符合accept方法指定的目錄和文件名字要求。File對(duì)象調(diào)用方法publicbooleandelete()刪除指定文件或目錄,如果File對(duì)象表示的是一個(gè)目錄,則該目錄必須是一個(gè)空目錄,否則無法刪除,刪除成功返回true。4.2.2刪除文件和目錄4.3.1讀寫文件的常用流

4.3.2讀取文件

4.3.3寫文件

4.3讀寫文件

在JSP中,可以使用字節(jié)流讀寫文件。Java的I/O流提供一條通道,可以通道把某個(gè)來源的數(shù)據(jù)發(fā)送到目的地。輸入流的指向稱做源,輸出流的指向是數(shù)據(jù)的目的地,程序通過向輸出流中寫入數(shù)據(jù)把信息傳遞到目的地java.io包中提供大量的輸入/輸出流類。所有字節(jié)輸入流類都是InputStream(輸入流)抽象類的子類,而所有字節(jié)輸出流都是OutputStream(輸出流)抽象類的子類。1.FileInputStream和FileOutputStream類2.BufferedInputStream和BufferedOutputStream類4.3.1讀寫文件的常用流

由于字節(jié)流不能直接操作Unicode字符,所以Java提供了字符流,漢字在文件中占用2個(gè)字節(jié),如果使用字節(jié)流,讀取文件不當(dāng)會(huì)出現(xiàn)亂碼,采用字符流可以避免,因?yàn)樵赨nicode字符中,一個(gè)漢字被看作一個(gè)字符處理。所有字符輸入流類都是Reader抽象類的子類,而所有字符輸出流都是Writer抽象類的子類。1.FileReader類2.BufferedReader類4.3.2讀取文件

1.FileWriter類FileWriter提供了基本的文件寫入能力。除了從FileWriter類繼承來的方法以外,F(xiàn)ileWriter類還有兩個(gè)常用的構(gòu)造方法,它們的語法格式如下:FileWriter(Stringname):使用給定的文件名name創(chuàng)建一個(gè)FileWriter對(duì)象FileWriter(Filefile):用File對(duì)象創(chuàng)建FileWriter對(duì)象。參數(shù)name和file指定的文件稱做輸出流的目的地,通過向輸出流中寫入數(shù)據(jù)把信息傳遞到目的地。創(chuàng)建輸入、輸出流對(duì)象也同樣可能發(fā)生IOException異常,必須在try、catch塊語句中創(chuàng)建輸入、輸出流對(duì)象。2.BufferedWriter類BufferedWriter流還可以使用方法voidwrite(Strings,intoff,intlength)將字符串s的一部分寫入文件,使用newLine()向文件寫入一個(gè)行分隔符。4.3.3寫文件

用戶通過指定的JSP頁面,上傳文件給服務(wù)器時(shí),該JSP頁面必須含有File類型的表單,并且表單必須將ENCTYPE的屬性值設(shè)成“multipart/form-data”,F(xiàn)ile類型的表單如下所示:<Formaction=“接受上傳文件的頁面”method=“post”ENCTYPE=“multipart/form-data”<InputType=“File”name=“picture”></Form>JSP引擎可以讓內(nèi)置對(duì)象request調(diào)用getInputStream()函數(shù)獲得一個(gè)輸入流,通過這個(gè)輸入流讀入客戶上傳的全部信息,包括文件的內(nèi)容以及表單域的信息。4.4文件上傳

JSP內(nèi)置對(duì)象response調(diào)用方法getOutputStream()可以獲取一個(gè)指向客戶的輸出流,服務(wù)器將文件寫入這個(gè)流,客戶就可以下載這個(gè)文件了。當(dāng)JSP頁面提供下載功能時(shí),應(yīng)當(dāng)使用response對(duì)象向客戶發(fā)送HTTP頭信息,說明文件的MIME類型,這樣客戶的瀏覽器就會(huì)調(diào)用相應(yīng)的外部程序打開下載的文件。例如,Ms-Word文件的MIME類型是application/msword,pdf文件的MIME類型是application/pdf。點(diǎn)擊點(diǎn)擊資源管理器→工具→文件夾選項(xiàng)→文件類型可以查看文件的相應(yīng)的MIME類型。4.5文件下載

本章主要介紹了JSP文件操作方法,包括獲取文件信息,創(chuàng)建、刪除Web服務(wù)目錄,讀寫文件等內(nèi)容。使用文件類的讀寫文件基本操作,字節(jié)流的操作方法,字符流的操作方法,數(shù)據(jù)流的操作方法,文件上傳,和文件下載等內(nèi)容。4.6本章小結(jié)第5章JavaWeb的數(shù)據(jù)庫操作5.1JDBC技術(shù)5.2JDBCAPI5.3使用JDBC連接MySQL數(shù)據(jù)庫5.4JDBC操作數(shù)據(jù)庫5.5JDBC在Javaweb中的應(yīng)用5.6本章小結(jié)

5.1.1JDBC簡(jiǎn)介5.1.2JDBC連接數(shù)據(jù)庫的過程

5.1JDBC技術(shù)JDBC是Java程序與數(shù)據(jù)庫系統(tǒng)通信的接口,它定義在JDK的API中,通過JDBC技術(shù),Java程序可以非常方便地與各種數(shù)據(jù)庫交互,JDBC在Java程序與數(shù)據(jù)庫系統(tǒng)之間建立了橋梁。通過JDBC可以方便的向各種關(guān)系數(shù)據(jù)庫發(fā)送SQL語句。也就是說,開發(fā)人員不需要為訪問不同的數(shù)據(jù)庫而編寫不同的應(yīng)用程序,而只需使用JDBC編寫一個(gè)通用程序就可以向不同的數(shù)據(jù)庫發(fā)送SQL調(diào)用。由于Java的平臺(tái)無關(guān)性,使用Java編寫的應(yīng)用程序可以運(yùn)行在任何支持Java語言的平臺(tái)上,而無須針對(duì)不同平臺(tái)編寫不同的應(yīng)用程序。將Java和JDBC結(jié)合起來操作數(shù)據(jù)庫可以真正實(shí)現(xiàn)“一次編寫,處處運(yùn)行”。JDBC由一組用Java語言編寫的類和接口組成,提供了基本方法對(duì)數(shù)據(jù)庫操作,但是對(duì)數(shù)據(jù)庫的細(xì)節(jié)操作由數(shù)據(jù)庫廠商實(shí)現(xiàn),且廠商通常需要提供數(shù)據(jù)庫的驅(qū)動(dòng)程序。

5.1.1JDBC簡(jiǎn)介1.下載驅(qū)動(dòng)包2.注冊(cè)數(shù)據(jù)庫驅(qū)動(dòng)3.構(gòu)建數(shù)據(jù)庫連接URL5.1.2JDBC連接數(shù)據(jù)庫的過程

5.2.1Connection接口5.2.2Drivermanager類5.2.3Statement接口

5.2.4Preparedstatement接口5.2.5Resultset接口5.2JDBCAPI

與特定數(shù)據(jù)庫的連接會(huì)話,只有獲得特定數(shù)據(jù)庫的連接對(duì)象才能訪問數(shù)據(jù)庫,操作數(shù)據(jù)庫中的數(shù)據(jù)表、視圖和存儲(chǔ)過程等。5.2.1Connection接口

主要作用與用戶及驅(qū)動(dòng)程序之間,它是JDBC中的管理層,通過它可以管理數(shù)據(jù)庫廠商提供的驅(qū)動(dòng)程序,并建立應(yīng)用程序與數(shù)據(jù)庫之間的連接。5.2.2Drivermanager類

Statement接口封裝了執(zhí)行SQL語句和獲取查詢接口的基本方法。5.2.3Statement接口

將程序中的變量做查詢條件參數(shù)等。使用Statement接口進(jìn)行操作過于繁瑣且存在安全缺陷。而PreparedStatement接口繼承與Statement接口,且對(duì)帶有參數(shù)SQL語句的執(zhí)行操作進(jìn)行了擴(kuò)展。應(yīng)用于PreparedStatement接口中的SQL語句可以使用占位符”?”來代替SQL語句中的參數(shù),然后再對(duì)其進(jìn)行賦值。5.2.4Preparedstatement接口

ResultSet對(duì)象封裝了數(shù)據(jù)查詢的結(jié)果集,它包含了符合SQL語句的所有行,針對(duì)Java中的數(shù)據(jù)類型提供了一套getXXX()的方法,通過這些方法可以獲取每一行中的數(shù)據(jù)。ResultSet還提供了光標(biāo)的功能,通過光標(biāo)可以自由定位到某一行中的數(shù)據(jù)。5.2.5Resultset接口5.3.1下載并安裝MySQLJDBC驅(qū)動(dòng)5.3.2Java程序連接MySQL數(shù)據(jù)庫5.3使用JDBC連接MySQL數(shù)據(jù)庫MySQL官方網(wǎng)站提供的JDBC驅(qū)動(dòng)程序是Connector/J,目前的最新版本是5.1.37。在瀏覽器地址欄輸入/downloads/connector/j/就可以進(jìn)入Connector/J5.1.37的下載頁面,如圖5.2所示。5.3.1下載并安裝MySQLJDBC驅(qū)動(dòng)圖5.2假設(shè)有student表,其屬性有兩個(gè),分別為studentid和studentname,類型都為String,下面使用student表講述JDBC連接數(shù)據(jù)庫的步驟。(1)調(diào)用Class.forName()方法加載相應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)程序。(2)定義要連接數(shù)據(jù)庫的地址URL,注意不同數(shù)據(jù)庫的連接地址不同。(3)使用適當(dāng)?shù)尿?qū)動(dòng)程序類建立與數(shù)據(jù)庫的連接。(4)創(chuàng)建語句對(duì)象。(5)執(zhí)行語句。(6)對(duì)返回的結(jié)果集ResultSet對(duì)象進(jìn)行處理。(7)關(guān)閉連接。操作完成后要關(guān)閉所有JDBC對(duì)象,關(guān)閉結(jié)果集、關(guān)閉語句對(duì)象和連接對(duì)象。5.3.2Java程序連接MySQL數(shù)據(jù)庫5.4.1添加數(shù)據(jù)5.4.2查詢數(shù)據(jù)5.4.3修改數(shù)據(jù)5.4.4刪除數(shù)據(jù)5.4JDBC操作數(shù)據(jù)庫使用SQL語句為數(shù)據(jù)表添加新的記錄,Statement對(duì)象調(diào)用方法:publicintexecuteUpdate(StringsqlStatement);通過參數(shù)sqlStatement指定的方式實(shí)現(xiàn)向數(shù)據(jù)庫表中添加新記錄,例如,下述語句將向表students中添加一條新的數(shù)據(jù)記錄:stmt.executeUpdate(“INSERTINTOstudents(n0,sname,math,English,chinese)VALUES(‘201504’,’liuqiangqiang’,97,99,98));5.4.1添加數(shù)據(jù)有了SQL語句對(duì)象后,就可以調(diào)用相應(yīng)的方法實(shí)現(xiàn)對(duì)數(shù)據(jù)庫中表的查詢。并將查詢結(jié)果存放在一個(gè)ResultSet類聲明的對(duì)象中,也就是說SQL語句對(duì)數(shù)據(jù)庫的查詢操作將返回一個(gè)ResultSet對(duì)象:ResultSetrs=sql.executeQuery("SELECT*FROM成績(jī)表");ResultSet對(duì)象是以統(tǒng)一形式的列組織的數(shù)據(jù)行組成。ResultSet對(duì)象一次只能展示一個(gè)數(shù)據(jù)行,需要使用next()方法移動(dòng)到下一數(shù)據(jù)行。5.4.2查詢數(shù)據(jù)同樣使用Statement對(duì)象調(diào)用方法更新記錄中字段的值,該Statement對(duì)象調(diào)用方法為:publicintexecuteUpdate(StringsqlStatement);通過參數(shù)sqlStatement指定的方式實(shí)現(xiàn)對(duì)數(shù)據(jù)庫表中記錄的字段值的更新,例如,下述語句將表students中王名同學(xué)的數(shù)學(xué)字段的值更新88:executeUpdate("UPDATEstudentsSET數(shù)學(xué)成績(jī)=88WHERE姓名='王名'");可以使用一個(gè)Statement對(duì)象進(jìn)行更新和查詢操作,但需要注意的是,當(dāng)查詢語句返回結(jié)果集后,沒有立即輸出結(jié)果集的記錄,而接著執(zhí)行了更新語句,那么結(jié)果集就不能輸出記錄了。要想輸出記錄就必須重新返回結(jié)果集。5.4.3修改數(shù)據(jù)可以使用SQL語句刪除記錄,Statement對(duì)象調(diào)用方法:publicintexecuteUpdate(StringsqlStatement);通過參數(shù)sqlStatement指定的方式刪除數(shù)據(jù)庫表中的記錄,例如,下述SQL語句將刪除學(xué)號(hào)是201509的記錄:executeUpdate("DELETEFROMstudentsWHERE學(xué)號(hào)=‘201504");5.4.4刪除數(shù)據(jù)5.5.1開發(fā)模式5.5.2分頁查詢5.5.3JSP通過JDBC驅(qū)動(dòng)MySQL數(shù)據(jù)庫實(shí)例5.5JDBC在Javaweb中的應(yīng)用JDBC支持B/S和C/S兩種模式。API既支持?jǐn)?shù)據(jù)庫訪問的兩層模型(C/S),同時(shí)也支持三層模型(B/S)。在兩層模型中,Javaapplet或應(yīng)用程序?qū)⒅苯优c數(shù)據(jù)庫進(jìn)行對(duì)話。這將需要一個(gè)JDBC驅(qū)動(dòng)程序來與所訪問的特定數(shù)據(jù)庫管理系統(tǒng)進(jìn)行通訊。用戶的SQL語句由模型層發(fā)送到數(shù)據(jù)庫,而其結(jié)果將被送回給用戶。網(wǎng)絡(luò)可以是Intranet或者Internet。在三層模型中,命令先是被發(fā)送到服務(wù)的“中間層”,然后由它將SQL語句發(fā)送給數(shù)據(jù)庫。數(shù)據(jù)庫對(duì)SQL語句進(jìn)行處理并將結(jié)果送回到中間層,中間層再將結(jié)果送回給用戶。MIS主管們都發(fā)現(xiàn)三層模型很吸引人,因?yàn)榭捎弥虚g層來控制對(duì)公司數(shù)據(jù)的訪問和可作的更新的種類。中間層的優(yōu)點(diǎn)是,用戶可以利用易于使用的高級(jí)API,而中間層將把它轉(zhuǎn)換為相應(yīng)的低級(jí)調(diào)用。5.5.1開發(fā)模式數(shù)據(jù)庫通常有很多數(shù)據(jù),很難在一個(gè)頁面上展示所有數(shù)據(jù),這就需要使用分頁查詢顯示技術(shù)。假設(shè)總記錄數(shù)為m,每頁顯示數(shù)量是n,那么總頁數(shù)的計(jì)算公式是:(1)如果m除以n的余數(shù)大于0,總頁數(shù)等于m除以n的商加1;(2)如果m除以n的余數(shù)等于0,總頁數(shù)等于m除以n的商。即總頁數(shù)=(m%n)==0?(m/n):(m/n+1);如果準(zhǔn)備顯示第p頁的內(nèi)容,應(yīng)當(dāng)把游標(biāo)移動(dòng)到第(p-1)*n+1條記錄處。5.5.2分頁查詢使用JSP和JDBC展示數(shù)據(jù)庫中的圖書記錄。開發(fā)過程如下。(具體操作見書)(1)首先在MySQL數(shù)據(jù)庫中建立圖書數(shù)據(jù)庫books,并在該數(shù)據(jù)庫中建立圖書數(shù)據(jù)表book。然后在該表中插入數(shù)據(jù)。(2)在eclipse中建立一個(gè)名為firstJDBC的Dynamicwebproject項(xiàng)目(3)新建一個(gè)叫做querydata.jsp的JSP文件。(4)將下載的JDBC連接jar文件mysql-connector-java-3.1.10-bin.jar復(fù)制到tomcat安裝目錄的lib目錄下。(5)在eclipse中運(yùn)行改querydata.jsp文件或者在瀏覽器中輸入http://localhost:8080/firstJDBC/querydata.jsp,回車后運(yùn)行5.5.3JSP通過JDBC驅(qū)動(dòng)MySQL數(shù)據(jù)庫實(shí)例本章介紹了JDBC技術(shù)的基本概念,通過JDBC連接MySQL數(shù)據(jù)庫的一般步驟,JDBC常用API接口,通過JDBC操作數(shù)據(jù)庫(添加數(shù)據(jù),查詢數(shù)據(jù),修改數(shù)據(jù)和刪除數(shù)據(jù)),最后給出了一個(gè)JSP通過JDBC訪問MySQL數(shù)據(jù)庫的實(shí)例。學(xué)習(xí)過本章的內(nèi)容后,讀者可以使用JDBC對(duì)數(shù)據(jù)庫進(jìn)行基本編程。5.6本章小結(jié)第6章Struts基礎(chǔ)6.1Struts開發(fā)基礎(chǔ)6.2Struts開發(fā)準(zhǔn)備6.3Struts開發(fā)實(shí)例6.4本章小結(jié)6.1.1MVC的基本概念6.1.2Struts的工作原理6.1.3Struts2的優(yōu)點(diǎn)6.1Struts開發(fā)基礎(chǔ)MVC將一個(gè)應(yīng)用系統(tǒng)的輸入、處理和輸出流程按照Model(模型)、View(視圖)和Controller(控制器)三部分進(jìn)行分離,劃分成模型層、視圖層和控制層。三層之間以最少的耦合來協(xié)同工作,從而提高了應(yīng)用系統(tǒng)的可擴(kuò)展性和可維護(hù)性。MVC思想的核心就是分層,將系統(tǒng)的各個(gè)組件進(jìn)行分類,不同的組件扮演不同角色。然后將系統(tǒng)中的組件分隔到不同的層中,這些組件將被嚴(yán)格限制在其所在層內(nèi)。各層之間則以松散耦合的方式組合在一起,從而保證了良好的封裝性。6.1.1MVC的基本概念1.Struts概述Struts1是真正意義上的MVC模式,發(fā)布后受到了廣大程序開發(fā)人員的認(rèn)可。性能高效、松耦合、低侵入永遠(yuǎn)是開發(fā)人員追求的理想狀態(tài),而Struts1在這些方面又恰恰存在著不足之處。在這種情況下,全新的Struts2框架應(yīng)運(yùn)而生,它彌補(bǔ)了Struts1框架中存在的缺陷和不足,并且還提供了更加靈活與強(qiáng)大的功能。2.Struts2工作流程Struts2是一個(gè)全新的開發(fā)框架6.1.2Struts的工作原理使用Struts2進(jìn)行JavaWeb開發(fā)的優(yōu)點(diǎn)。通過簡(jiǎn)單、集中的配置來調(diào)度動(dòng)作類,使得配置和修改都非常容易。提供簡(jiǎn)單、統(tǒng)一的表達(dá)式語言來訪問所有可供訪問的數(shù)據(jù)。提供內(nèi)存式的數(shù)據(jù)中心,所有可供訪問的數(shù)據(jù)都集中存放在內(nèi)存中,所以在調(diào)用中不需要將數(shù)據(jù)傳來傳去,只要去這個(gè)內(nèi)存數(shù)據(jù)中心訪問即可。Struts2提供標(biāo)準(zhǔn)的、強(qiáng)大的驗(yàn)證框架和國際化框架,而且與Struts2的其他特性緊密結(jié)合。強(qiáng)大的標(biāo)簽,使用標(biāo)簽可以有效的減少頁面代碼。良好的Ajax支持。簡(jiǎn)單的插件。明確的錯(cuò)誤報(bào)告。智能的默認(rèn)設(shè)置,不需要程序員另外進(jìn)行繁瑣的設(shè)置。6.1.3Struts2的優(yōu)點(diǎn)6.2.1Tomcat服務(wù)器基本知識(shí)6.2.2下載并安裝Tomcat服務(wù)器6.2.3在Eclipse中部署Tomcat6.2Struts開發(fā)準(zhǔn)備1.Web服務(wù)器在JavaWeb開發(fā)中,所有Web程序都需要Web服務(wù)器的支持,即所開發(fā)的Web項(xiàng)目必須放到Web服務(wù)器中才能運(yùn)

溫馨提示

  • 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)論