第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第1頁
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第2頁
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第3頁
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第4頁
第5講 構(gòu)建Web應(yīng)用技術(shù)(服務(wù)器端技術(shù))_第5頁
已閱讀5頁,還剩122頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

,ASP技術(shù)引入

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

SSI通常稱為服務(wù)器端嵌入,是一種基于服務(wù)器的網(wǎng)頁制作技術(shù);在以.shtml為擴展名的SSI文件中,包含標(biāo)準(zhǔn)的HTML編碼和SSI指令;標(biāo)準(zhǔn)的HTML編碼會被直接送到瀏覽器上,而內(nèi)嵌的SSI命令則先被網(wǎng)絡(luò)服務(wù)器解釋執(zhí)行,輸出信息也將作為標(biāo)準(zhǔn)的HTML而被送至瀏覽器。最早的服務(wù)器端網(wǎng)頁生成技術(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ù)運行時的具體情況,動態(tài)生成HTML頁面的技術(shù)。通過CGI接口,Web服務(wù)器能夠執(zhí)行CGI應(yīng)用程序,接收用戶的輸入,并將應(yīng)用程序的輸出,如文字、圖形、聲音等傳遞給一個Web瀏覽器。CGI程序語言: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請求信息;執(zhí)行CGI程序;生成HTML文件返回瀏覽器。CGI工作原理

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

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

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

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

IBMNet.data

MicroSoft:ASP

Allaire:ColdFusion

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

Lerdorf發(fā)明了專用于Web服務(wù)端編程的PHP(PersonalHomePageTools)語言;PHP語言將HTML代碼和PHP指令合成為完整的服務(wù)端動態(tài)PHP頁面文件、具有PHP文件處理功能的WEB服務(wù)器生成HTML文檔;1996年,Microsoft借鑒PHP的思想,在其Web服務(wù)器IIS3.0中引入了ASP技術(shù)。ASP使用的腳本語言是我們熟悉的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編寫出來的。Web瀏覽器和服務(wù)器都能夠直接調(diào)用插件代碼。插件(Plug-In)軟件安裝之后,就成為他們的一部分,處理特定類型的請求。最著名的API是Netscape公司的NSAPI和Microsoft公司的ISAPI.缺點:由于NSAPI或ISAPI是動態(tài)鏈接的方式,因此在執(zhí)行時若出現(xiàn)問題,會導(dǎo)致Web服務(wù)器癱瘓;對平臺的依賴性太高;只能使用C語言開發(fā)。服務(wù)端APIAPI(ApplicationProgramInterface):應(yīng)用程序接口API解決多線程問題,而CGI無法實現(xiàn)多線程API使用動態(tài)鏈接庫只能用C語言編寫兩種API:Netscape公司的NSAPI和Microsoft的ISAPI服務(wù)端API

Netscape和MicroSoft

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

method=post>輸入注冊信息:<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)點:1)執(zhí)行速度快;2)多線程處理多用戶訪問。缺點:1)NSAPI

ISAPI

對網(wǎng)站平臺的依賴型太高;2)NSAPI

ISAPI

只提供

C

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

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

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

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

2.0中新增的一個全新功能,

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

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

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

Servlet來說,在JAVA

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

ServletAPI定義了JAVA

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

JSP用于創(chuàng)建可支持跨平臺及跨Web服務(wù)器的動態(tài)網(wǎng)頁;可以調(diào)用用Java類訪問外部應(yīng)用和數(shù)據(jù)資源;JSP將應(yīng)用程序邏輯和頁面顯示分離。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ù)的特點內(nèi)容表達(dá)與數(shù)據(jù)生成分離更好的M/V/C易用性移植與跨平臺基于Java支持協(xié)作開發(fā)JSP與其它動態(tài)網(wǎng)頁技術(shù)比較與傳統(tǒng)的CGI方式相比JSP和ASP相比JSP和純Servlet相比JSP和JavaScript相比幾種服務(wù)器端技術(shù)的比較本節(jié)結(jié)束

Servlet&JSP

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

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

的原因

性能比CGI高效

Servlet可輕松地處理多個并發(fā)請求

Servlet

是什么?

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

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

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

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

Servlet發(fā)出請求時;重新裝入Servlet時。裝入

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

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

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

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

Servlet的基本軟件包:

javax.servlet

(7個接口5個類)

javax.servlet.http

(HTTPServlet5個接口4個類)

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

javax.servlet.GenericServlet

(屬于javax.servlet包)

javax.servlet.http.HttpServlet

