分布式計算、云計算與大數(shù)據(jù) 第2版 課件 第3章 WEB原理與應用開發(fā)方法_第1頁
分布式計算、云計算與大數(shù)據(jù) 第2版 課件 第3章 WEB原理與應用開發(fā)方法_第2頁
分布式計算、云計算與大數(shù)據(jù) 第2版 課件 第3章 WEB原理與應用開發(fā)方法_第3頁
分布式計算、云計算與大數(shù)據(jù) 第2版 課件 第3章 WEB原理與應用開發(fā)方法_第4頁
分布式計算、云計算與大數(shù)據(jù) 第2版 課件 第3章 WEB原理與應用開發(fā)方法_第5頁
已閱讀5頁,還剩116頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章WEB原理與應用開發(fā)提綱3.1 HTTP協(xié)議3.2 Web開發(fā)技術簡介3.3 CGI3.4 Web會話3.5 Applet和Servlet3.6 SSH框架與應用開發(fā)

WWW是到目前為止最著名的分布式應用,中文名字為“萬維網(wǎng)”,常簡稱為Web。WWW是目前世界上最具影響力的互聯(lián)網(wǎng)服務,起源于1990年底,最早由歐洲核物理研究中心的Tim-BernersLee提出的超文本傳輸協(xié)議HTTP,其目的是為研究中心分布在世界各地的科學家提供一個共享信息的平臺。WWW從應用功能看,WWW是一種交互式圖形界面的Internet服務,具有強大的信息連接功能,它使得成千上萬的用戶通過簡單的圖形界面就可以訪問各個大學、組織、公司等的最新信息和各種服務。從技術上看,WWW是一個基于HTTP的客戶-服務器應用系統(tǒng),即屬于客戶-服務器范型的分布式計算應用。WWWWWW的核心技術有哪些?超文本標記語言HTML HTML語言是WWW服務的信息組織形式,用于定義在WWW服務器中存儲的信息格式。超文本傳輸協(xié)議HTTP HTTP是WWW服務使用的應用層協(xié)議,用于實現(xiàn)WWW客戶機與WWW服務器之間的通信WWW的核心技術TCP/IP協(xié)議HTTP協(xié)議是TCP/IP協(xié)議棧中的應用層協(xié)議,而TCP/IP是TransmissionControlProtocol/InternetProtocol的簡寫,中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡通訊協(xié)議,是Internet最基本的協(xié)議和Internet國際互聯(lián)網(wǎng)絡的基礎。TCP/IP定義了電子設備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉藴?。注意:TCP/IP協(xié)議不是TCP和IP這兩個協(xié)議的合稱,而是指因特網(wǎng)整個TCP/IP協(xié)議族。與七層OSI參考模型不同,從協(xié)議分層模型方面來講,TCP/IP由四個層次組成:網(wǎng)絡接口層、網(wǎng)絡層、傳輸層、應用層。各層的協(xié)議如下圖所示,其中HTTP為應用層最重要的協(xié)議之一。HTTP協(xié)議 HTTP是HyperTextTransportProtocol(超文本傳輸協(xié)議)的縮寫,它用于傳送WWW方式的數(shù)據(jù),是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議,下圖為HTTP協(xié)議傳輸?shù)木W(wǎng)頁。HTTP協(xié)議的網(wǎng)頁HTTP協(xié)議發(fā)展史

HTTP/0.9:從1990年就已經(jīng)用來作為WWW的傳輸協(xié) 議,當時非常簡單,只支持GET方法,響應中攜帶 的消息必須HTML文件。已過時。只接受GET一種請求方法,沒有在通訊中指定版本號,且不支持請求頭。由于該版本不支持POST方法,所以客戶端無法向服務器傳遞太多信息。

HTTP/1.0:

1996發(fā)布RFC1945,這是第一個在通訊中指定版本號的HTTP協(xié)議版本,至今仍被廣泛采用,特別是在代理服務器中。

HTTP/1.1:1997推出RFC2068,HTTP/1.1的標準。當前版本。持久連接被默認采用,并能很好地配合代理服務器工作。還支持以管道方式同時發(fā)送多個請求,以便降低線路負載,提高傳輸速度。

