第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第1頁(yè)
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第2頁(yè)
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第3頁(yè)
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第4頁(yè)
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第5頁(yè)
已閱讀5頁(yè),還剩122頁(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)介

構(gòu)建Web應(yīng)用技術(shù)

-服務(wù)器端技術(shù)服務(wù)器端邏輯體系結(jié)構(gòu)B/S交互動(dòng)作:瀏覽器的每一個(gè)動(dòng)作都產(chǎn)生一個(gè)對(duì)服務(wù)器的請(qǐng)求,服務(wù)器處理這個(gè)請(qǐng)求計(jì)算結(jié)果,生成一個(gè)新的頁(yè)面發(fā)送到客戶端。優(yōu)點(diǎn):客戶端初次啟動(dòng)快、對(duì)客戶端資源要求低。支持的技術(shù):服務(wù)器端技術(shù),如JSPJavaServlet、ASP等。服務(wù)器端技術(shù)發(fā)展靜態(tài)-->動(dòng)態(tài)

SSI(ServerSideIncludes)1993年,CGI1.0發(fā)布。1994年,發(fā)明PHP1996年

,ASP技術(shù)引入

1997年,Servlet技術(shù)問(wèn)世1998年,JSP技術(shù)誕生服務(wù)器端技術(shù)概況目前在服務(wù)器端生成動(dòng)態(tài)頁(yè)面的技術(shù)有:公共網(wǎng)關(guān)接口服務(wù)器端腳本技術(shù)服務(wù)器端插件技術(shù)(API)Servlet技術(shù)JSP技術(shù)中間件技術(shù)最早的服務(wù)器端網(wǎng)頁(yè)生成技術(shù)-SSI

SSI通常稱(chēng)為服務(wù)器端嵌入,是一種基于服務(wù)器的網(wǎng)頁(yè)制作技術(shù);在以.shtml為擴(kuò)展名的SSI文件中,包含標(biāo)準(zhǔn)的HTML編碼和SSI指令;標(biāo)準(zhǔn)的HTML編碼會(huì)被直接送到瀏覽器上,而內(nèi)嵌的SSI命令則先被網(wǎng)絡(luò)服務(wù)器解釋執(zhí)行,輸出信息也將作為標(biāo)準(zhǔn)的HTML而被送至瀏覽器。最早的服務(wù)器端網(wǎng)頁(yè)生成技術(shù)-SSI

<html>

<head><title>SSIexample</title></head>

<body>

<h2>新聞

</h2>

<P><!--#includefile="news.txt"-->

<p>新聞更新日期:

<!--#flastmodfile="news.txt"-->

</body></html>

*功能非常有限CGI概述

CGI(CommonGatewayInterface):通用網(wǎng)關(guān)接口是第一種真正使服務(wù)器能根據(jù)運(yùn)行時(shí)的具體情況,動(dòng)態(tài)生成HTML頁(yè)面的技術(shù)。通過(guò)CGI接口,Web服務(wù)器能夠執(zhí)行CGI應(yīng)用程序,接收用戶的輸入,并將應(yīng)用程序的輸出,如文字、圖形、聲音等傳遞給一個(gè)Web瀏覽器。CGI程序語(yǔ)言:C、Shell、Perl和VisualBasic等。CGI概述

CGI程序在UNIX系統(tǒng)中放在cgi-bin子目錄下,在Windows系統(tǒng)中放在cgi-win子目錄下。CGI程序兩種調(diào)用方式:

(1)URL調(diào)用:

/cgi-win/cgi.exe

(2)HTML里的Form調(diào)用,處理表單。CGI工作流程:獲取HTTP請(qǐng)求信息;執(zhí)行CGI程序;生成HTML文件返回瀏覽器。CGI工作原理

Unix平臺(tái)下,Web服務(wù)器與CGI程序通過(guò)輸入流scanf獲得用戶輸入、輸出流printf生成輸出結(jié)果;Windows平臺(tái)下通過(guò)文件系統(tǒng)來(lái)實(shí)現(xiàn)Web服務(wù)器與CGI程序的信息交流。瀏覽器的當(dāng)前文件使用get,post等方法調(diào)用CGI程序,并將要傳送的信息送到服務(wù)器端。CGI通過(guò)標(biāo)準(zhǔn)輸入(STDIN)獲取用戶輸入信息,通過(guò)標(biāo)準(zhǔn)輸出(STDOUT)向用戶傳遞結(jié)果。

WebServerCGIProgramhttp://server/form-proc.exeHTMLCGI工作原理(Windows平臺(tái))CGI程序執(zhí)行CGI是運(yùn)行在服務(wù)器上的程序。它可以用任何語(yǔ)言編寫(xiě)-只要能夠在你的服務(wù)器上運(yùn)行。CGI腳本可能是一個(gè)編譯好的程序或者批命令文件或者其他可執(zhí)行的程序。服務(wù)器端對(duì)每個(gè)CGI請(qǐng)求產(chǎn)生一個(gè)新的進(jìn)程。CGI程序執(zhí)行編程語(yǔ)言:C/C++Perl是PracticalExtractionandReportLanguage的縮寫(xiě)TCL即ToolCommandLanguage,它是高級(jí)的跨平臺(tái)的Script語(yǔ)言VB缺點(diǎn):每次對(duì)CGI的請(qǐng)求產(chǎn)生新進(jìn)程,會(huì)限制服務(wù)器處理多請(qǐng)求的能力。

服務(wù)器端腳本技術(shù)頁(yè)面中嵌入腳本,頁(yè)面被請(qǐng)求時(shí)腳本由服務(wù)器解釋執(zhí)行,產(chǎn)生動(dòng)態(tài)內(nèi)容

??刹捎玫募夹g(shù):

IBMNet.data

