第5講 構建Web應用技術(服務器端技術)_第1頁
第5講 構建Web應用技術(服務器端技術)_第2頁
第5講 構建Web應用技術(服務器端技術)_第3頁
第5講 構建Web應用技術(服務器端技術)_第4頁
第5講 構建Web應用技術(服務器端技術)_第5頁
已閱讀5頁,還剩122頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

構建Web應用技術

-服務器端技術服務器端邏輯體系結構B/S交互動作:瀏覽器的每一個動作都產生一個對服務器的請求,服務器處理這個請求計算結果,生成一個新的頁面發送到客戶端。優點:客戶端初次啟動快、對客戶端資源要求低。支持的技術:服務器端技術,如JSPJavaServlet、ASP等。服務器端技術發展靜態-->動態

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

,ASP技術引入

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

SSI通常稱為服務器端嵌入,是一種基于服務器的網頁制作技術;在以.shtml為擴展名的SSI文件中,包含標準的HTML編碼和SSI指令;標準的HTML編碼會被直接送到瀏覽器上,而內嵌的SSI命令則先被網絡服務器解釋執行,輸出信息也將作為標準的HTML而被送至瀏覽器。最早的服務器端網頁生成技術-SSI

<html>

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

<body>

<h2>新聞

</h2>

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

<p>新聞更新日期:

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

</body></html>

*功能非常有限CGI概述

CGI(CommonGatewayInterface):通用網關接口是第一種真正使服務器能根據運行時的具體情況,動態生成HTML頁面的技術。通過CGI接口,Web服務器能夠執行CGI應用程序,接收用戶的輸入,并將應用程序的輸出,如文字、圖形、聲音等傳遞給一個Web瀏覽器。CGI程序語言:C、Shell、Perl和VisualBasic等。CGI概述

CGI程序在UNIX系統中放在cgi-bin子目錄下,在Windows系統中放在cgi-win子目錄下。CGI程序兩種調用方式:

(1)URL調用:

/cgi-win/cgi.exe

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

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

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

服務器端腳本技術頁面中嵌入腳本,頁面被請求時腳本由服務器解釋執行,產生動態內容

。可采用的技術:

IBMNet.data

MicroSoft:ASP

Allaire:ColdFusion

PHP缺點:局限于特定web服務器產品和OSCGI與PHP、ASP1994年,Rasmus

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

<html>

<body>

<?php

$db=mysql_connect(“localhost”,“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,“last”));

?>

</body>

</html>

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

Netscape和MicroSoft

公司分別提供了基于本身的Web服務器的API調用:NetscapeNSAPI、MicroSoftISAPI基本思路是由HTTP守護進程加載可獨立執行的CGI程序改為加載動態鏈接庫,取消了啟動與釋放進程的開銷。服務端API<html><head>ISAPI示例網頁</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>服務端API優點:1)執行速度快;2)多線程處理多用戶訪問。缺點:1)NSAPI

ISAPI

對網站平臺的依賴型太高;2)NSAPI

ISAPI

只提供

C

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

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

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

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

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

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

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

等集成開發工具。Servlet技術-特性持久性和性能:JAVA

Servlet來說,在JAVA

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

ServletAPI定義了JAVA

Servlet和Web服務器軟件之間的接口。JSP(JavaServerPages)JSP網頁就是在HTML網頁中包含了能夠生成動態內容的可執行應用程序代碼(JSP標記);

JSP用于創建可支持跨平臺及跨Web服務器的動態網頁;可以調用用Java類訪問外部應用和數據資源;JSP將應用程序邏輯和頁面顯示分離。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技術的特點內容表達與數據生成分離更好的M/V/C易用性移植與跨平臺基于Java支持協作開發JSP與其它動態網頁技術比較與傳統的CGI方式相比JSP和ASP相比JSP和純Servlet相比JSP和JavaScript相比幾種服務器端技術的比較本節結束

Servlet&JSP

開發技術

JavaServlet開發技術采用Servlet

的原因

性能比CGI高效

Servlet可輕松地處理多個并發請求

Servlet

是什么?

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

Servlet。裝入后,Servlet和采用輕量級線程響應多個客戶機發出的請求;

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

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

Servlet發出請求時;重新裝入Servlet時。裝入

Servlet后:創建一個Servlet實例(而不是多個);調用

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

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

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

Servlet的基本軟件包:

javax.servlet

(7個接口5個類)

javax.servlet.http

(HTTPServlet5個接口4個類)

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

javax.servlet.GenericServlet

(屬于javax.servlet包)

javax.servlet.http.HttpServlet

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

HTTPServlet的請求/響應流程瀏覽器發出HTTP請求對象Request對象;Web容器將請求數據封裝:請求對象Request--〉HttpServletRequest

響應對象Response--〉HttpServletResponse

調用HTTPServlet中的service方法:

service(HTTPServletRequest

reg,HTTPServletResponse

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

HttpServlet

類包含

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

在Servlet的生命期中,僅執行一次

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

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

Servlet的初始化參數,并用

ServletConfig

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

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

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

doPut()、doDelete()、doTrace()HttpServlet類擴展了GenericServlet類,繼承了所有標準Servlet的功能。JavaServletAPI-destroy()方法當服務器卸載

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

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

確定請求是否通過安全通道發出getParamentName:

獲得請求中所有參數名列表getRemoteAddr:

獲得客戶端IPgetParament:

檢索與命名參數關聯的第一個參數的值(多選/同名)getParamentValues:檢索與命名參數類型關聯的多個參數的值ServletRepones類定義的方法響應對象ServletRepones中可用的方法有:getOutStream:

獲得ServletOutStream對象用于二進制輸出getWrite:獲得PrintWrite對象用于字符數據輸出setBuffferSize:為響應建立內存緩沖flushBuffer:

更新當前緩沖區內容

ServletAPI

-GetServletConfig()方法返回一個

ServletConfig

對象,調用該對象中的方法可用來返回當前Servlet的初始化參數和

ServletContext接口。ServletContext

接口提供有關servlet

的環境信息。ServletConfig

對象和ServletContext

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

獲取Servlet初始參數和運行環境ServletConfig

對象的方法:getInitParamenter(String):返回指定參數名的初始值;getInitParamenterName():返回初始參數名的集合;getServletContext():返回Servlet的運行環境對象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(續)

<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都運行在一定的環境中,ServletContext提供有關servlet

的環境信息;Web容器中的一個Web應用對應一個ServletContext,Servlet可使用ServletConfig

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

-GetServletInfo()方法GetServletInfo()方法提供有關servlet

的信息,如作者、版本、版權。創建HTTPServlet創建一個HTTPServlet,通常涉及下列四個步驟

擴展

HttpServlet

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

對象中檢索

HTML表格所提交的數據或

URL上的查詢字符串生成

HTTP響應

創建HTTPServlet響應HttpServletResponse是“響應”對象;“響應”對象包含

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

PrintWriter對象的

print()和println()方法編寫

Servlet響應內容;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響應。

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應用服務器,"+"openthepage:");

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

out.flush();

}

}

HTTPServlet樣例

上述ServletSample類擴展

HttpServlet

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

URL上的查詢參數傳遞到

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

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

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

<FORM>標記中調用在JSP文件中調用URL調用Servlet應用服務器管理器可注冊Servlet,同時指定Servlet名稱:http:///servlet/hi可以指定

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

Servlet別名:應用服務器管理器來配置

Servlet別名。在<FORM>標記中調用

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參數編碼)在JSP中調用

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;}//瀏覽器實現重定向,導致客戶端重新發出新的請求Servlet高級特性-ServletContextServletContext提供Servlet運行環境信息,一個Servlet屬于管理員確定的唯一ServletContext一個Web應用對應一個ServletContextServlet可使用ServletContext接口來存儲和檢索運行環境信息,也可與其它Servlet共享信息Servlet可用getServletContext()方法得到它所運行的ServletContextServlet高級特性-ServletContextServletContext接口提供的基本服務有: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轉出,無需客戶端參與Servlet高級特性-forward/includeServlet高級特性-SharingObjectsThereareseveralwaystoshareobjectsbetweenservlets/JSPs:-ServletContextgetServletContext().setAttribute("objectName",anObject);getServletContext().getAttribute("objectName");-HttpServletRequestrequest.setAttribute("objectName",anObject);request.getAttribute("objectName");JSP技術JSP簡介由于基于JavaServlet技術的網頁制作不能脫離JavaServlet,如果開發人員想要調整頁面顯示,必須重新編譯該JavaServlet。Jsp為解決這種問題應用而生,將應用程序邏輯和頁面顯示分離。簡單地說,一個JSP網頁就是在HTML網頁中包含了能夠生成動態內容的可執行應用程序代碼,此應用程序可能包含JavaBean,JDBC對象,EJB對象和RMI對象。JSPJSP是包含了JSP標記的HTML/XML文檔JSP可以使用JavaBeans訪問外部應用和數據資源JSP可以與JavaServlet結合使用JSP技術的特點內容表達與數據生成分離更好的M/V/C易用性移植與跨平臺基于Java支持協作開發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可調用:

AservletAnotherJSP

其它可重用的組件,如JavaBean

等瀏覽器請求JSP文件當Web服務器接收到一個JSP文件請求時,服務器將請求發送至應用服務器。應用服務器對

JSP文件進行語法分析并生成Java源文件(被編譯和執行為Servlet)。Java源文件的生成和編譯僅在初次調用Servlet時發生,除非已經更新了原始的

JSP文件。應用服務器將檢測JSP文件的更新,并在執行它之前重新生成和編譯Servlet。Servlet請求JSP文件發送至

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

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

JSP頁面中包含代碼段,在請求的處理過程中被執行。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編程語言的擴展位置。

固定模板數據,(UL)和(H1)標識。

JSP動作標識:jsp:useBean標識實例化服務器端的ClockJavaBean.

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

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

通過設定JSP引擎的特性從整體上控制生成的Servlet結構腳本元素(ScriptingElement)腳本元素用來嵌入Java代碼,這些Java代碼將成為轉換得到的Servlet的一部分動作(Action)用來引入已有的組件JSP語法(JSP1.1語法規范)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"%>作用:定義了應用于整個JSP頁面的屬性,向轉換器說明所生成的類的不同特性。等價的XML表達:

<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"%>默認值:java(2)isThreadSafe="true|false“默認值:true該頁面多線程請求安全(3)extends="className"info="info_text“默認值:JSP類定義的標準超類該jsp生成的Servlet是指定Java語言類的擴展。示例如下:<%@pageextends="MyHttpJspPage"%>JSP語法-page指令

(4)errorPage

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

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

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

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

默認值:

java.lang.*

java.servlet.*

java.servlet.http.*

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

作用:當JSP轉換成Servlet時,應當包含指定的文件。引入文件是靜態包含。等價的XML表達:

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

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

<%@taglib

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

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

<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表達是:

<jsp:scriptlet>

code

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

JSP注釋:<%--comment--%>JSP轉換成Servlet時被忽略HTML/XML注釋:<!--comment-->JSP語法-表達式

格式:

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

request

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

溫馨提示

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

評論

0/150

提交評論