HTTP/1.1:1999推出RFC2616,廢棄了RFC2068標準。HTTP通信過程Web瀏覽器與Web服務器之間將完成下列7個步驟:(1)建立TCP連接(2)Web瀏覽器向Web服務器發(fā)送請求命令(3)Web瀏覽器發(fā)送請求頭信息(4)Web服務器應答(5)Web服務器發(fā)送應答頭信息(6)Web服務器向瀏覽器發(fā)送數(shù)據(jù)(7)Web服務器關閉TCP連接HTTP請求消息舉例:GET/books/java.htmlHTTP/1.1Accept:*/*Accept-Language:en-usConnection:Keep-AliveHost:localhostReferer:http://localhost/links.aspUser-Agent:Mozilla/4.0Accept-Encoding:gzip,deflate請求消息的結(jié)構(gòu): 由請求方法URI協(xié)議/版本、若干請求頭、以及請求正文3個部分組成,其中的一些請求頭和請求正文都是可選的,請求頭和請求正文之間要用空行隔開。

請求方法URI協(xié)議/版本

一個空行

若干請求頭請求方法方法名備注GET獲取一個URL指定的資源,即資源實體HEAD獲取一個指定資源的信息,POST向服務器提交數(shù)據(jù)PUT向服務器提交資源DELETE請求源服務器刪除Request-URI標識的資源TRACE網(wǎng)絡跟蹤CONNECT與PROXY之間的連接管理OPTIONS查詢能力請求頭(1)請求頭字段用于客戶端在請求消息中向服務器傳遞附加信息,主要包括客戶端可以接受的數(shù)據(jù)類型、壓縮方法、語言、以及發(fā)出請求的超鏈接所屬網(wǎng)頁的URL地址等信息。Accept:text/html,image/*Accept-Charset:ISO-8859-1,unicode-1-1

Accept-Encoding:gzip,compress

Accept-Language:en-gb,zh-cn

Authorization:Basicenh4OjEyMzQ1Ng==

Expect:100-continueFrom:zxx@

Host::80

If-Match:"xyzzy","r2d2xxxx"

請求頭(2)If-Modified-Since:Tue,11Jul200018:23:51GMTIf-None-Match:"xyzzy","r2d2xxxx"If-Range:Tue,11Jul200018:23:51GMTIf-Unmodified-Since:Tue,11Jul200018:23:51GMTMax-Forwards:1

Proxy-Authorization:Basicenh4OjEyMzQ1Ng==Range:bytes=100-599 Range:bytes=100- Range:bytes=-100Referer:/index.jspTE:trailers,deflate

User-Agent:Mozilla/4.0(compatible;MSIE5.5;WindowsNT5.0)HTTP響應消息舉例:HTTP/1.1200OKServer:Microsoft-IIS/5.0Date:Thu,13Jul200005:46:53GMTContent-Length:2291Content-Type:text/htmlCache-control:private<HTML><BODY>……響應消息的結(jié)構(gòu):

由版本代碼描述/協(xié)議狀態(tài)、若干響應頭、以及響應正文

3個部分組成,其中的一些消息頭和實體內(nèi)容都是可選的,消息頭和實體內(nèi)容之間要用空行隔開。

版本代碼描述/協(xié)議狀態(tài)

一個空行

多個響應頭

響應正文

響應頭響應頭字段用于服務器在響應消息中向客戶端傳遞附加信息,包括服務程序名,被請求資源需要的認證方式,被請求資源已移動到的新地址等信息。Accept-Range:bytes

Age:315315315Etag:b38b9-17dd-367c5dcdLocation:/index.jspProxy-Authenticate:BASICrealm="it315"Retry-After:Tue,11Jul200018:23:51GMTServer:Microsoft-IIS/5.0Vary:Accept-LanguageWWW-Authenticate:BASICrealm="it315"

響應狀態(tài)碼響應狀態(tài)碼用于表示服務器對請求的各種不同處理結(jié)果和狀態(tài),它是一個三位的十進制數(shù)。響應狀態(tài)碼可歸為5種類別,使用最高位為1到5來進行分類,如下所示:(1)100~199表示成功接收請求,要求客戶端繼續(xù)提交下一次請求才能完成整個處理過程。(2)200~299表示成功接收請求并已完成整個處理過程。(3)300~399為完成請求,客戶需進一步細化請求。例如,請求的資源已經(jīng)移動一個新地址。(4)400~499客戶端的請求有錯誤。(5)500~599服務器端出現(xiàn)錯誤。

響應狀態(tài)碼典型情況200(正常)表示一切正常,返回的是正常請求結(jié)果。206(部分內(nèi)容)客戶發(fā)送了一個帶有Range頭(要求服務器只返回文檔中的部分內(nèi)容)的GET請求,服務器按要求完成了這個請求。302/307(臨時重定向)指出被請求的文檔已被臨時移動到別處,此文檔的新的URL在Location響應頭中給出。304(未修改)表示客戶機緩存的版本是最新的,客戶機應該繼續(xù)使用它。401(未經(jīng)授權(quán))表示客戶機訪問的是一個受口令和密碼保護的頁面,結(jié)合使用一個WWW-Authenticate響應頭提示客戶機應重新發(fā)出一個帶有Authorization頭的請求消息。404(找不到)服務器上不存在客戶機所請求的資源。500(內(nèi)部服務器錯誤)服務器端的CGI、ASP、JSP等程序發(fā)生錯誤。

響應正文響應正文響應正文就是服務器返回的HTML頁面:<html><head><title>HTTP響應示例<title></head><body>HelloHTTP!</body></html>注意:響應頭和正文之間也必須用空行分隔。使用GET和POST方式傳遞參數(shù)在URL地址后面可以附加一些參數(shù) 舉例:/servlet/ParamsServlet?param1=abc¶m2=xyzGET方式 舉例:GET/servlet/ParamsServlet?param1=abc¶m2=xyzHTTP/1.1

特點:傳送的數(shù)據(jù)量是有限制的,一般限制在1KB以下。POST方式

舉例:

POST/servlet/ParamsServletHTTP/1.1 Host: Content-Type:application/x-www-form-urlencoded Content-Length:28 param1=abc¶m2=xyz

特點:傳送的數(shù)據(jù)量要比GET方式傳送的數(shù)據(jù)量大得多。請求頭示例響應頭示例HTTPS協(xié)議HTTPS(全稱:HyperTextTransferProtocoloverSecureSocketLayer),即超文本傳輸安全協(xié)議,簡單講是HTTP的安全版,是一種基于SSL/TLS的HTTP,所有的HTTP數(shù)據(jù)都是在SSL/TLS協(xié)議封裝之上傳輸?shù)摹TTPVSHTTPS特性HTTPHTTPS證書需求不需要證書需要向CA(證書頒發(fā)機構(gòu))申請數(shù)字證書,通常涉及費用傳輸方式明文傳輸,數(shù)據(jù)在網(wǎng)絡中以明文形式存在,易被截取或篡改SSL/TLS加密傳輸,數(shù)據(jù)在網(wǎng)絡中以加密形式存在,更安全連接方式使用非加密的TCP連接使用加密的TCP連接,并且默認使用SSL/TLS協(xié)議端口號默認端口號為80默認端口號為443連接特性無狀態(tài)協(xié)議,每次請求都是獨立的,不保留會話信息同樣是無狀態(tài)協(xié)議,但由于加密層的存在,增加了安全性安全性較低,不適合傳輸敏感信息較高,適合傳輸敏感信息,如密碼和個人信息提綱3.1 HTTP協(xié)議3.2 Web開發(fā)技術簡介3.3 CGI3.4 Web會話3.5 Applet和Servlet3.6 SSH框架與應用開發(fā)WEB開發(fā)技術簡介目標功能Web開發(fā)技術靜態(tài)網(wǎng)頁技術HTML

JavaScriptCSS

XML

動態(tài)網(wǎng)頁技術

HTML(HyperTextMarkupLanguage),超文本標記語言或超文本鏈接標示語言,是一種制作萬維網(wǎng)頁面的標準語言,是萬維網(wǎng)瀏覽器使用的一種語言,它消除了不同計算機之間信息交流的障礙。它是目前網(wǎng)絡上應用最為廣泛的語言,也是構(gòu)成網(wǎng)頁文檔的主要語言。HTML基本語法1.基本結(jié)構(gòu)標記HTML文件是由HTML命令組成的描述性文本,HTML命令可以說明文字、圖形、動畫、聲音、表格、鏈接等。HTML文件的結(jié)構(gòu)包括頭部(Head)、主體(Body)兩大部分,其中頭部描述瀏覽器所需的信息,而主體則包含所要說明的具體內(nèi)容。2.段落標記HTML中最基本的元素是段落,段落可以用<P>表示,瀏覽器將段落的內(nèi)容從左到右,從上到下顯示。HTML基本語法3.圖像標記定義圖像的語法是:<img

src="url"/>,URL指存儲圖像的位置。如果名為"boat.gif"的圖像位于

的images目錄中,那么其URL為

/images/boat.gif。4.超鏈接標記—文字它類似這樣:<ahref="url">Linktext</a>,href屬性規(guī)定鏈接的目標。開始標簽和結(jié)束標簽之間的文字被作為超級鏈接來顯示。<HTML><HEAD><TITLE>

計算機網(wǎng)絡

</TITLE></HEAD><BODY>

計算機網(wǎng)絡就是利用通信線路將具有獨立功能的計算機連接起來而形成的計算機集合,計算機之間可以借助于通信線路傳遞信息,共享軟件、硬件和數(shù)據(jù)等資源。<P><IMGsrc=”6/network.jpg”><P><AHREF=”6/lan.html”>局域網(wǎng)</A><P><AHREF=”6/man.html”>城域網(wǎng)</A><P><AHREF=”6/wan.html”>廣域網(wǎng)</A></BODY></HTML>HTML示例運行效果JavaScript是一種基于對象(Object)和事件驅(qū)動(EventDriven)并具有安全性能的腳本語言。使用它的目的是與HTML超文本標記語言、Java腳本語言(Java小程序)一起實現(xiàn)在一個Web頁面中鏈接多個對象,與Web客戶交互作用。從而可以開發(fā)客戶端的應用程序等。它是通過嵌入或調(diào)入在標準的HTML語言中實現(xiàn)的。它的出現(xiàn)彌補了HTML語言的缺陷,它是Java與HTML折衷的選擇。1. 常量2. 變量3. 運算符4. 表達式5. 基本語句 (1) if-else條件語句 (2) for循環(huán)語句 (3) break語句 (4) continue語句 (5) switch語句6. 函數(shù)JavaScript基本語法……

<scripttype="text/javascript">

varc=0,t functiontimedCount() {

document.getElementById('txt').value=c c=c+1 t=setTimeout("timedCount()",1000) } functionstopCount() { c=0;

setTimeout("document.getElementById('txt').value=0",0);

clearTimeout(t); } </script> </head> <body> <form><inputtype="button"value="開始計時!"onClick="timedCount()"> <inputtype="text"id="txt"> <inputtype="button"value="停止計時!"onClick="stopCount()"></form> <p>請點擊上面的“開始計時”按鈕來啟動計時器。輸入框會一直進行計時,從0開始。點擊“停止計時”按鈕可以終止計時,并將計數(shù)重置為0。</p>……JavaScript示例運行效果級聯(lián)樣式表(CascadingStyleSheet)簡稱“CSS”,通常又稱為“風格樣式表(StyleSheet)”,它是用來進行網(wǎng)頁風格設計的。比如,如果想讓鏈接字未點擊時是藍色的,當鼠標移上去后字變成紅色的且有下劃線,這就是一種風格。通過設立樣式表,可以統(tǒng)一地控制HTML中各標志的顯示屬性。級聯(lián)樣式表可以使人更能有效地控制網(wǎng)頁外觀。使用級聯(lián)樣式表,可以擴充精確指定網(wǎng)頁元素位置,外觀以及創(chuàng)建特殊效果的能力。<html><head><styletype="text/css">p:first-letter{color:#ff0000;font-size:xx-large}</style></head>

<body><p>Youcanusethe:first-letterpseudo-elementtoaddaspecialeffecttothefirstletterofatext!</p></body></html>CSS示例首字母特效XML(EXtensibleMarkupLanguage)即可擴展標記語言,它可以用來標記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對自己的標記語言進行定義的源語言,它是一種很類似于HTML的標記語言,它被設計用來傳輸和存儲結(jié)構(gòu)化數(shù)據(jù)。XML是一種平臺無關的數(shù)據(jù)表示方法和數(shù)據(jù)交換語言,即使用XML創(chuàng)建的數(shù)據(jù)可以被在任何平臺上的任何應用程序讀取,或者說使用XML標記語言可以做到數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)在任何編程語言環(huán)境下的共享

XML和HTML的區(qū)別 XML和HTML都是用于操作數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu),在結(jié)構(gòu)上大致是相同的,但它們在本質(zhì)上卻存在著明顯的區(qū)別,它們的區(qū)別主要有以下幾點:

語法要求不同標記不同作用不同在HTML中不區(qū)分大小寫,在XML中對大小寫要求非常嚴格。HTML使用固有的標記,而XML沒有固有標記。HTML用于顯示頁面,而XML用于描述頁面內(nèi)容的數(shù)據(jù)或數(shù)據(jù)的結(jié)構(gòu)。HTML把數(shù)據(jù)和顯示合在一起,在頁面中把這些數(shù)據(jù)顯示出來,而XML則將數(shù)據(jù)和顯示分開。XML的優(yōu)勢

每種語言的產(chǎn)生都能完成某些特定的功能,XML作為一種標記語言也不例外。XML最大的優(yōu)勢在于它能對各種編程語言編寫的數(shù)據(jù)進行管理,使得在任何平臺下都能通過解析器來讀取XML數(shù)據(jù)。它的優(yōu)勢可歸納為以下幾點:數(shù)據(jù)的搜索數(shù)據(jù)的顯示數(shù)據(jù)的交換在XML中可以提取文檔中任何位置的數(shù)據(jù)XML將數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的顯示形式分開,根據(jù)需要使數(shù)據(jù)呈現(xiàn)出多種顯示方式。如HTML、PDF等格式。XML標記語言的語法非常簡單,可以通過解析器在任何機器上解讀。并可以在各種計算機平臺上使用。逐漸成為一種數(shù)據(jù)交換的語言。

XML文檔的組成 XML文檔也屬于純文本文件,該文檔一般如下四部分組成:

XML文檔注釋

XML標識及其內(nèi)容

XML文檔的聲明

XML文檔類型定義

按照這種文檔格式來編寫的一個XML文件,如下所示:<?xmlversion="1.0"encoding="UTF-8"?> <!--XML文檔注釋--> <?xml:stylesheettype="text/xsl" href="stu.xsl"?> <!--班級中學生的信息--> <class> <student> <name>Jone</name> <age>20</age> </student> </class>前三部分都是可選的使用Javascript解析XML文檔<html><body><h1>XMLParseExample</h1><p><b>To:</b><spanid="to"></span><br/><b>From:</b><spanid="from"></span><br/><b>Message:</b><spanid="message"></span><scripttype="text/javascript">if(window.XMLHttpRequest){//codeforIE7+,Firefox,Chrome,Opera,Safari xmlhttp=newXMLHttpRequest();}else{//codeforIE6,IE5 xmlhttp=newActiveXObject("Microsoft.XMLHTTP");}xmlhttp.open("GET","note.xml",false);xmlhttp.send();xmlDoc=xmlhttp.responseXML;document.getElementById("to").innerHTML=xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;document.getElementById("from").innerHTML=xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;document.getElementById("message").innerHTML=xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;</script></body></html>note.xml文件內(nèi)容運行效果:

動態(tài)網(wǎng)頁與靜態(tài)網(wǎng)頁之間最大的區(qū)別在于網(wǎng)頁與用戶之間是否有交互反饋的過程,如動態(tài)網(wǎng)頁上的留言板,點擊數(shù)等等,采用了動態(tài)網(wǎng)頁技術的同一網(wǎng)頁能夠?qū)Σ煌脩舻耐瑯硬僮髯龀霾煌姆磻?,而靜態(tài)網(wǎng)頁則沒有這個交互過程,呈現(xiàn)給用戶的是同一個無差別的頁面。

常用的動態(tài)網(wǎng)頁技術有PHP、ASP和JSP等。下面以JSP為例進行講解。動態(tài)網(wǎng)頁技術JSP是JavaServerPages的縮寫,是由Sun公司倡導、許多公司參與,于1999年推出的一種動態(tài)網(wǎng)頁技術標準。JSP是基于JavaServlet以及整個Java體系的Web開發(fā)技術,利用這一技術可以建立安全、跨平臺的先進動態(tài)網(wǎng)站,這項技術還在不斷的更新和優(yōu)化中。當服務器上的一個JSP頁面被第一次請求執(zhí)行時,服務器上的JSP引擎首先將JSP頁面文件轉(zhuǎn)譯成一個java文件,再將這個java文件編譯生成字節(jié)碼文件,然后通過執(zhí)行字節(jié)碼文件響應客戶的請求,這個字節(jié)碼文件的主要工作是:

(1)把JSP頁面中普通的HTML標記符號(頁面的靜態(tài)部分)交給客戶的瀏覽器負責顯示。

(2)執(zhí)行“<%”和“%>”之間的java程序片(JSP頁面中的動態(tài)部分),并把執(zhí)行結(jié)果交給客戶的瀏覽器顯示。

(3)當多個客戶請求一個JSP頁面時,JSP引擎為每個客戶啟動一個線程而不是啟動一個進程,這些線程由JSP引擎服務器來管理,與傳統(tǒng)的CGI為每個客戶啟動一個進程相比較,效率要高的多。JSP的運行原理

JSP文件需要先放入一個Web容器中(如Tomcat,Weblogic,Websphere等),然后通過URL訪問的方式才能運行,通常有以下步驟:

(1)安裝Web引擎服務容器,并配置好環(huán)境變量(2)編寫JSP文件,把文件放入工程中,并把工程放入容器的相應目錄下(如webapps目錄下)(3)在瀏覽器中通過如下URL進行訪問:

http://IP:端口號/工程名

(如1:8080/Webtest)JSP的運行步驟

JSP頁面的基本結(jié)構(gòu)在傳統(tǒng)的HTML頁面文件中加入java程序片和JSP標簽就構(gòu)成了一個JSP頁面文件。一個JSP頁面可由5種元素組合而成:

(1)普通的HTML標記符。

(2)JSP標簽:如,指令標簽、動作標簽。

(3)變量和方法的聲明。

(4)Java程序片。

(5)Java表達式。

<%@pagecontentType="text/html;charset=GB2312"%> <%@pageimport="java.util.*"%><HTML><BODYBGCOLOR=cyan><FONTSize=1><P>請輸入三角形的三個邊的長度,輸入的數(shù)字用逗號分割:

<%!doublea[]=newdouble[3];Stringanswer=null;%><% inti=0;

else { answer="您輸入的三邊不能構(gòu)成一個三角形"; out.print("<BR>"+answer); }}%> <P>您輸入的三邊是:<BR><%=a[0]%><BR><%=a[1]%><BR><%=a[2]%></BODY></HTML>JSP示例輸入111之后(注意數(shù)字之間的空格),網(wǎng)頁效果如圖所示:提綱3.1 HTTP協(xié)議3.2 Web開發(fā)技術簡介3.3 CGI3.4 Web會話3.5 Applet和Servlet3.6 SSH框架與應用開發(fā)

公共網(wǎng)關接口CGI(CommonGatewayInterface)是WWW技術中最重要的技術之一,有著不可替代的重要地位。CGI是外部應用程序(CGI程序)與Web服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞信息的規(guī)程。CGI(TheCommonGatewayInterface)是一個標準化的協(xié)議,能夠使應用程序(通常稱為CGI程序或CGI腳本)同web服務器和客戶端進行交互。CGI程序能夠用Python,PERL,Shell,CorC++等語言來實現(xiàn)。CGI工作原理CGI工作步驟如下:Step1:客戶端發(fā)出請求Step2:Web服務器激活CGI程序Step3:CGI程序?qū)蛻舳说恼埱笞龀龇磻猄tep4:Web服務器將CGI的處理結(jié)果傳送給客戶端Step5:Web服務器中斷和客戶端瀏覽器的鏈接Step6:Web瀏覽器將CGI程序的輸出顯示到瀏覽器的窗體CGI工作步驟2025/3/21DistributedComputing54CGI運行環(huán)境配置1、去掉conf/web.xml中的如下段中的注釋;<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

<init-param>

<param-name>debug</param-name>

<param-value>0</param-value>

</init-param>

<init-param>

<param-name>passShellEnvironment</param-name>

<param-value>true</param-value>//?

</init-param>

<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value>WEB-INF/cgi</param-value>//此處映射真實路徑形式為tomcatpath+projectname+param-value

</init-param>

CGI程序要想運行在網(wǎng)站容器中(比如apache、tomcat等),這里以tomcat為例,講解下如何配置并運行CGI程序。2025/3/21DistributedComputing55

<init-param>

<param-name>executable</param-name>

<param-value>cmd/c</param-value>

//c++的cgi解析方式,若為perl腳本,則修改為:<param-value>C:/Perl/bin/Perl.exe</param-value>

</init-param>

<init-param>

<param-name>clientInputTimeout</param-name>

<param-value>100</param-value>

</init-param>

<load-on-startup>5</load-on-startup></servlet>2.在web.xml文件中,把關于對CGI進行映射的那段的注釋去掉。參考如下:

<servlet-mapping>

<servlet-name>cgi</servlet-name>

<url-pattern>/cgi-bin/*</url-pattern>

</servlet-mapping>3.把servlets-cgi.renametojar(在%CATALINA_HOME%/server/lib/目錄下)改名為servlets-cgi.jar。CGI運行環(huán)境配置2025/3/21DistributedComputing564、此外,如出現(xiàn)java.lang.SecurityException:Servletofclassorg.apache.catalina.servlets.CGIServletisprivilegedandcannotbeloadedbythiswebapplication這一異常。則需要修改tomcat權(quán)限配置,在conf/context.xml中:<Contextprivileged="true"><!--Defaultsetofmonitoredresources--><WatchedResource>WEB-INF/web.xml</WatchedResource><!--UncommentthistodisablesessionpersistenceacrossTomcatrestarts--><!--<Managerpathname=""/>--><!--UncommentthistoenableCometconnectiontacking(provideseventsonsessionexpirationaswellaswebapplifecycle)--><!--<ValveclassName="org.apache.catalina.valves.CometConnectionManagerValve"/>--></Context>CGI運行環(huán)境配置Asamplewebscripthello.pl說明:把cgi文件放在/cgi-bin/目錄下就可以調(diào)用了。CGI運行步驟2025/3/21DistributedComputing58Asamplewebscripthello.c/***ThisCprogramisforaCGIscriptwhichgenerates*theoutputforawebpage.Whendisplayedbya*browser,themessage"Hellothere!"willbeshown*inblue.*/#include<stdio.h>