MicroSoft:ASP

Allaire:ColdFusion

PHP缺點(diǎn):局限于特定web服務(wù)器產(chǎn)品和OSCGI與PHP、ASP1994年,Rasmus

Lerdorf發(fā)明了專(zhuān)用于Web服務(wù)端編程的PHP(PersonalHomePageTools)語(yǔ)言;PHP語(yǔ)言將HTML代碼和PHP指令合成為完整的服務(wù)端動(dòng)態(tài)PHP頁(yè)面文件、具有PHP文件處理功能的WEB服務(wù)器生成HTML文檔;1996年,Microsoft借鑒PHP的思想,在其Web服務(wù)器IIS3.0中引入了ASP技術(shù)。ASP使用的腳本語(yǔ)言是我們熟悉的VBScript和javascript。CGI與PHP、ASP

<html>

<body>

<?php

$db=mysql_connect(“l(fā)ocalhost”,“root”);

mysql_select_db(“mydb”,$db);

$result=mysql_query(“SELECT*FROMemployees”,$db);

printf(“FirstName:%s<br>n”,mysql_result($result,0,“first”));

printf(“LastName:%s<br>n”,mysql_result($result,0,“l(fā)ast”));

?>

</body>

</html>

服務(wù)端插件技術(shù)插件即英文的Plug-In,它也是程序,它是用遵循一定規(guī)范的API編寫(xiě)出來(lái)的。Web瀏覽器和服務(wù)器都能夠直接調(diào)用插件代碼。插件(Plug-In)軟件安裝之后,就成為他們的一部分,處理特定類(lèi)型的請(qǐng)求。最著名的API是Netscape公司的NSAPI和Microsoft公司的ISAPI.缺點(diǎn):由于NSAPI或ISAPI是動(dòng)態(tài)鏈接的方式,因此在執(zhí)行時(shí)若出現(xiàn)問(wèn)題,會(huì)導(dǎo)致Web服務(wù)器癱瘓;對(duì)平臺(tái)的依賴(lài)性太高;只能使用C語(yǔ)言開(kāi)發(fā)。服務(wù)端APIAPI(ApplicationProgramInterface):應(yīng)用程序接口API解決多線程問(wèn)題,而CGI無(wú)法實(shí)現(xiàn)多線程API使用動(dòng)態(tài)鏈接庫(kù)只能用C語(yǔ)言編寫(xiě)兩種API:Netscape公司的NSAPI和Microsoft的ISAPI服務(wù)端API

Netscape和MicroSoft

公司分別提供了基于本身的Web服務(wù)器的API調(diào)用:NetscapeNSAPI、MicroSoftISAPI基本思路是由HTTP守護(hù)進(jìn)程加載可獨(dú)立執(zhí)行的CGI程序改為加載動(dòng)態(tài)鏈接庫(kù),取消了啟動(dòng)與釋放進(jìn)程的開(kāi)銷(xiāo)。服務(wù)端API<html><head>ISAPI示例網(wǎng)頁(yè)</head><body><formaction="/gjy/isapi1/debug/isapi1.dll?RegisterUser"

method=post>輸入注冊(cè)信息:<br>姓名:<inputtype="text"name="First"><br>地址:<inputtype="text"name="Middle"><br>信箱:<inputtype="text"name="Last"><p><inputtype="submit"value="提交"><inputtype="reset"value="重置"></p></form></body></html>服務(wù)端API優(yōu)點(diǎn):1)執(zhí)行速度快;2)多線程處理多用戶訪問(wèn)。缺點(diǎn):1)NSAPI

ISAPI

對(duì)網(wǎng)站平臺(tái)的依賴(lài)型太高;2)NSAPI

ISAPI

只提供

C

程序語(yǔ)言的界面;3)影響Web服務(wù)器的穩(wěn)定性。JavaServlet技術(shù)Servlet是什么?

Servlet是一種用Java寫(xiě)的Web組件,是Java的擴(kuò)展類(lèi),它的目的是產(chǎn)生動(dòng)態(tài)內(nèi)容;Servlet組件使用JavaServletAPI提供的類(lèi)和方法;Servlet組件在Web容器中執(zhí)行,Web容器提供運(yùn)行時(shí)的服務(wù);啟動(dòng)Web服務(wù)器或客戶機(jī)第一次請(qǐng)求服務(wù)時(shí),可以自動(dòng)裝入

Servlet。裝入后,Servlet和采用輕量級(jí)線程響應(yīng)多個(gè)客戶機(jī)發(fā)出的請(qǐng)求;Servlet技術(shù)JavaServlet是一種在服務(wù)器端運(yùn)行的小型Java程序。它可以作為一種插件嵌入到Web服務(wù)器中,提供諸如HTTP,F(xiàn)TP等協(xié)議服務(wù)或用戶訂制的協(xié)議服務(wù)。Servlet可以從HTML表單中獲取數(shù)據(jù),進(jìn)行網(wǎng)站數(shù)據(jù)庫(kù)的更新。Servlet技術(shù)Servlet就是JavaServlet

,是一個(gè)Java類(lèi),是一個(gè)基于Java技術(shù)的運(yùn)行在服務(wù)器端的程序;Servlets是JAVA

2.0中新增的一個(gè)全新功能,

是一種采用JAVA技術(shù)來(lái)實(shí)現(xiàn)CGI功能的一種技術(shù);Servlet運(yùn)行于由Servlet引擎所管理的Java虛擬機(jī)中,被來(lái)自Web客戶機(jī)的請(qǐng)求所喚醒并用來(lái)處理請(qǐng)求;

主要依賴(lài)兩個(gè)軟件包(API):Javax.servlet包和Javax.servlet.http包;Servlet的開(kāi)發(fā)工具:J2SDK開(kāi)發(fā)工具箱、Jbuilder