(屬于javax.servlet.http包)HttpServlet類擴展了GenericServlet類,添加了處理HTTP請求的方法。Severlet類的繼承

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

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

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

service(HTTPServletRequest

reg,HTTPServletResponse

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

HttpServlet

類包含

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

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

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

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

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

ServletConfig

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

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

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

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

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

獲得請求的編碼格式信息isSecure:

確定請求是否通過安全通道發(fā)出getParamentName:

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

獲得客戶端IPgetParament:

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

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

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

ServletAPI

-GetServletConfig()方法返回一個

ServletConfig

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

ServletContext接口。ServletContext

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

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

對象和ServletContext

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

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

對象的方法:getInitParamenter(String):返回指定參數(shù)名的初始值;getInitParamenterName():返回初始參數(shù)名的集合;getServletContext():返回Servlet的運行環(huán)境對象ServletContext,Servlet用ServletContext對象與容器通信;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都運行在一定的環(huán)境中,ServletContext提供有關(guān)servlet

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

對象的getServletContext方法獲得它所運行時的ServletContext對象。JavaServletAPI

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

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

擴展

HttpServlet

抽象類重載適當(dāng)?shù)姆椒?。如覆蓋(或稱為重寫)doGet()或doPost()方法如果有HTTP請求信息的話,獲取該信息。從HttpServletRequest

對象中檢索

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

URL上的查詢字符串生成

HTTP響應(yīng)

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

getWriter()方法,該方法返回一個PrintWriter類型的對象;使用

PrintWriter對象的

print()和println()方法編寫

Servlet響應(yīng)內(nèi)容;out對象是缺省說明的PrintWriter類型對象,可直接使用;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{//第一步:

擴展

HttpServlet

抽象類。

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

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

HTTPServlet樣例(二)

StringmyName="";//第三步:獲取HTTP請求信息

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

while(keys.hasMoreElements());

{

key=(String)keys.nextElement();

if(key.equalsIgnoreCase("myName"))

myName=request.getParameter(key);

}

if(myName=="")

myName="Hello";一個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>");一個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類擴展

HttpServlet

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

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

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

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

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

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

Servlet和類使用同一名稱。使用

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

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

在ServletContext中存儲信息getAttribute

檢索

ServletContext中的信息getAttributeName

獲得ServletContext中屬性的名稱removeAttribute

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

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

ByURLByaservletByaJSPJSP可調(diào)用:

AservletAnotherJSP

其它可重用的組件,如JavaBean

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

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

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

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

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

JSP頁面中包含代碼段,在請求的處理過程中被執(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語言指示:第二行指出從該頁面將訪問的Java編程語言的擴展位置。

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

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

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

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

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

InstructionstotheJSPengine/compilerScripting

Declarations-additionalmethodsandvariablestobegeneratedintotheJSPservlet

Scriptlets-InlineJavacode

Expressions-JavacodethatresolvestoStringsActionsavailablewithintheJSPservlet

Standardactionsforbeanusage,flowcontrolCustomactionscanbeaddedJSP1.1語法-3類指令<%@pagelanguage="java"%><%@includefile="companyBanner.html"%><%@taglib

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

格式:

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

<jsp:directive.page

att="val"\>例:<%@pagelanguage="java"%>合法的屬性att如下表:JSP1.1語法-合法的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語法-page指令

(1)language:文件中所使用的腳本語言。示例如下:<%@pagelanguage="java"%>默認(rèn)值:java(2)isThreadSafe="true|false“默認(rèn)值:true該頁面多線程請求安全(3)extends="className"info="info_text“默認(rèn)值:JSP類定義的標(biāo)準(zhǔn)超類該jsp生成的Servlet是指定Java語言類的擴展。示例如下:<%@pageextends="MyHttpJspPage"%>JSP語法-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,該不是一個錯誤提示頁面(7)buffer="none|sizekb“默認(rèn)值:8kb的默認(rèn)輸出器緩沖JSP語法-page指令

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

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

默認(rèn)值:

java.lang.*

java.servlet.*

java.servlet.http.*

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

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

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

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

<%@taglib

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

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

<jsp:declaration>

code

</jsp:declaration>JSP語法-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語法-Scriptlet格式:<%valid_code_fragment%>作用:插入到service方法的代碼。等價的XML表達(dá)是:

<jsp:scriptlet>

code

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

JSP注釋:<%--comment--%>JSP轉(zhuǎn)換成Servlet時被忽略HTML/XML注釋:<!--comment-->JSP語法-表達(dá)式

格式:

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

request

用戶端請求,此請求會包含來自GE

溫馨提示

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

評論

0/150

提交評論