main(intargc,char*argv[]){

printf("Content-type:text/html%c%c",10,10);printf("<fontcolor=blue>");printf("<H1>Hellothere!</H1>");printf("</font>");}WEB表單是一種處理特殊類型的WEB頁面,該類型頁面可以是:1)提供了提示用戶輸入數(shù)據(jù)的圖形用戶界面;2)當用戶點擊頁面上提交按鈕時,將調(diào)用WEB服務器主機上的外部程序的執(zhí)行。WEB表單的核心是一種HTML的<form>標簽,該標簽主要用于向服務器傳輸數(shù)據(jù)。WEB表單從瀏覽器請求服務器的方法有GET和POST兩種(與HTTP協(xié)議中的兩種請求方法相一致)。如果方法(METHOD屬性值)是GET,則CGI程序就從環(huán)境變量QUERY_STRING中獲取Form數(shù)據(jù);若方法是POST,則CGI程序就從標準輸入(stdin)中獲取Form數(shù)據(jù)。WEB表單下面是一個Web表單請求CGI程序的一個簡單例子。WEB表單例子<html><head><title>AWEBFORM</title></head><body><form>what'syourname?<inputtype="text"name="name"action="hello.cgi“method="post"><inputtype="submit"value="提交表單"/></form></body></html>提綱3.1 HTTP協(xié)議3.2 Web開發(fā)技術簡介3.3 CGI3.4 Web會話3.5 Applet和Servlet3.6 SSH框架與應用開發(fā)當用戶在購物網(wǎng)上進行購物時,通常會有一個購物車,用戶將只需將想購買一系列商品保存到購物車內(nèi),最后一起結(jié)賬就行了。在購物車等Web應用的一個會話期間,將發(fā)送多個HTTP請求,每個請求都可能調(diào)用外部程序,如CGI腳本等。下圖為該應用的一個簡化會話:一個Web會話過程WEB會話WEB會話是指web客戶端與服務器的一次連接、中間多次交互到最后斷開的過程。由于HTTP協(xié)議是無狀態(tài)的,因此需要會話跟蹤技術管理客戶端的多次請求的狀態(tài)信息。會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Session。會話(Session)Cookie通過在客戶端記錄信息確定用戶身份。Session通過在服務器端記錄信息確定用戶身份,從而達到不同程序之間數(shù)據(jù)的共享。WEB會話WEB會話——為什么需要會話跟蹤Http協(xié)議有什么特點?HTTP協(xié)議不記錄用戶的信息被訪問了兩次,但是不清楚,是一個人訪問了兩次?還是兩個人各訪問一次?訪問訪問WEB會話——為什么需要會話跟蹤在線購物系統(tǒng)中如何對用戶進行區(qū)分?如何解決這些問題?購買2個商品張三李四購買3個商品一共購買了5個商品,應該從誰的賬戶上扣款?請求1請求2請求n…….什么是會話跟蹤借助于會話跟蹤技術,能將同一會話中的一系列請求和響應過程關聯(lián)起來,使它們之間可以相互依賴和傳遞信息會話跟蹤技術如何唯一標識客戶?WEB會話——什么是會話跟蹤