等集成開(kāi)發(fā)工具。Servlet技術(shù)-特性持久性和性能:JAVA

Servlet來(lái)說(shuō),在JAVA

虛擬機(jī)上,每一個(gè)請(qǐng)求由一個(gè)'小'JAVA線程(thread)響應(yīng),而不是一個(gè)`大`操作系統(tǒng)進(jìn)程。基于Java,具有Java的優(yōu)勢(shì)。JAVA

ServletAPI定義了JAVA

Servlet和Web服務(wù)器軟件之間的接口。JSP(JavaServerPages)JSP網(wǎng)頁(yè)就是在HTML網(wǎng)頁(yè)中包含了能夠生成動(dòng)態(tài)內(nèi)容的可執(zhí)行應(yīng)用程序代碼(JSP標(biāo)記);

JSP用于創(chuàng)建可支持跨平臺(tái)及跨Web服務(wù)器的動(dòng)態(tài)網(wǎng)頁(yè);可以調(diào)用用Java類(lèi)訪問(wèn)外部應(yīng)用和數(shù)據(jù)資源;JSP將應(yīng)用程序邏輯和頁(yè)面顯示分離。JSP例<HTML><%@pagelanguage=="java"imports=="com.wombat.JSP.*"%><H1>Welcome</H1><P>Todayis</P><jsp:useBeanid=="clock"class=="calendar.jspCalendar"/><ul><li>Day:<%==clock.getDayOfMonth()%><li>Year:<%==clock.getYear()%></ul>JSP例<%if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM){%>GoodMorning<%}else{%>GoodAfternoon<%}%><%@includefile=="copyright.html"%></HTML>JSP與JavaServletJSP技術(shù)的特點(diǎn)內(nèi)容表達(dá)與數(shù)據(jù)生成分離更好的M/V/C易用性移植與跨平臺(tái)基于Java支持協(xié)作開(kāi)發(fā)JSP與其它動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)比較與傳統(tǒng)的CGI方式相比JSP和ASP相比JSP和純Servlet相比JSP和JavaScript相比幾種服務(wù)器端技術(shù)的比較本節(jié)結(jié)束

Servlet&JSP

開(kāi)發(fā)技術(shù)

JavaServlet開(kāi)發(fā)技術(shù)采用Servlet

的原因

性能比CGI高效

Servlet可輕松地處理多個(gè)并發(fā)請(qǐng)求

Servlet

是什么?

Servlet是一種用Java寫(xiě)的Web組件,是Java的擴(kuò)展類(lèi),它的目的是產(chǎn)生動(dòng)態(tài)內(nèi)容;Servlet組件使用JavaServletAPI提供的類(lèi)和方法;Servlet組件在Web容器中執(zhí)行,Web容器提供運(yùn)行時(shí)的服務(wù);啟動(dòng)Web服務(wù)器或客戶機(jī)第一次請(qǐng)求服務(wù)時(shí),可以自動(dòng)裝入

Servlet。裝入后,Servlet和采用輕量級(jí)線程響應(yīng)多個(gè)客戶機(jī)發(fā)出的請(qǐng)求;

JavaServlet運(yùn)行JavaServlet是一種在服務(wù)器端運(yùn)行的Java程序。它可以提供諸如HTTP,F(xiàn)TP等協(xié)議服務(wù)或用戶訂制的協(xié)議服務(wù)。Servlet可以從HTML表單中獲取數(shù)據(jù),并可進(jìn)行數(shù)據(jù)處理和更新。Servlet的功能?創(chuàng)建并返回一個(gè)包含基于客戶請(qǐng)求性質(zhì)的動(dòng)態(tài)且內(nèi)容完整的HTML頁(yè)面;創(chuàng)建可嵌入到現(xiàn)有HTML頁(yè)面中的一部分

HTML頁(yè)面;與其它服務(wù)器資源(包括數(shù)據(jù)庫(kù)和基于Java的應(yīng)用程序)進(jìn)行通信;處理與多個(gè)客戶機(jī)處理連接,接收多個(gè)客戶機(jī)的輸入,并將結(jié)果廣播到多個(gè)客戶機(jī)上(網(wǎng)絡(luò)游戲服務(wù));作為數(shù)據(jù)過(guò)濾器(Filter),在調(diào)用Servlet之前或之后調(diào)用;作為服務(wù)器的標(biāo)準(zhǔn)公用服務(wù)例行程序,被其它Servlet調(diào)用。Servlet的功能?Servlet經(jīng)常用于處理如下任務(wù):檢查和處理用戶輸入處理重要的業(yè)務(wù)邏輯數(shù)據(jù)庫(kù)查詢、更新處理復(fù)雜的Web事務(wù)處理Web頁(yè)面的轉(zhuǎn)發(fā)操作JavaServlet生命周期Servlet生命期周期-初始化裝入時(shí)刻:?jiǎn)?dòng)服務(wù)器時(shí)自動(dòng)裝入;首次向

Servlet發(fā)出請(qǐng)求時(shí);重新裝入Servlet時(shí)。裝入

Servlet后:創(chuàng)建一個(gè)Servlet實(shí)例(而不是多個(gè));調(diào)用

Servlet的init()方法;Servlet初始化參數(shù)被傳遞給Servlet配置對(duì)象;特定Servlet如需要初始化特有的資源,需要重載init()方法,并在方法最后呼叫super.init()。Servlet生命期周期-請(qǐng)求處理服務(wù)器將每個(gè)客戶請(qǐng)求包裝成Servlet接受的“請(qǐng)求”對(duì)象和“響應(yīng)”對(duì)象;調(diào)用Servlet的service()方法用于傳遞“請(qǐng)求”和“響應(yīng)”對(duì)象;service()方法從“請(qǐng)求”對(duì)象獲得請(qǐng)求信息、處理該請(qǐng)求并用“響應(yīng)”對(duì)象的方法以將響應(yīng)傳回客戶機(jī);HttpServlet