第一次請求服務器創(chuàng)建一個會話并將該對象的ID返回給用戶響應

把ID發(fā)送給客戶端第二次請求把ID一起發(fā)送給服務器publicclassServlet1extendsHttpServle{...publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=gbk");PrintWriterout=response.getWriter();//通過request的getSession()方法得到SessionIDStringsessionId=request.getSession().getId();//輸出out.print("產(chǎn)生了一次會話,sessionId為:"+sessionId);out.print("<ahref='servlet2'>訪問servlet2</a>");}}在不同的瀏覽器中運行,會得到不同的SessionIDWEB會話——會話跟蹤原理會話跟蹤實現(xiàn)的幾種方式Web服務器為客戶端開辟的一塊存儲空間,用于存放狀態(tài)信息Cookie是一小段文本信息,伴隨用戶請求在Web服務器和瀏覽器之間傳遞,Cookie存放于客戶端通過表單隱藏域來存儲數(shù)據(jù),便于在不同請求間傳遞,這些數(shù)據(jù)對于客戶端不可見URL重寫技術在URL結(jié)尾添加一些附加數(shù)據(jù),用于標識該會話Cookie機制需要統(tǒng)計同一客戶端訪問某網(wǎng)站的次數(shù) 在登錄網(wǎng)站時,設置自動登錄

這些功能如何實現(xiàn)?為什么要使用CookieCookie是一種會話跟蹤機制。它可以彌補HTTP協(xié)議無狀態(tài)的不足/Cookie意為“甜餅”,是由W3C組織提出,最早由Netscape社區(qū)發(fā)展的一種機制。目前Cookie已經(jīng)成為標準,所有的主流瀏覽器如IE、Netscape、Firefox、Opera等都支持Cookie。Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態(tài),就使用response向客戶端瀏覽器頒發(fā)一個Cookie??蛻舳藶g覽器會把Cookie保存起來。當瀏覽器再請求該網(wǎng)站時,瀏覽器把請求的網(wǎng)址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態(tài)。服務器還可以根據(jù)需要修改Cookie的內(nèi)容。Cookie使用key-value鍵值對的形式保存用戶狀態(tài)什么是Cookie很多網(wǎng)站都會使用Cookie。例如,Google會向客戶端頒發(fā)Cookie,Baidu也會向客戶端頒發(fā)Cookie。那瀏覽器訪問Google會不會也攜帶上Baidu頒發(fā)的Cookie呢?或者Google能不能修改Baidu頒發(fā)的Cookie呢?Cookie域名隔離Cookie具有不可跨域名性。根據(jù)Cookie規(guī)范,瀏覽器訪問Google只會攜帶Google的Cookie,而不會攜帶Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

Cookie在客戶端是由瀏覽器來管理的。瀏覽器能夠保證Google只會操作Google的Cookie而不會操作Baidu的Cookie,從而保證用戶的隱私安全。瀏覽器判斷一個網(wǎng)站是否能操作另一個網(wǎng)站Cookie的依據(jù)是域名。Google與Baidu的域名不一樣,因此Google不能操作Baidu的Cookie。

需要注意的是,雖然網(wǎng)站與網(wǎng)站同屬于Google,但是域名不一樣,二者同樣不能互相操作彼此的Cookie。

Cookie域名隔離Cookie的應用舉例Cookie對象編程相關知識點方法名功能Cookiecookie=newCookie(Stringname,Stringvalue)創(chuàng)建一個Cookie對象Cookie[]cookies=request.getCookies()得到所有的Cookiespublicvoidresponse.addCookie(Cookiecookie)添加一個Cookiespublicvoidcookie.setMaxAge(intarg0)設置Cookie對象的有效時間,單位為秒publicvoidcookie.setValue(Stringvalue)設置指定Cookie的值publicStringcookie.getvalue()得到Cookie的值Cookie的應用舉例//定義全局變量privateCookietempCookie=null;

...

//設置color變量,默認為白色背景Stringcolor="white";//說明有設置背景,則重新賦予用戶設置的背景if(tempCookie!=null) { color=tempCookie.getValue(); }out.print("<bodybgcolor='"+color+"'>");out.print("<formname='form1'method='post'action='cookieServlet'>");out.print("請選擇你喜愛的背景顏色<br/>");out.print("<inputtype=radioname='radColor'value='red'>紅色<br>");out.print("<inputtype=radioname='radColor'value='blue'>藍色<br>");out.print("<inputtype=radioname='radColor'value='yellow'>黃色<br>");out.print("</p><p><inputtype='submit'name='Submit'value='提交'></p></form></body>");

...

動態(tài)生成個性設置界面//接受用戶所選擇的背景色StringbgColor=request.getParameter("radColor");//得到所有CookieCookie[]cookies=request.getCookies();//如果存在cookieif(cookies!=null){//迭代輸出每一個cookiefor(Cookiecookie:cookies){//如果存在用于設置背景色的Cookieif("bgColor".equals(cookie.getName())){ //取出賦值給tempCookie tempCookie=cookie; //為tempCookie賦值為用戶選中的背景色

tempCookie.setValue(bgColor); break;//跳出循環(huán)} }}//如果不存在用于設置背景色的Cookie,說明之前沒有設置過背景色if(tempCookie==null){tempCookie=newCookie("bgColor",bgColor);} //設置tempCookie的時效為一年tempCookie.setMaxAge(360*24*60*60);//保存cookieresponse.addCookie(tempCookie);this.doGet(request,response);

根據(jù)用戶設置保存CookieSession機制Session是一種保存上下文信息的機制,它針對每一個用戶,在服務器端開辟一塊存儲空間,用于存放用戶的會話狀態(tài),通過SessionID區(qū)分不同的客戶使用Session對象存儲特定用戶會話信息,當用戶在應用程序Web頁面之間跳轉(zhuǎn)時,存儲在Session對象中的變量不會丟失,而將一直存在于整個會話中什么是Session技術Session與Cookie的最大區(qū)別是什么?Session對象工作原理HttpSession對象服務器為每個會話創(chuàng)建一個HttpSession對象每個會話對象都有一個唯一的ID將用戶的數(shù)據(jù)保存在相應的HttpSession對象內(nèi)第一次請求響應服務器創(chuàng)建一個HttpSession對象并將該對象的ID返回給用戶同時,服務器在內(nèi)存中開辟一塊空間,用于保存該對象數(shù)據(jù)將ID發(fā)送給客戶端第二次請求將ID一起發(fā)送給服務器根據(jù)ID號服務器尋找內(nèi)存中相應的數(shù)據(jù)根據(jù)Session的定義說明在線購物應用程序中的購物車是否適合存入Session中Session會話的超時管理在Http協(xié)議中,Web服務器無法判斷當前的客戶端瀏覽器是否還會繼續(xù)訪問,也無法檢測客戶端瀏覽器是否關閉即使客戶已經(jīng)離開或關閉了瀏覽器,Web服務器仍然保留與之對應的Session對象Web服器采用”超時限制”的方法來處理Session生成后,只要用戶繼續(xù)訪問,服務器就會更新Session的最后訪問時間,并維護該Session。用戶每訪問服務器一次,無論是否讀寫Session,服務器都認為該用戶的Session“活躍(active)”了一次。

由于會有越來越多的用戶訪問服務器,因此Session也會越來越多。為防止內(nèi)存溢出,服務器會把長時間內(nèi)沒有活躍的Session從內(nèi)存刪除。這個時間就是Session的超時時間。如果超過了超時時間沒訪問過服務器,Session就自動失效了。

Session對象實質(zhì)是在服務器端開辟一個內(nèi)存空間,為節(jié)省資源,服務器會在某個特定的場合回收該空間服務器,那么會在何時回收?瀏覽器關閉之后,服務器會立即回收嗎?<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4">...<!--設置會話超時間隔為20分鐘--><session-config><session-timeout>20</session-timeout></session-config>...</web-app>Web.xml會話超時配置Session應用舉例Session對象的創(chuàng)建

publicHttpSessiongetSession()

調(diào)用此方法時,容器會先檢查是否存在用戶請求的會話,若存在則直接返回本次會話,若不存在則創(chuàng)建新會話publicHttpSessiongetSession(booleanflag)

此方法中的flag用于指定是否有必要創(chuàng)建會話。為false表示:若客戶之前沒有建立過會話則返回null

方法名功能publicboolean

isNew()判斷當前會話對象是否是一個新創(chuàng)建的會話publicObjectgetAttribute(Stringname)根據(jù)指定名從會話中取出某個屬性publicvoidsetAttribute(Stringname,Objectvalue)根據(jù)指定名將某個對象存放到會話中publicvoidremoveAttribute(Stringname)根據(jù)指定名從會話中移除某個屬性publicStringgetId()獲取會話IDpublicvoidinvalidate()使會話失效publicvoidsetMaxInactiveInterval(intinterval)設置會話超時的時間秒值HttpSession接口提供的常用方法

Session應用舉例//得到session對象HttpSessionsession=request.getSession();//從session中獲取car(購物車對象)List<Integer>car=(List)session.getAttribute("car");//如果購物車為空if(car==null){ //創(chuàng)建一個購物車對象

car=newArrayList(); //將購物車放入session中

session.setAttribute("car",car);} //獲取100之內(nèi)的隨機數(shù)

inti=newRandom().nextInt(100); //將數(shù)值作為商品放入購物車中

car.add(newInteger(i)); //定位到get方法

this.doGet(request,response); }把商品放入購物車HttpSessionsession=request.getSession();//從session中獲取car(購物車對象)List<Integer>car=(List)session.getAttribute("car");//循環(huán)迭代輸出購物車的所有商品for(Integeritem:car){ out.print("商品:"+Value()+"<br>");}顯示購物車內(nèi)的商品URL地址重寫URL地址重寫是對客戶端不支持Cookie的解決方案。URL地址重寫的原理是將該用戶Session的id信息重寫到URL地址中。服務器能夠解析重寫后的URL獲取Session的id。這樣即使客戶端不支持Cookie,也可以使用Session來記錄用戶狀態(tài)。什么是URL地址重寫URL地址重寫舉例HttpServletResponse類提供了encodeURL(Stringurl)實現(xiàn)URL地址重寫,例如:<td><ahref="<%=response.encodeURL("index.jsp?c=1&wd=Java")%>">Homepage</a></td>

該方法會自動判斷客戶端是否支持Cookie。如果客戶端支持Cookie,會將URL原封不動地輸出來。如果客戶端不支持Cookie,則會將用戶Session的id重寫到URL中。重寫后的輸出可能是這樣的:<td><ahref="index.jsp;jsessionid=0CCD096E7F8D97B0BE608AFDC3E1931E?c=1&wd=Java">Homepage</a></td>