類(lèi)有自己的service()方法,該方法可以調(diào)用其它子方法來(lái)處理請(qǐng)求,通常是doGet()、doPost()或其它的方法。Servlet生命期周期-終止當(dāng)服務(wù)器卸載

Servlet(實(shí)例)時(shí),調(diào)用該Servlet的destroy()方法終止當(dāng)前Servlet實(shí)例的運(yùn)行,釋放資源。特定Servlet如需要特有的資源關(guān)閉,需要重載destroy()方法,并在方法最后呼叫super.destrory()。Servlet生命期周期基于Servlet的Web交互JavaServletAPIJavaServlet開(kāi)發(fā)工具(J2SDK)提供了多個(gè)軟件包,在編寫(xiě)Servlet時(shí)需要用到這些軟件包;J2SDK包括兩個(gè)用于所有

Servlet的基本軟件包:

javax.servlet

(7個(gè)接口5個(gè)類(lèi))

javax.servlet.http

(HTTPServlet5個(gè)接口4個(gè)類(lèi))

JavaServletAPI包含在上述兩個(gè)包中;TheServletAPIisasetofJavaclasseswhichdefineastandardinterfacebetweenaWebclientandaWebserver.JavaServletAPI?實(shí)現(xiàn)JavaServlet接口的兩個(gè)基類(lèi):

javax.servlet.GenericServlet

(屬于javax.servlet包)

javax.servlet.http.HttpServlet

(屬于javax.servlet.http包)HttpServlet類(lèi)擴(kuò)展了GenericServlet類(lèi),添加了處理HTTP請(qǐng)求的方法。Severlet類(lèi)的繼承

HTTPServlet的請(qǐng)求/響應(yīng)流程瀏覽器發(fā)出HTTP請(qǐng)求對(duì)象Request對(duì)象;Web容器將請(qǐng)求數(shù)據(jù)封裝:請(qǐng)求對(duì)象Request--〉HttpServletRequest

響應(yīng)對(duì)象Response--〉HttpServletResponse

調(diào)用HTTPServlet中的service方法:

service(HTTPServletRequest

reg,HTTPServletResponse

res)HTTPServlet中的service方法根據(jù)請(qǐng)求,調(diào)用子方法doGet、doPost、doPut、doDelete等子方法生成響應(yīng)結(jié)果。表單中調(diào)用HTTPServletHTML表單是由<FORM>和</FORM>標(biāo)記定義,表單中包含輸入字段(如文本輸入字段、復(fù)選框、單選按鈕和選擇列表)和用于提交數(shù)據(jù)的按鈕。提交信息時(shí),可指定服務(wù)器應(yīng)執(zhí)行哪一個(gè)Servlet。

HttpServlet

類(lèi)包含

init()、destroy()、service()等方法。其中init()和destroy()方法是繼承Servlet的。JavaServletAPI-init()方法

在Servlet的生命期中,僅執(zhí)行一次

init()方法。它是在服務(wù)器裝入

Servlet時(shí)執(zhí)行的。缺省的init()方法設(shè)置了

Servlet的初始化參數(shù),并用

ServletConfig

對(duì)象的參數(shù)來(lái)表示初始化配置。重載init()方法可增加功能,如一次GIF圖像裝入、初始化數(shù)據(jù)庫(kù)連接。但應(yīng)調(diào)用

super.init()以確保缺省的init()方法完成設(shè)置

Servlet的初始化參數(shù)。JavaServletAPI-service()方法設(shè)計(jì)HTTPServelet的處理邏輯,一般只需覆蓋service()方法的子方法doget()、dopost方法即可。HttpServlet的其它子方法還有:

doPut()、doDelete()、doTrace()HttpServlet類(lèi)擴(kuò)展了GenericServlet類(lèi),繼承了所有標(biāo)準(zhǔn)Servlet的功能。JavaServletAPI-destroy()方法當(dāng)服務(wù)器卸載

Servlet時(shí),需在所有service()方法調(diào)用完成后,或在指定的時(shí)間間隔過(guò)后調(diào)用destroy()方法。一個(gè)Servlet在運(yùn)行service()方法時(shí)可能會(huì)產(chǎn)生其它的線程,因此請(qǐng)確認(rèn)在調(diào)用destroy()方法時(shí),這些線程已終止或完成。重載destroy()方法可附加其它功能,如管理服務(wù)器端資源。ServletRequest類(lèi)定義的方法Servlet的請(qǐng)求對(duì)象ServletRequest封裝請(qǐng)求參數(shù),響應(yīng)對(duì)象ServletRepones封裝輸出結(jié)果。請(qǐng)求對(duì)象ServletRequest中可用的方法有:getCharacterEncoding:

獲得請(qǐng)求的編碼格式信息isSecure:

確定請(qǐng)求是否通過(guò)安全通道發(fā)出getParamentName:

獲得請(qǐng)求中所有參數(shù)名列表getRemoteAddr:

獲得客戶端IPgetParament:

檢索與命名參數(shù)關(guān)聯(lián)的第一個(gè)參數(shù)的值(多選/同名)getParamentValues:檢索與命名參數(shù)類(lèi)型關(guān)聯(lián)的多個(gè)參數(shù)的值ServletRepones類(lèi)定義的方法響應(yīng)對(duì)象ServletRepones中可用的方法有:getOutStream:

獲得ServletOutStream對(duì)象用于二進(jìn)制輸出getWrite:獲得PrintWrite對(duì)象用于字符數(shù)據(jù)輸出setBuffferSize:為響應(yīng)建立內(nèi)存緩沖flushBuffer:

更新當(dāng)前緩沖區(qū)內(nèi)容

ServletAPI

-GetServletConfig()方法返回一個(gè)

ServletConfig

對(duì)象,調(diào)用該對(duì)象中的方法可用來(lái)返回當(dāng)前Servlet的初始化參數(shù)和

ServletContext接口。ServletContext

接口提供有關(guān)servlet

的環(huán)境信息。ServletConfig

對(duì)象和ServletContext

接口的初始參數(shù)來(lái)源于web.xml文件。

獲取Servlet初始參數(shù)和運(yùn)行環(huán)境ServletConfig

對(duì)象的方法:getInitParamenter(String):返回指定參數(shù)名的初始值;getInitParamenterName():返回初始參數(shù)名的集合;getServletContext():返回Servlet的運(yùn)行環(huán)境對(duì)象ServletContext,Servlet用ServletContext對(duì)象與容器通信;JavaServlet與web.xmlServletDefinitioninweb.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.2//EN""/j2ee/dtds/web-app_2_2.dtd"><web-app><servlet><servlet-name>registerpatron</servlet-name>

JavaServlet與web.xml(續(xù))

<servlet-class>com.borland.samples.welcome.registerPatron</servlet-class></servlet><servlet-mapping><servlet-name>registerpatron</servlet-name><url-pattern>/registerpatron</url-pattern></servlet-mapping></web-app>ServletContext

接口每種Servlet都運(yùn)行在一定的環(huán)境中,ServletContext提供有關(guān)servlet

的環(huán)境信息;Web容器中的一個(gè)Web應(yīng)用對(duì)應(yīng)一個(gè)ServletContext,Servlet可使用ServletConfig

對(duì)象的getServletContext方法獲得它所運(yùn)行時(shí)的ServletContext對(duì)象。JavaServletAPI

-GetServletInfo()方法GetServletInfo()方法提供有關(guān)servlet

的信息,如作者、版本、版權(quán)。創(chuàng)建HTTPServlet創(chuàng)建一個(gè)HTTPServlet,通常涉及下列四個(gè)步驟

擴(kuò)展

HttpServlet

抽象類(lèi)重載適當(dāng)?shù)姆椒āH绺采w(或稱(chēng)為重寫(xiě))doGet()或doPost()方法如果有HTTP請(qǐng)求信息的話,獲取該信息。從HttpServletRequest

對(duì)象中檢索

HTML表格所提交的數(shù)據(jù)或

URL上的查詢字符串生成

HTTP響應(yīng)

創(chuàng)建HTTPServlet響應(yīng)HttpServletResponse是“響應(yīng)”對(duì)象;“響應(yīng)”對(duì)象包含

getWriter()方法,該方法返回一個(gè)PrintWriter類(lèi)型的對(duì)象;使用

PrintWriter對(duì)象的

print()和println()方法編寫(xiě)

Servlet響應(yīng)內(nèi)容;out對(duì)象是缺省說(shuō)明的PrintWriter類(lèi)型對(duì)象,可直接使用;HTTPServlet例(一)RegisterPatronServlet代碼RegisterPatron.javapackage

com.ibm.ils.library.servlets;import

java.io.IOException;import

java.io.PrintWriter;import

javax.servlet.ServletException;import

javax.servlet.http.HttpServlet;import

javax.servlet.http.HttpServletRequest;import

javax.servlet.http.HttpServletResponse;public

class

RegisterPatron

extends

HttpServlet{public

void

doGet(HttpServletRequest

req,HttpServletResponse

resp)

throws

ServletException,IOException{

processRequest(req,resp);} HTTPServlet例(一)

public

void

doPost(HttpServletRequest

req,HttpServletResponse

resp)

throws

ServletException,IOException{

processRequest(req,resp); }

private

void

processRequest(

HttpServletRequest

req,

HttpServletResponse

resp)throws

IOException,IOException{

HTTPServlet例(一)

PrintWriterout=resp.getWriter();

intid=LibraryIdGenerator.generatorID("First","Last");

out.println("<HTML>");

out.println("<HEAD><TITLE>添加資助人</TITLE></HEAD>");

out.println("<BODY>");

out.println("<p>");

out.println("patronwithid"+id+"hasbeenadded.");

out.println("</BODY>");

out.println("</HTML>"); }}HTTPServlet樣例(二)

importjava.io.*;

importjava.util.*;

importjavax.servlet.*;

importjavax.servlet.http.*;

publicclassServletSampleextendsHttpServlet{//第一步:

擴(kuò)展

HttpServlet

抽象類(lèi)。

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

//第二步:重寫(xiě)doGet()方法

HTTPServlet樣例(二)

StringmyName="";//第三步:獲取HTTP請(qǐng)求信息

java.util.Enumerationkeys=request.getParameterNames();

while(keys.hasMoreElements());

{

key=(String)keys.nextElement();

if(key.equalsIgnoreCase("myName"))

myName=request.getParameter(key);

}

if(myName=="")

myName="Hello";一個(gè)HTTPServlet樣例(二)

//第四步:生成

HTTP響應(yīng)。

response.setStatus(HttpServlet.SC_OK);

response.setContentType(“text/html”);

response.setHeader("Pragma","No-cache");

response.setDateHeader("Expires",0);

response.setHeader("Cache-Control","no-cache");

PrintWriter

out=response.getWriter();

out.println("<HTML>");

out.println("<head><title>Justabasicservlet</title></head>");

out.println("<body>");一個(gè)HTTPServlet樣例(二)

out.println("<h1>Justabasicservlet</h1>");

out.println("<p>"+myName+",thisisaverybasicservletthatwritesanHTMLpage.");

out.println("<p>runningthosesamplesonyourWeb應(yīng)用服務(wù)器,"+"openthepage:");

out.println("</body></html>");

out.flush();

}

}