即在文件名的后面,在URL參數(shù)的前面添加了字符串“;jsessionid=XXX”。其中XXX為Session的id。分析一下可以知道,增添的jsessionid字符串既不會影響請求的文件名,也不會影響提交的地址欄參數(shù)。用戶單擊這個鏈接的時候會把Session的id通過URL提交到服務器上,服務器通過解析URL地址獲得Session的idSession中禁止使用Cookie對于WAP程序,由于大部分的手機瀏覽器都不支持Cookie,WAP程序都會采用URL地址重寫來跟蹤用戶會話。比如用友集團的移動商街等。既然WAP上大部分的客戶瀏覽器都不支持Cookie,索性禁止Session使用Cookie,統(tǒng)一使用URL地址重寫會更好一些。JavaWeb規(guī)范支持通過配置的方式禁用Cookie。下面舉例說一下怎樣通過配置禁止使用Cookie。打開項目sessionWeb的WebRoot目錄下的META-INF文件夾(跟WEB-INF文件夾同級,如果沒有則創(chuàng)建),打開context.xml(如果沒有則創(chuàng)建),編輯內(nèi)容如下:<?xmlversion='1.0'encoding='UTF-8'?><Contextpath="/sessionWeb"cookies="false"></Context>或者修改Tomcat全局的conf/context.xml,修改內(nèi)容如下:<!--Thecontentsofthisfilewillbeloadedforeachwebapplication--><Contextcookies="false"><!--...中間代碼略--></Context>

提綱3.1 HTTP協(xié)議3.2 Web開發(fā)技術簡介3.3 CGI3.4 Web會話3.5 Applet和Servlet3.6 SSH框架與應用開發(fā)Applet小應用程序是JAVA編寫的客戶端小程序,可通過因特網(wǎng)下載并在接收計算機上運行的一小段程序。運行在瀏覽器軟件中,Applet典型用于為萬維網(wǎng)網(wǎng)頁頁面定制或添加交互格式元素。Applet一個applet小程序

Applet必須運行于某個特定的“容器”,這個容器可以是瀏覽器本身,也可以是通過各種插件,或者包括支持Applet的移動設備在內(nèi)的其他各種程序來運行。與一般的Java應用程序不同,Applet不是通過main方法來運行的。在運行時Applet通常會與用戶進行互動,顯示動態(tài)的畫面,并且還會遵循嚴格的安全檢查,阻止?jié)撛诘牟话踩蛩兀ɡ绺鶕?jù)安全策略,限制Applet對客戶端文件系統(tǒng)的訪問)。Applet特點語言特點1)從Applet類擴展而創(chuàng)建的用戶Applet新類。2)類定義舉例:publicclasshello2extendsApplet3)Applet依賴于瀏覽器的調(diào)用。4)通過〈Applet〉標記嵌入在HTML文件中。Applet的生命周期的四個過程:init()、start()、stop()、destroy()方法都是Applet類中已經(jīng)定義的方法,系統(tǒng)根據(jù)上述規(guī)則自動執(zhí)行Applet的生命周期。用戶Applet中也可重新定義這些方法(重載)。Applet的生命周期:首先執(zhí)行init()方法,構(gòu)造了Car類的實例Car1,并計算了price1和mycar1。然后執(zhí)行start()方法,計算了price2。然后執(zhí)行paint()方法,在頁面上顯示Price1和price2的信息,過程如下圖。Applet生命周期生命周期示意圖Applet在用戶的計算機上執(zhí)行時,還可以下載其它的資源,如聲音文件、圖像文件或更多的Java代碼,有些Applet還允許用戶進行交互式操作。但這需要重復的鏈接與下載,因此速度很慢,這是一個亟待解決的問題,可以想到的一個好辦法是采用類似高速緩存的技術,將每次下載的文件都臨時保存在用戶的硬盤上,雖然第一次使用時花的時間比較多,但當再次使用時,只需直接從硬盤上讀取文件而無需再與Internet連接,便可以大大提高性能了。在此過程中,瀏覽器與服務器的交互過程如下圖。Applet工作原理瀏覽器與服務器交互過程圖2025/3/21DistributedComputing88TheHelloWorldApplet<HTML><BODY><APPLETcode=hello.classwidth=900height=300></APPLET></BODY></HTML>//applettodisplayamessageinawindowimportjava.awt.*;importjava.applet.*;publicclasshelloextendsApplet{