HTTPServlet樣例

上述ServletSample類(lèi)擴(kuò)展

HttpServlet

抽象類(lèi)、重寫(xiě)doGet()方法。在重寫(xiě)的doGet()方法中,獲取HTTP請(qǐng)求中的一個(gè)任選的參數(shù)(myName),該參數(shù)可作為調(diào)用的

URL上的查詢參數(shù)傳遞到

Servlet。使用示例如下:http:///servlet/ServletSample?myname=Michael

處理HTTPRequest的步驟處理輸入數(shù)據(jù)(請(qǐng)求字符串或form表單)處理HTTPRequest頭部給出的屬性值處理/調(diào)用商務(wù)邏輯設(shè)置HTTPResponse響應(yīng)狀態(tài)和文檔內(nèi)容格式設(shè)置HTTPResponse響應(yīng)的其它頭部信息向HTTPResponse響應(yīng)對(duì)象中輸出響應(yīng)內(nèi)容(HTTP規(guī)范參見(jiàn)RFC2616)調(diào)用

Servlet由URL調(diào)用(瀏覽器、HTML)在

<FORM>標(biāo)記中調(diào)用在JSP文件中調(diào)用URL調(diào)用Servlet應(yīng)用服務(wù)器管理器可注冊(cè)Servlet,同時(shí)指定Servlet名稱(chēng):http:///servlet/hi可以指定

Servlet和類(lèi)使用同一名稱(chēng)。使用

Servlet別名:應(yīng)用服務(wù)器管理器來(lái)配置

Servlet別名。在<FORM>標(biāo)記中調(diào)用

Servlet<FORMMETHOD="GET"ACTION="/servlet/myservlet"><OL><INPUTTYPE="radio"NAME="broadcast"VALUE="am">AM<BR><INPUTTYPE="radio"NAME="broadcast"VALUE="fm">FM<BR></OL></FORM>(表單完成GET方法的URL參數(shù)編碼)在JSP中調(diào)用