publicvoidinit(){ setBackground(Color.yellow); }

publicvoidpaint(Graphicsg){finalintFONT_SIZE=42; Fontfont=newFont("Serif",Font.BOLD,FONT_SIZE);

//setfont,andcoloranddisplaymessageon //thescreenatposition250,150 g.setFont(font); g.setColor(Color.blue);//Themessageinthenextlineistheoneyouwillsee g.drawString("Hello,world!",200,150); } }2025/3/21DistributedComputing89TheHelloWorldApplet提示:1)把HelloApplet.html和applet類文件拷貝到tomcat服務器的root目錄下運行;2)運行javaapplet時提示:您的安全設置已阻止本地應用程序運行,如何解決? ——將Java控制面板中的安全級別調(diào)至“中”

servlet是用Java編寫的服務器端程序。其主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容。Servlet運行于支持Java的應用服務器中。從實現(xiàn)上講,Servlet可以響應任何類型的請求,但絕大多數(shù)情況下Servlet只用來擴展基于HTTP協(xié)議的Web服務器。Servlet

服務器上需要一些程序,常常是根據(jù)用戶輸入訪問數(shù)據(jù)庫的程序。這些通常是使用公共網(wǎng)關接口(CGI(CommonGatewayInterface))應用程序完成的。然而,在服務器上運行Java,這種程序可使用Java編程語言實現(xiàn)。在通信量大的服務器上,Javaservlet的優(yōu)點在于它們的執(zhí)行速度更快于CGI程序。各個用戶請求被激活成單個程序中的一個線程,而無需創(chuàng)建單獨的進程,這意味著服務器端處理請求的系統(tǒng)開銷將明顯降低。

最早支持Servlet技術的是JavaSoft的JavaWebServer。此后,一些其它的基于Java的WebServer(如tomcat,WebLogic,iPlanet,WebSphere)開始支持標準的ServletAPI。Servlet的執(zhí)行過程為:

客戶端發(fā)送請求至服務器端服務器將請求信息發(fā)送至ServletServlet生成響應內(nèi)容并將其傳給服務器。響應內(nèi)容動態(tài)生成,通常取決于客戶端的請求服務器將響應返回給客戶端Servlet執(zhí)行過程Servlet響應過程2025/3/21Servlet時序圖2025/3/21GenericandHTTPServlets2025/3/21Servlets-DistributedComputing94Servlet生命周期

下面是一個servlet的示例,用servlet處理html頁面的表單信息:form.html。Servlet示例<html><head><title>AWEBFORM</title></head><body><formaction="/FormServlet”method="post">what'syourname?<inputtype="text"name="name"><inputtype="submit"value="提交表單"/></form></body></html>在網(wǎng)站的web.xml中配置servlet的映射<servlet><servlet-name>FormServlet</servlet-name><servlet-class>com.ping.servlet.FormServlet</servlet-class></servlet><servl

溫馨提示

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

評論

0/150

提交評論