Servlet(>=JSP1.0)<jsp:forwardpage="myservlet"><jsp:includepage="myservlet">Servlet高級(jí)特性-ResponseRedirectionRedirecttheservletresponseto:-Anotherservlet-Anerrorpage(HTMLorJSP)URLmustbeavailabletothecallingservlet,inthesameservletcontext.Twoformsofresponseredirection:-Standardredirectusingresponse.sendRedirect()-Redirecttoanerrorpageusingresponse.sendError()Servlet高級(jí)特性-ResponseRedirectionprivatevoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)...{//processrequestheaders&querydata...//redirecttoanotherURLStringurl="/YourResults.html";if(test.equals("Error"))response.sendError(response.SC_BAD_REQUEST);elseresponse.sendRedirect(response.encodeRedirectURL(url));return;}//瀏覽器實(shí)現(xiàn)重定向,導(dǎo)致客戶端重新發(fā)出新的請(qǐng)求Servlet高級(jí)特性-ServletContextServletContext提供Servlet運(yùn)行環(huán)境信息,一個(gè)Servlet屬于管理員確定的唯一ServletContext一個(gè)Web應(yīng)用對(duì)應(yīng)一個(gè)ServletContextServlet可使用ServletContext接口來(lái)存儲(chǔ)和檢索運(yùn)行環(huán)境信息,也可與其它Servlet共享信息Servlet可用getServletContext()方法得到它所運(yùn)行的ServletContextServlet高級(jí)特性-ServletContextServletContext接口提供的基本服務(wù)有:setAttribute

在ServletContext中存儲(chǔ)信息getAttribute

檢索

ServletContext中的信息getAttributeName

獲得ServletContext中屬性的名稱(chēng)removeAttribute

刪除ServletContext中一個(gè)屬性Servlet高級(jí)特性-RequestDispatchergetServletContext().getRequestDispatcher("/pages/showBalance.jsp").forward(req,res);getServletContext().getRequestDispatcher("/pages/navigation_bar.html").include(req,res);//直接從servlet轉(zhuǎn)出,無(wú)需客戶端參與Servlet高級(jí)特性-forward/includeServlet高級(jí)特性-SharingObjectsThereareseveralwaystoshareobjectsbetweenservlets/JSPs:-ServletContextgetServletContext().setAttribute("objectName",anObject);getServletContext().getAttribute("objectName");-HttpServletRequestrequest.setAttribute("objectName",anObject);request.getAttribute("objectName");JSP技術(shù)JSP簡(jiǎn)介由于基于JavaServlet技術(shù)的網(wǎng)頁(yè)制作不能脫離JavaServlet,如果開(kāi)發(fā)人員想要調(diào)整頁(yè)面顯示,必須重新編譯該JavaServlet。Jsp為解決這種問(wèn)題應(yīng)用而生,將應(yīng)用程序邏輯和頁(yè)面顯示分離。簡(jiǎn)單地說(shuō),一個(gè)JSP網(wǎng)頁(yè)就是在HTML網(wǎng)頁(yè)中包含了能夠生成動(dòng)態(tài)內(nèi)容的可執(zhí)行應(yīng)用程序代碼,此應(yīng)用程序可能包含JavaBean,JDBC對(duì)象,EJB對(duì)象和RMI對(duì)象。JSPJSP是包含了JSP標(biāo)記的HTML/XML文檔JSP可以使用JavaBeans訪問(wèn)外部應(yīng)用和數(shù)據(jù)資源JSP可以與JavaServlet結(jié)合使用JSP技術(shù)的特點(diǎn)內(nèi)容表達(dá)與數(shù)據(jù)生成分離更好的M/V/C易用性移植與跨平臺(tái)基于Java支持協(xié)作開(kāi)發(fā)JSP簡(jiǎn)介JSPisatechnologythatletsyoumixregularstaticHTMLwithdynamicallygeneratedHTML.JSPsallowserver-sidescripting:-StatictagsareHTMLorXMLorothermarkuplanguage.-Dynamiccontentgeneratedbyscriptingcode.Javaisthe(default)scriptinglanguage.

JSP簡(jiǎn)介AJSPfile(hasanextensionof.jsp)containsanycombinationof:-JSPsyntax.-MarkuptagssuchasHTMLorXML.Example:<HTML><HEAD><TITLE>SimpleJSP</TITLE></HEAD><BODY><H1>Today'sdateandtimeare:<%=newjava.util.Date()%></H1></BODY></HTML>JSP簡(jiǎn)介訪問(wèn)JSP的方式:

ByURLByaservletByaJSPJSP可調(diào)用:

AservletAnotherJSP

其它可重用的組件,如JavaBean

等瀏覽器請(qǐng)求JSP文件當(dāng)Web服務(wù)器接收到一個(gè)JSP文件請(qǐng)求時(shí),服務(wù)器將請(qǐng)求發(fā)送至應(yīng)用服務(wù)器。應(yīng)用服務(wù)器對(duì)

JSP文件進(jìn)行語(yǔ)法分析并生成Java源文件(被編譯和執(zhí)行為Servlet)。Java源文件的生成和編譯僅在初次調(diào)用Servlet時(shí)發(fā)生,除非已經(jīng)更新了原始的

JSP文件。應(yīng)用服務(wù)器將檢測(cè)JSP文件的更新,并在執(zhí)行它之前重新生成和編譯Servlet。Servlet請(qǐng)求JSP文件發(fā)送至

Servlet的請(qǐng)求生成動(dòng)態(tài)內(nèi)容,并調(diào)用JSP文件形成動(dòng)態(tài)內(nèi)容頁(yè)面發(fā)送到瀏覽器應(yīng)用服務(wù)器支持Servlet將一個(gè)對(duì)象放入(通常是一個(gè)Bean)請(qǐng)求對(duì)象中,并將該請(qǐng)求傳遞到另一個(gè)頁(yè)面(通常是一個(gè)JSP文件)以供顯示調(diào)用的頁(yè)面從請(qǐng)求對(duì)象中檢索Bean,并用JSP來(lái)生成客戶端的HTMLServlet請(qǐng)求JSP文件模型JSP頁(yè)面由JSP引擎執(zhí)行,JSP引擎接受客戶端對(duì)JSP頁(yè)面的請(qǐng)求,并且生成JSP頁(yè)面給客戶端的響應(yīng)當(dāng)JSP頁(yè)面第一次被調(diào)用時(shí),會(huì)被編譯成為一個(gè)JavaServlet類(lèi),并且存儲(chǔ)在服務(wù)器的內(nèi)存中。JSP頁(yè)面可以用于由不同協(xié)議、組件和格式所組成的聯(lián)合體中。JSP語(yǔ)法規(guī)范1999年12月,SUN公司發(fā)布《JSP1.1規(guī)范》。JCP(JavaCommunityProcess:Java社區(qū)項(xiàng)目)組織負(fù)責(zé)制定JSP規(guī)范,成員包括規(guī)范作者,應(yīng)用服務(wù)器、JSP和服務(wù)器小程序的開(kāi)發(fā)者,他們來(lái)自大小小各個(gè)公司商家,也有的是開(kāi)放式資源的參與者。JCP推出了《JSP1.2規(guī)范》(代號(hào)JSR-053)。JCP的JSP1.2是根據(jù)最新版本《Servlet2.3規(guī)范》制定的,向后兼容JSP1.1。JSP2.0是對(duì)JSP1.2的升級(jí),它增加了一種稱(chēng)為SimpleTag的新擴(kuò)展機(jī)制來(lái)簡(jiǎn)化標(biāo)簽API(TagAPI)。JSP的基本語(yǔ)法語(yǔ)法(1)JSP指示

JSP指示將指令傳遞到JSP引擎(頁(yè)面指示,語(yǔ)言指示,包含指示,標(biāo)識(shí)庫(kù)指示)(2)JSP標(biāo)識(shí)核心標(biāo)識(shí)包括:jsp:useBean;jsp:setProperty;jsp:getProperty(3)腳本元件

JSP頁(yè)面中包含代碼段,在請(qǐng)求的處理過(guò)程中被執(zhí)行。JSP例子<html><%@pagelanguage==“java”imports==“com.wombat.JSP.*”%><H1>Welcome</H1><P>Todayis</p><jsp:useBeanid==“clock”class==“calendar.jspCalendar”/><u1><li>Day:<%==clock.getDayofMonth()%><li>Year:<%==clock.getYear()%></u1><%if(Calendar.getInstance().get(Calendar.AM-PM)====Calendar.AM){%>goodmorning<%}else{%>goodafternoon<%}%><%@includefile==“copyright.html”%></html>JSP例子JSP語(yǔ)言指示:第二行指出從該頁(yè)面將訪問(wèn)的Java編程語(yǔ)言的擴(kuò)展位置。

固定模板數(shù)據(jù),(UL)和(H1)標(biāo)識(shí)。

JSP動(dòng)作標(biāo)識(shí):jsp:useBean標(biāo)識(shí)實(shí)例化服務(wù)器端的ClockJavaBean.

表達(dá)式:JSP引擎計(jì)算在<%==和%>標(biāo)記間的所有東西。例如時(shí)鐘組件(Clock)的Day和year屬性值作為字符串返回,并且作為輸出插入到JSP文件中。

小腳本:程序中的小腳本確定現(xiàn)在是上午還是下午,并且據(jù)此來(lái)歡迎用戶。JSP語(yǔ)法(JSP1.1規(guī)范)指令(Directive)

通過(guò)設(shè)定JSP引擎的特性從整體上控制生成的Servlet結(jié)構(gòu)腳本元素(ScriptingElement)腳本元素用來(lái)嵌入Java代碼,這些Java代碼將成為轉(zhuǎn)換得到的Servlet的一部分動(dòng)作(Action)用來(lái)引入已有的組件JSP語(yǔ)法(JSP1.1語(yǔ)法規(guī)范)Directives

InstructionstotheJSPengine/compilerScripting

Declarations-additionalmethodsandvariablestobegeneratedintotheJSPservlet

Scriptlets-InlineJavacode

Expressions-JavacodethatresolvestoStringsActionsavailablewithintheJSPservlet

Standardactionsforbeanusage,flowcontrolCustomactionscanbeaddedJSP1.1語(yǔ)法-3類(lèi)指令<%@pagelanguage="java"%><%@includefile="companyBanner.html"%><%@taglib

uri="tagLibraryURI"prefix="tagPrefix"%>JSP1.1語(yǔ)法-page指令

格式:

<%@pageatt="val"%>作用:定義了應(yīng)用于整個(gè)JSP頁(yè)面的屬性,向轉(zhuǎn)換器說(shuō)明所生成的類(lèi)的不同特性。等價(jià)的XML表達(dá):

<jsp:directive.page

att="val"\>例:<%@pagelanguage="java"%>合法的屬性att如下表:JSP1.1語(yǔ)法-合法的page屬性language="scriptingLanguage“isThreadSafe="true|false"extends="className"info="info_text"import="packageList"errorPage

="error_url"session="true|false"isErrorPage

="true|false"buffer="none|sizekb"contentType

="Type;autoFlush

=“true|false“JSP語(yǔ)法-page指令

(1)language:文件中所使用的腳本語(yǔ)言。示例如下:<%@pagelanguage="java"%>默認(rèn)值:java(2)isThreadSafe="true|false“默認(rèn)值:true該頁(yè)面多線程請(qǐng)求安全(3)extends="className"info="info_text“默認(rèn)值:JSP類(lèi)定義的標(biāo)準(zhǔn)超類(lèi)該jsp生成的Servlet是指定Java語(yǔ)言類(lèi)的擴(kuò)展。示例如下:<%@pageextends="MyHttpJspPage"%>JSP語(yǔ)法-page指令

(4)errorPage

="error_url“默認(rèn)值:任何未捕獲的異常(exception),顯示error.jsp(5)session="true|false“默認(rèn)值:true,可以創(chuàng)建HttpSession(6)isErrorPage

="true|false“默認(rèn)值:false,該不是一個(gè)錯(cuò)誤提示頁(yè)面(7)buffer="none|sizekb“默認(rèn)值:8kb的默認(rèn)輸出器緩沖JSP語(yǔ)法-page指令

(8)contentType="Type;生成的響應(yīng)的MIME類(lèi)型。默認(rèn)值:text/html例:<%@

pagecontent_type="text/html;charset=gb2312"%>。(9)autoFlush=“true|false“默認(rèn)值:true,緩沖區(qū)滿自動(dòng)刷新(10)import="packageList"JSP頁(yè)面中導(dǎo)入的Java語(yǔ)言軟件包名或類(lèi)名列表,該列表是用逗號(hào)分隔。JSP語(yǔ)法-page指令

默認(rèn)值:

java.lang.*

java.servlet.*

java.servlet.http.*

java.servlet.jsp.*例:<%@pageimport="java.io.*,java.util.Hashtable"%>JSP1.1語(yǔ)法-include指令格式:<%@includefile="url"%>

作用:當(dāng)JSP轉(zhuǎn)換成Servlet時(shí),應(yīng)當(dāng)包含指定的文件。引入文件是靜態(tài)包含。等價(jià)的XML表達(dá):

<jsp:directive.includefile=“url”\>

例:<%@includefile="companyBanner.html"%>JSP1.1語(yǔ)法-taglib指令格式:

<%@taglib

uri="tagLibraryURI"prefix=“tagPrefix”%>

Jsp前綴是與標(biāo)準(zhǔn)動(dòng)作關(guān)聯(lián)的。JSP語(yǔ)法-JSP聲明格式:<%!code%>作用:代碼被插入到Servlet類(lèi)(在service方法之外)。等價(jià)的XML表達(dá)是:

<jsp:declaration>

code

</jsp:declaration>JSP語(yǔ)法-JSP聲明例:聲明java域<%!Privatestringpattern=“mm/dd/yyyy”%>聲明java方法<%!Publicstringformat(java.util.dated,stringpattern){

java.text.simpledateFormat

sdf=newjava.text.simpleDateaFormat(pattern);stringresult=sdf.format(d);returnresult;}%>JSP語(yǔ)法-Scriptlet格式:<%valid_code_fragment%>作用:插入到service方法的代碼。等價(jià)的XML表達(dá)是:

<jsp:scriptlet>

code

</jsp:scriptlet>例:<%for(intI=1;I<=5;I++){out.println(“<p><FONTSIZE=“+I+“>Hello</FONT></p>”);}%>JSP語(yǔ)法-JSP注釋

JSP注釋?zhuān)海?--comment--%>JSP轉(zhuǎn)換成Servlet時(shí)被忽略HTML/XML注釋?zhuān)海?--comment-->JSP語(yǔ)法-表達(dá)式

格式:

<%=expression%>作用:--Theexpressionisevaluated--ResultisconvertedtoaStringanddisplayed例:<%=incrementCounter()%>JSP語(yǔ)法-內(nèi)置變量

request

用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GE

溫馨提示

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