高級(jí)編程技術(shù):第2章 Web動(dòng)態(tài)編程技術(shù)JSP_第1頁(yè)
高級(jí)編程技術(shù):第2章 Web動(dòng)態(tài)編程技術(shù)JSP_第2頁(yè)
高級(jí)編程技術(shù):第2章 Web動(dòng)態(tài)編程技術(shù)JSP_第3頁(yè)
高級(jí)編程技術(shù):第2章 Web動(dòng)態(tài)編程技術(shù)JSP_第4頁(yè)
高級(jí)編程技術(shù):第2章 Web動(dòng)態(tài)編程技術(shù)JSP_第5頁(yè)
已閱讀5頁(yè),還剩236頁(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)介

1、第2章Web動(dòng)態(tài)編程技術(shù)JSP 2.1 JSP的概念及特性 2.2 JSP頁(yè)面的組成 2.3 Session元素 2.4 Cookie元素 2.5 JSP通過(guò)JavaBean訪問(wèn)數(shù)據(jù)庫(kù)的綜合實(shí)例 2.6 Student_info實(shí)例在JBuilder中的實(shí)現(xiàn) 思考題 2.1 JSP的概念及特性 2.1.1 JSP與ASP腳本語(yǔ)言的比較1JSP與ASP處理機(jī)制的比較JSP與Microsoft的ASP技術(shù)非常相似。 兩者都提供在HTML代碼中混合某種程序代碼、由語(yǔ)言引擎解釋執(zhí)行程序代碼。在ASP或JSP環(huán)境下, HTML代碼主要負(fù)責(zé)描述信息的顯示樣式,而程序代碼則用來(lái)描述處理邏輯。普通的HTML頁(yè)

2、面只依賴于Web服務(wù)器,而ASP和JSP頁(yè)面需要附加的語(yǔ)言引擎分析和執(zhí)行程序代碼。程序代碼的執(zhí)行結(jié)果被重新嵌入到HTML代碼中,然后一起發(fā)送給瀏覽器。ASP和JSP都是面向Web服務(wù)器的技術(shù),客戶端瀏覽器不需要任何附加的軟件支持。 ASP的編程語(yǔ)言是基于VB的腳本語(yǔ)言,JSP使用的是Java,這是兩者最明顯的區(qū)別。ASP與JSP還有一個(gè)更為本質(zhì)的區(qū)別:兩種語(yǔ)言引擎用完全不同的方式處理頁(yè)面中嵌入的程序代碼。在ASP下, 基于VB的腳本代碼被ASP引擎解釋執(zhí)行;在JSP下,代碼被編譯成Servlet并由Java虛擬機(jī)執(zhí)行,這種編譯操作僅在對(duì)JSP頁(yè)面的第一次請(qǐng)求時(shí)發(fā)生。 2JSP與ASP的性能比較

3、 表2-1 JSP與ASP的性能比較 2.1.2 JSP運(yùn)行環(huán)境Sun公司的JSP主頁(yè)在http:/products/jsp/index.html,從這里可以下載 JSP 規(guī)范。這些規(guī)范定義了供應(yīng)商在創(chuàng)建 JSP 引擎時(shí)所必須遵從的一些規(guī)則。 執(zhí)行JSP代碼前, 需要在服務(wù)器上安裝JSP引擎Tomcat。 以安裝到E盤(pán)為例,安裝Tomcat之后,將源文件放在E:tomcatwebappsROOT目錄下,執(zhí)行E:tomcatbinstartup.bat命令即可啟動(dòng)服務(wù)器。默認(rèn)配置下服務(wù)器在端口 8080 監(jiān)聽(tīng),使用http:/localhost:8080即可打開(kāi)缺省頁(yè)面。 2.1.3 JDK的安

4、裝與配置Java開(kāi)發(fā)工具JDK(Java Development Kit)是許多Java專家最初使用的開(kāi)發(fā)環(huán)境。盡管許多編程人員已經(jīng)使用第三方的開(kāi)發(fā)工具,但JDK仍被作為Java開(kāi)發(fā)的重要工具。JDK的安裝與安裝其他軟件一樣,直接雙擊setup,按照安裝要求就可以順利安裝成功?,F(xiàn)在以1.4.0版本為例,假設(shè)安裝到E盤(pán)。 JDK的安裝及配置步驟如下:(1) 設(shè)置JAVA_HOME環(huán)境變量:右鍵單擊【我的電腦】屬性【高級(jí)】【環(huán)境變量】,新建一個(gè)系統(tǒng)變量,命名為JAVA_HOME,值為E:j2sdk1.4.0,單擊【確定】完成配置。如圖2.1所示。 圖2.1 JAVA_HOME的配置 (2) 設(shè)置C

5、LASSPATH環(huán)境變量:環(huán)境變量的配置位置同上。新建一個(gè)系統(tǒng)變量,命名為CLASSPATH,值為E:j2sdk1.4.0libdt.jar;E:j2sdk1.4.0libtools.jar,單擊【確定】完成當(dāng)前配置。如圖2.2所示。 圖2.2 CLASSPATH的配置 至此,JDK環(huán)境變量配置完畢,單擊【環(huán)境變量】屬性框里的【確定】,可完成應(yīng)用配置。這樣,就完成了運(yùn)行Tomcat的前提。 2.1.4 Tomcat的安裝和配置一般來(lái)說(shuō),Tomcat可從網(wǎng)站直接下載,解壓后即可使用。如果有安裝程序,則直接點(diǎn)setup安裝即可。以解壓或安裝到D盤(pán)為例:解壓或安裝完后,進(jìn)入到d:tomcatbin,

6、然后雙擊目錄里名為startup. bat的批處理文件就可以開(kāi)啟Tomcat服務(wù)器。如圖2.3所示。 圖2.3 Tomcat服務(wù)器啟動(dòng)后的示意圖 注意:有些時(shí)候8080端口可能會(huì)被某個(gè)應(yīng)用程序占用(如Oracle等),這時(shí)就需要修改Tomcat服務(wù)器的端口,可在D:tomcatconfserver.xml中修改,如圖2.4所示。 圖2.4 Tomcat配置文件server.xml 2.1.5 JBoss的安裝和配置現(xiàn)今,越來(lái)越多的Web應(yīng)用建立在JBoss Web服務(wù)器上,在此對(duì)JBoss的安裝及配置進(jìn)行簡(jiǎn)要介紹。在JBoss的安裝目錄下(如D:jboss-3.2.6)進(jìn)入bin目錄,運(yùn)行ru

7、n.bat文件,運(yùn)行后的界面如圖2.5所示。 圖2.5 JBoss服務(wù)器完全啟動(dòng)后的示意圖 JBoss的配置文件在D:jboss-3.2.6serverdefaultdeployjbossweb-tomcat50.sarserver.xml,如圖2.6所示。注:這里以JBoss裝在D盤(pán)下為例。 圖2.6 JBoss配置文件server.xml 設(shè)置端口為80882.1.6 JSP的基本語(yǔ)法功能:寫(xiě)在JSP程序中,但不發(fā)給客戶。 JSP語(yǔ)法: 例程2.1 JSP注釋(comment.html) A Comment Test A Test of Comments 描述: 用隱藏注釋標(biāo)記的字符會(huì)在J

8、SP編譯時(shí)被忽略掉。JSP編譯器不會(huì)對(duì)之間的語(yǔ)句進(jìn)行編譯,它不會(huì)顯示在客戶的瀏覽器中,也不會(huì)在源代碼中看到。上面的例程如圖2.7所示。從運(yùn)行效果來(lái)看,代碼里面的注釋部分This comment will not be visible in the page source并沒(méi)有出現(xiàn)在瀏覽器里。 圖2.7 comment.html的運(yùn)行效果 2.1.7 JSP生命周期JSP的生命周期主要包括初始化、請(qǐng)求處理和中止。初始化:在客戶端第一次請(qǐng)求該JSP頁(yè)時(shí),調(diào)用jspInit()方法。請(qǐng)求處理:當(dāng)客戶請(qǐng)求到達(dá)時(shí),容器調(diào)用jspService方法。該方法是JSP頁(yè)面轉(zhuǎn)換成Servlet時(shí)自動(dòng)轉(zhuǎn)換成的。中

9、止:當(dāng)Web服務(wù)器和容器關(guān)閉時(shí),容器調(diào)用JSP的jspDestroy()方法。 2.1.8 JSP執(zhí)行流程JSP是通過(guò)JSP Container轉(zhuǎn)換成Servlet并運(yùn)用于網(wǎng)頁(yè)的語(yǔ)言。JSP執(zhí)行流程如圖2.8所示。 圖2.8 JSP執(zhí)行流程示意圖 當(dāng)用戶在客戶端發(fā)出請(qǐng)求時(shí),通過(guò)Web服務(wù)傳到JSP容器,JSP容器將判斷JSP頁(yè)面在當(dāng)前JSP容器中是否是第一次請(qǐng)求。如果是第一次請(qǐng)求,則將JSP文件編譯成Servlet文件以應(yīng)答客戶請(qǐng)求,否則需判斷JSP頁(yè)面是否作過(guò)修改;如果作過(guò)修改,則需編譯JSP文件,否則無(wú)需編譯,直接調(diào)用上次編譯后的應(yīng)答類進(jìn)行客戶端的響應(yīng)。 2.2 JSP頁(yè)面的組成 JSP頁(yè)

10、面包括JSP元素、注釋及HTML元素,如圖2.9所示。JSP指令:用于將消息傳送到JSP引擎。JSP動(dòng)作:使用XML語(yǔ)法格式的標(biāo)記來(lái)控制JSP引擎的各種行為。JSP腳本:插入Java語(yǔ)言程序代碼。 圖2.9 JSP頁(yè)面的組成 2.2.1 JSP指令JSP指令是為JSP引擎而設(shè)計(jì)的。該指令并不直接產(chǎn)生任何可見(jiàn)輸出,而只是告訴引擎如何處理其余JSP頁(yè)面。這些指令始終被括在“”標(biāo)記中。兩個(gè)最重要的指令是page和include。另外,taglib指令很少使用,在用JSP1.1創(chuàng)建自定義標(biāo)記時(shí)可以使用它。 幾乎在所有的JSP頁(yè)面頂部都會(huì)看到page指令。盡管不是必需的,但page指令可以讓你指定:(1

11、) 到何處查找起支持作用的Java類別:(2) 出現(xiàn)Java運(yùn)行問(wèn)題時(shí),通過(guò)errorPage將用戶引向何處:1include指令include指令用于把其它的文本文件或JSP文件加入到當(dāng)前的JSP文件中,同時(shí)解析這個(gè)文件中的JSP語(yǔ)句。 include指令可以把你的內(nèi)容分成更多可管理的元素,比如包括一個(gè)普通頁(yè)面頁(yè)眉或頁(yè)腳的元素。包含的網(wǎng)頁(yè)可以是一個(gè)固定的HTML 頁(yè)面或更多的JSP內(nèi)容,形式如: 指令將會(huì)在JSP編譯時(shí)插入一個(gè)包含文本或代碼的文件,當(dāng)你使用指令時(shí),這個(gè)包含的過(guò)程相當(dāng)于靜態(tài)的。靜態(tài)的包含就是指這個(gè)被包含的文件將會(huì)被插入到JSP文件中去。這個(gè)包含的文件可以是JSP文件、HTML文

12、件或文本文件。如果包含的是JSP文件,則這個(gè)包含的JSP文件中的代碼將會(huì)被執(zhí)行。這個(gè)被包含文件可以是HTML文件、JSP文件、文本文件,或者只是一段Java代碼。但是得注意,在這個(gè)包含文件中不能使用、標(biāo)記,因?yàn)檫@將會(huì)影響在原JSP文件中同樣的標(biāo)記,有時(shí)還會(huì)導(dǎo)致錯(cuò)誤。如果這個(gè)包含文件被改變,則包含此文件的JSP文件將被重新編譯。 屬性: file=relativeURL:這個(gè)包含文件的路徑名一般來(lái)說(shuō)是指相對(duì)路徑,不需要什么端口、協(xié)議和域名,如error.jsp、templates/onlinestore.html、/beans/calendar.jsp 如果這個(gè)路徑以“/”開(kāi)頭,那么這個(gè)路徑主要

13、是參照J(rèn)SP應(yīng)用的上下關(guān)系路徑;如果路徑是以文件名或目錄名開(kāi)頭的,那么這個(gè)路徑就是正在使用的JSP文件的當(dāng)前路徑。 例程2.2 include指令(include.jsp)An Include Test The current date and time are 被包含文件date.jsp: 圖2.10 include.jsp的運(yùn)行效果 2page指令功能:定義JSP文件中的全局屬性。JSP 語(yǔ)法:% page language=java extends=package.class import=package.class | package.*, . session=true | false

14、 buffer=none | 8KB | sizekb autoFlush=true | false info=text errorPage=relativeURL contentType=mimeType ;charset=characterSet | text/html; charset=ISO-8859-1 isErrorPage=true | false 例: 相關(guān)描述:指令作用于整個(gè)JSP頁(yè)面,同樣包括靜態(tài)的包含文件。但是,指令不能作用于動(dòng)態(tài)的包含文件,比如 ??梢栽谝粋€(gè)頁(yè)面中用多個(gè)指令,但是其中的屬性只能用一次。不過(guò)也有個(gè)例外,那就是import屬性。因?yàn)閕mport屬性和Java

15、中的import語(yǔ)句差不多(參照J(rèn)ava Language),所以就可以多用此屬性幾次。無(wú)論把指令放在JSP文件的哪個(gè)地方,它的作用范圍都是整個(gè)JSP頁(yè)面。不過(guò),為了JSP程序的可讀性以及好的編程習(xí)慣,最好還是把它放在JSP文件的頂部。 屬性: language=java:聲明腳本語(yǔ)言的種類,暫時(shí)只能用“java”。 extends=package.class:標(biāo)明JSP編譯時(shí)需要加入Java Class的全名,但是得慎重地使用它,它會(huì)限制JSP的編譯能力。 import=package.class | package.* , .:指明需要導(dǎo)入的Java包的列表,這些包就作用于程序段、表達(dá)式以

16、及聲明。 下面的包在JSP編譯時(shí)已經(jīng)導(dǎo)入了,所以不需要再指明:java.lang.* javax.servlet.*javax.servlet.jsp.* javax.servlet.http session=true | false:設(shè)定客戶是否需要HTTP session。如果設(shè)定為true,那么session是有用的。 如果設(shè)定為false,那么就不能使用session對(duì)象,以及定義了scope=session的元素,這樣使用會(huì)導(dǎo)致錯(cuò)誤。缺省值是true。 buffer=none | 8KB | sizekb:buffer的大小被out對(duì)象用于處理執(zhí)行后的JSP對(duì)客戶瀏覽器的輸出。缺省值

17、是8 KB。 autoFlush=true | false:設(shè)置如果buffer溢出,是否需要強(qiáng)制輸出。如果其值被定義為true(缺省值),輸出正常,如果它被設(shè)置為false,并且這個(gè)buffer溢出,就會(huì)導(dǎo)致一個(gè)意外錯(cuò)誤的發(fā)生。如果把buffer設(shè)置為none,那么就不能把a(bǔ)utoFlush設(shè)置為false。 isThreadSafe=true | false:設(shè)置JSP文件是否能多線程使用。缺省值是true,也就是說(shuō),JSP能夠同時(shí)處理多個(gè)用戶的請(qǐng)求。如果設(shè)置為false,則一個(gè)JSP文件一次只能處理一個(gè)請(qǐng)求。 info=text:一個(gè)文本在執(zhí)行JSP時(shí)將會(huì)被逐字加入JSP中,能夠使用Se

18、rvlet.GetServletInfo方法取回。 errorPage=relativeURL:設(shè)置處理異常事件的JSP文件。當(dāng)頁(yè)面出現(xiàn)一個(gè)設(shè)有捕獲的異常時(shí),指向另一個(gè)JSP頁(yè)面的URL。 contentType=mimeType ;charset=characterSet | text/html;charset=ISO-8859-1:設(shè)置MIME類型。缺省MIME類型是text/html, 缺省字符集為ISO-8859-1。 isErrorPage=true | false:設(shè)置此頁(yè)是否為出錯(cuò)頁(yè)。如果被設(shè)置為true,則能使用exception對(duì)象。 3taglib指令功能:定義一個(gè)標(biāo)簽庫(kù)及

19、其自定義標(biāo)簽的前綴。JSP 語(yǔ)法: uri:英文全稱為Uniform Resource Identifier,其功能是根據(jù)標(biāo)簽的前綴對(duì)自定義的標(biāo)簽進(jìn)行惟一的命名。 例: . 相關(guān)描述: 指令聲明此JSP文件使用了自定義的標(biāo)簽,同時(shí)引用標(biāo)簽庫(kù),還指定了它們的標(biāo)簽的前綴。 自定義的標(biāo)簽含有標(biāo)簽和元素之分。因?yàn)镴SP文件能夠轉(zhuǎn)化為XML,所以了解標(biāo)簽和元素之間的聯(lián)系很重要。 標(biāo)簽只不過(guò)是一個(gè)在意義上被抬高了的標(biāo)記,是JSP元素的一部分。 JSP元素是JSP語(yǔ)法的一部分,和XML一樣有開(kāi)始標(biāo)記和結(jié)束標(biāo)記。元素也可以包含其它的文本、標(biāo)記、元素。 4隱藏對(duì)象隱藏對(duì)象也叫內(nèi)置對(duì)象,是JSP自帶的,不需在頁(yè)面

20、聲明就可直接使用。在腳本中使用隱藏對(duì)象,使用戶更容易收集通過(guò)瀏覽器請(qǐng)求發(fā)送的信息、響應(yīng)瀏覽器以及存儲(chǔ)用戶信息,從而使對(duì)象開(kāi)發(fā)者擺脫了很多繁瑣的工作。隱藏對(duì)象包括: Request:請(qǐng)求對(duì)象。 Response:響應(yīng)對(duì)象。 PageContext:頁(yè)面上下文對(duì)象。 Session::會(huì)話對(duì)象。 Application:應(yīng)用程序?qū)ο蟆?Out:輸出對(duì)象。 Config:配置對(duì)象。 Page:頁(yè)面對(duì)象。 Exception:例外對(duì)象。JSP內(nèi)置對(duì)象映射表如表2-2所示。表2-2 JSP內(nèi)置對(duì)象映射表 各對(duì)象的描述如下:(1) Request對(duì)象:代表的是來(lái)自客戶端的請(qǐng)求,此請(qǐng)求包含來(lái)自GET/POS

21、T請(qǐng)求的參數(shù),在服務(wù)器端接受并得到從客戶端瀏覽器提交或上傳的信息。Request 對(duì)象可以訪問(wèn)任何基于 HTTP 請(qǐng)求傳遞的所有信息,包括從Form表單用 POST 方法或 GET 方法傳遞的參數(shù)、cookie等。關(guān)于它的方法使用得較多的是getParameter、getParameterNames和getParameterValues。通過(guò)調(diào)用這幾個(gè)方法,可獲取請(qǐng)求對(duì)象中所包含的參數(shù)的值。 (2) Response對(duì)象:代表的是對(duì)客戶端的響應(yīng),也就是說(shuō),可以通過(guò)Response對(duì)象組織發(fā)送到客戶端的數(shù)據(jù)。但由于處于組織方式的底層,因此建議普通讀者不使用。需要向客戶端發(fā)送文字時(shí),直接使用Out

22、對(duì)象即可。(3) PageContext對(duì)象:直譯時(shí)可以稱作“頁(yè)面上下文”對(duì)象,代表的是當(dāng)前頁(yè)面運(yùn)行的一些屬性,常用的方法包括findAttribute、getAttribute、getAttributesScope和getAttributeNamesInScope。一般情況下PageContext對(duì)象用到的也不是很多。只有在項(xiàng)目所面臨的情況比較復(fù)雜時(shí),才會(huì)利用頁(yè)面屬性來(lái)輔助處理。 (4) Session對(duì)象:代表服務(wù)器與客戶端所建立的會(huì)話,當(dāng)需要在不同的JSP頁(yè)面中保留客戶信息的情況下使用,例如,在線購(gòu)物、客戶軌跡跟蹤等。Session對(duì)象建立在Cookie的基礎(chǔ)上,所以使用時(shí)應(yīng)注意判斷客戶

23、端是否打開(kāi)了Cookie。常用的方法包括getId、getValue、getValueNames和putValue等。(5) Application對(duì)象:負(fù)責(zé)提供應(yīng)用程序在服務(wù)器中運(yùn)行時(shí)的一些全局信息,常用的方法有g(shù)etMimeType和getRealPath等。 (6) Out對(duì)象:代表了向客戶端發(fā)送數(shù)據(jù)的對(duì)象,與Response對(duì)象不同。通過(guò)Out對(duì)象發(fā)送的內(nèi)容將是瀏覽器需要顯示的內(nèi)容,是文本一級(jí)的??梢酝ㄟ^(guò)Out對(duì)象直接向客戶端輸出一個(gè)由程序動(dòng)態(tài)生成的HTML文件。 常用的方法除了Print和PrintIn之外, 還包括clear、clearBuffer、flush、getBufferS

24、ize和gerRemaining。因?yàn)镺ut對(duì)象內(nèi)部包括了一個(gè)緩沖區(qū),所以需要對(duì)緩沖區(qū)進(jìn)行操作的方法。(7) Config對(duì)象:提供一些配置信息, 以獲得Servlet初始化時(shí)的參數(shù)。 常用的方法有g(shù)etInitParameter和getInitParameterNames。 (9) Exception對(duì)象:代表了JSP文件運(yùn)行時(shí)所產(chǎn)生的例外對(duì)象。此對(duì)象不能在一般JSP文件中直接使用,只能在使用了“”的JSP文件中使用。這是因?yàn)镴SP文件運(yùn)行時(shí)產(chǎn)生的錯(cuò)誤對(duì)象被向外拋出,只有被使用了“”標(biāo)記,從而被具有攔截錯(cuò)誤對(duì)象功能的JSP文件所攔截。最常用的方法就是getMessage,用以獲得錯(cuò)誤信息,此

25、外還會(huì)用到getLocalizedMessage和printStackTrace。 2.2.2 JSP動(dòng)作JSP動(dòng)作利用XML語(yǔ)法格式的標(biāo)記來(lái)控制Servlet引擎的行為。 利用JSP動(dòng)作可以動(dòng)態(tài)地插入文件、重用JavaBean組件、把用戶重定向到另外的頁(yè)面、為Java插件生成HTML代碼等。常見(jiàn)標(biāo)準(zhǔn)JSP動(dòng)作(JSP 1.1規(guī)范Web包容器所支持的7個(gè)標(biāo)準(zhǔn)動(dòng)作)有:用于在當(dāng)前頁(yè)面加入其它頁(yè)面的內(nèi)容,運(yùn)行時(shí)加入;include指令在編譯時(shí)就加入。:用于轉(zhuǎn)發(fā)請(qǐng)求,page屬性指定轉(zhuǎn)發(fā)的目的頁(yè)面,如:。:用于在使用include和forward操作時(shí)添加傳遞的參數(shù)。在被包括的頁(yè)面或轉(zhuǎn)發(fā)的頁(yè)面進(jìn)行r

26、equest訪問(wèn)時(shí)可以獲得添加的參數(shù),如:。:用于下載Java插件,且該動(dòng)作在客戶端執(zhí)行。 1動(dòng)作功能:包含一個(gè)靜態(tài)或動(dòng)態(tài)文件。 JSP 語(yǔ)法:jsp:include page=relativeURL | flush=true / 或者jsp:include page=relativeURL | flush=true jsp:param name=parameterName value=parameterValue | / 例: 相關(guān)描述: 元素允許包含動(dòng)態(tài)文件和靜態(tài)文件,這兩種包含文件的結(jié)果是不同的。如果文件僅是靜態(tài)文件,那么這種包含僅僅是把包含文件的內(nèi)容加到JSP文件中去;如果這個(gè)文件是動(dòng)

27、態(tài)的,那么這個(gè)被包含文件也會(huì)被JSP編譯器執(zhí)行(與ASP相似)。 不能從文件名上判斷一個(gè)文件是動(dòng)態(tài)的還是靜態(tài)的,比如aspcn.jsp 就有可能只是包含一些信息而已,并不需要執(zhí)行。能夠同時(shí)處理這兩種文件,因此就不需要包含時(shí)還要判斷此文件是動(dòng)態(tài)的還是靜態(tài)的。如果這個(gè)包含文件是動(dòng)態(tài)的,那么還可以用來(lái)傳遞參數(shù)名和參數(shù)值。 相關(guān)屬性: page=relativeURL | :參數(shù)為一相對(duì)路徑,或者是代表相對(duì)路徑的表達(dá)式。 flush=true:表示是否要立即打印出來(lái)。如果要立即打印出來(lái),則必須使用flush=true,不能使用false值。缺省值為false。 jsp:param name=param

28、eterName value=parameterValue |/:子句能傳遞一個(gè)或多個(gè)參數(shù)給動(dòng)態(tài)文件。在一個(gè)頁(yè)面中可使用多個(gè)來(lái)傳遞多個(gè)參數(shù)。 2動(dòng)作功能:重定向一個(gè)HTML文件、JSP文件或者是一個(gè)程序段。JSP 語(yǔ)法:jsp:forward page=relativeURL | / 或者jsp:forward page=relativeURL | jsp:param name=parameterName value=parameterValue | / 例:或者 相關(guān)描述: 標(biāo)簽從一個(gè)JSP文件向另一個(gè)文件傳遞一個(gè)包含用戶請(qǐng)求的request對(duì)象。標(biāo)簽以下的代碼,將不能執(zhí)行。 能夠向目標(biāo)文件

29、傳送參數(shù)和值。在上面的例子中傳遞的參數(shù)名為username,值為jsmith。如果使用了標(biāo)簽的話,則目標(biāo)文件必須是一個(gè)動(dòng)態(tài)的文件,且能夠處理參數(shù)。 如果使用了非緩沖輸出的話,那么使用時(shí)就要小心。如果在使用之前JSP文件已經(jīng)有了數(shù)據(jù),那么文件執(zhí)行就會(huì)出錯(cuò)。 相關(guān)屬性: page=relativeURL | :這里是一個(gè)表達(dá)式或一個(gè)字符串,用于說(shuō)明將要定向的文件或URL。這個(gè)文件可以是JSP程序段,或者是其它能夠處理request對(duì)象的文件(如asp、cgi、php)。 jsp:param name=parameterName value=parameterValue | /:向一個(gè)動(dòng)態(tài)文件發(fā)送一

30、個(gè)或多個(gè)參數(shù),這個(gè)文件一定是動(dòng)態(tài)文件。 如果想傳遞多個(gè)參數(shù),則可以在一個(gè)JSP文件中使用多個(gè)。name指定參數(shù)名,value指定參數(shù)值。 3動(dòng)作功能:執(zhí)行一個(gè)applet或bean,有可能的話還要下載一個(gè)Java插件執(zhí)行它。JSP 語(yǔ)法: jsp:param name=parameterName value=parameterValue | / text message for user 例:Unable to load applet 相關(guān)描述: 元素用于在瀏覽器中播放或顯示一個(gè)對(duì)象(典型的就是applet和bean),而這種顯示需要瀏覽器的Java插件。 當(dāng)JSP文件被編譯并送往瀏覽器時(shí),元

31、素將會(huì)根據(jù)瀏覽器的版本替換成或者元素。注意,用于HTML 4.0,用于HTML 3.2。 一般來(lái)說(shuō),元素會(huì)指定對(duì)象是applet還是bean,同樣也會(huì)指定class的名字及位置。另外,還會(huì)指定將從哪里下載這個(gè)Java插件。相關(guān)屬性: type=bean | applet: 將被執(zhí)行的插件對(duì)象的類型。必須得指定是bean還是applet,因?yàn)檫@個(gè)屬性沒(méi)有缺省值。 code=classFileName:將會(huì)被Java插件執(zhí)行的Java Class的名字,必須以 .class結(jié)尾。這個(gè)文件必須存在于codebase屬性指定的目錄中。 codebase=classFileDirectoryName:將

32、會(huì)被執(zhí)行的Java Class文件的目錄(或者是路徑)。如果沒(méi)有提供此屬性,那么使用的JSP文件的目錄將會(huì)被使用。 name=instanceName:是bean或applet實(shí)例的名字,它將會(huì)在JSP其它的地方調(diào)用。 archive=URIToArchive, .:一些由逗號(hào)分開(kāi)的路徑名。這些路徑名用于預(yù)裝一些將要使用的class,這會(huì)提高applet的性能。 4動(dòng)作功能:創(chuàng)建一個(gè)Bean實(shí)例并指定它的名字和作用范圍。 JSP語(yǔ)法:jsp:useBean id=beanInstanceName scope=page | request | session | application clas

33、s=package.class | type=package.class | class=package.class type=package.class | beanName=package.class| type=package.class / | other elements 例: 相關(guān)描述: JavaBean類似于ActiveX控件,它們都能提供常用功能并且可以重復(fù)使用。 JavaBean的值是通過(guò)一些屬性獲得的,可通過(guò)這些屬性訪問(wèn)JavaBean設(shè)置。相關(guān)屬性: id=beanInstanceName:在所定義的范圍中確認(rèn)Bean的變量,能在后面的程序中使用此變量名來(lái)分辨不同的Bea

34、n,這個(gè)變量名對(duì)大小寫(xiě)敏感。 scope=page | request | session | application:Bean存在的范圍以及id變量名的有效范圍。缺省值是page,以下是詳細(xì)說(shuō)明: page :能在包含元素的JSP文件以及此文件中的所有靜態(tài)包含文件中使用Bean,直到頁(yè)面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或轉(zhuǎn)到另一個(gè)文件為止。 request :在任何執(zhí)行相同請(qǐng)求的JSP文件中使用Bean,直到頁(yè)面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或轉(zhuǎn)到另一個(gè)文件為止。能夠使用request對(duì)象訪問(wèn)Bean,比如request.getAttribute(beanInstanceName)。 session :從

35、創(chuàng)建Bean開(kāi)始,就能在任何使用相同session的JSP文件中使用Bean。這個(gè)Bean存在于整個(gè)session生存周期內(nèi),任何在分享此session的JSP文件都能使用同一個(gè)Bean。注意,在創(chuàng)建Bean的JSP文件的指令中必須指定session=true。 application :從創(chuàng)建Bean開(kāi)始,就能在任何使用相同application的JSP文件中使用Bean。這個(gè)Bean存在于整個(gè)application生存周期內(nèi),任何在分享此application的JSP文件都能使用同一Bean。 class=package.class:使用new關(guān)鍵字以及class構(gòu)造器從一個(gè)class中示

36、例一個(gè)Bean。這個(gè)class不能是抽象的,必須有一個(gè)公用的、沒(méi)有參數(shù)的構(gòu)造器。這個(gè)package的名字區(qū)別大小寫(xiě)。 5 動(dòng)作功能:設(shè)置Bean中的屬性值。JSP語(yǔ)法:jsp:setPropertyname=beanInstanceNameproperty= * | property=propertyName param=parameterName | property=propertyName value=string | / 例: 相關(guān)描述: 元素使用Bean給定的setter方法,在Bean中設(shè)置一個(gè)或多個(gè)屬性值。在使用這個(gè)元素之前必須使用聲明此Bean。這是因?yàn)楹褪锹?lián)系在一起的,同時(shí)它

37、們使用的Bean實(shí)例的名字也應(yīng)當(dāng)相匹配(就是說(shuō),在中的name的值應(yīng)當(dāng)和中id的值相同)。 能使用多種方法利用來(lái)設(shè)定屬性值: 可以通過(guò)用戶輸入的所有值(被作為參數(shù)儲(chǔ)存在request對(duì)象中)來(lái)匹配Bean中的屬性; 通過(guò)用戶輸入的指定的值來(lái)匹配Bean中指定的屬性;還可以在運(yùn)行時(shí)使用一個(gè)表達(dá)式來(lái)匹配Bean的屬性。 相關(guān)屬性: name=beanInstanceName:表示已經(jīng)在中創(chuàng)建的Bean實(shí)例的名字。 property=*:儲(chǔ)存用戶在JSP輸入的所有值,用于匹配Bean中的屬性。在Bean中的屬性的名字必須和request對(duì)象中的參數(shù)名一致。從客戶傳到服務(wù)器上的參數(shù)值一般都是字符類型,

38、這些字符串為了能夠在Bean中匹配,就必須轉(zhuǎn)換成其它的類型。下面列出了Bean屬性的類型以及它們的轉(zhuǎn)換方法。 java.lang.Boolean.valueOf(String)java.lang.Byte.valueOf(String)java.lang.Character.valueOf(String) java.lang.Double.valueOf(String)java.lang.Integer.valueOf(String)java.lang.Float.valueOf(String)java.lang.Long.valueOf(String)如果request對(duì)象的參數(shù)值中有空值,

39、那么對(duì)應(yīng)的Bean屬性將不會(huì)設(shè)定任何值。同樣地,如果Bean中有一個(gè)屬性沒(méi)有與之對(duì)應(yīng)的request參數(shù)值,那么這個(gè)屬性同樣也不會(huì)設(shè)定。 property=propertyName param=parameterName :使用request中的一個(gè)參數(shù)值來(lái)指定Bean中的一個(gè)屬性值。在這個(gè)語(yǔ)法中,property指定Bean的屬性名,param指定request中的參數(shù)名。 如果Bean屬性和request參數(shù)的名字不同,那么就必須得指定property和param;如果它們同名,那么只需要指明property就行了;如查參數(shù)值為空(或未初始化),則對(duì)應(yīng)的Bean屬性不被設(shè)定。 proper

40、ty=propertyName value=string | :使用指定的值來(lái)設(shè)定Bean屬性。這個(gè)值可以是字符串,也可以是表達(dá)式。如果是字符串,那么它就會(huì)被轉(zhuǎn)換成Bean屬性的類型(查看上面字符串轉(zhuǎn)化為其它類型的方法);如果是一個(gè)表達(dá)式,那么它的類型就必須和它將要設(shè)定的屬性值的類型一致;如果參數(shù)值為空,那么對(duì)應(yīng)的屬性值也不會(huì)被設(shè)定。另外,不能在一個(gè)中同時(shí)使用param和value。如果使用了property=*,那么Bean的屬性沒(méi)有必要按html表單中的順序排序。 6動(dòng)作功能:獲取Bean的屬性值,用于顯示在頁(yè)面中。JSP語(yǔ)法:例:Calendar of 相關(guān)描述: 元素將獲得Bean的屬

41、性值,并可以將其使用或顯示在JSP頁(yè)面中。在使用之前,必須用創(chuàng)建它。 元素有一些限制: 不能使用來(lái)檢索一個(gè)已經(jīng)被索引了的屬性; 能夠和JavaBeans組件一起使用,但是不能與Enterprise Bean一起使用。相關(guān)屬性: name=beanInstanceName:Bean的名字,由指定。 property=propertyName:指定Bean的屬性名。 在Sun的JSP參考中提到:如果使用來(lái)檢索的值是空值,那么NullPointerException將會(huì)出現(xiàn);同時(shí),如果使用程序段或表達(dá)式來(lái)檢索其值,那么在瀏覽器上出現(xiàn)的是null(空)。 例程2.3 numguess.jspNumbe

42、rGuessCongratulations! You got it.And after just tries.Care to try again? Welcome to the Number Guess game.Im thinking of a number between 1 and 100. Whats your guess? Good guess, but nope. Try .You have made guesses.Im thinking of a number between 1 and 100.Whats your guess? 例程2.4 NumberGuessBean.j

43、ava(例程2.3所用javabean文件)package num;import java.util.*;public class NumberGuessBean int answer;boolean success;String hint;int numGuesses;/構(gòu)造函數(shù)執(zhí)行初始化public NumberGuessBean() reset(); /設(shè)置guess屬性值public void setGuess(String guess) numGuesses+;int g;try g = Integer.parseInt(guess); catch (NumberFormatExce

44、ption e) g = -1; if (g = answer) success = true; else if (g = -1) hint = a number next time; else if (g answer) hint = lower; /獲得是否猜數(shù)成功屬性public boolean getSuccess() return success; /獲得提示屬性public String getHint() return + hint; /獲得猜數(shù)次數(shù)屬性public int getNumGuesses() return numGuesses;/復(fù)位:重新設(shè)置猜數(shù)答案,并初始化屬性

45、值public void reset() answer = Math.abs(new Random().nextInt() % 100) + 1; success = false; numGuesses = 0; 把JSP文件放到Tomcat的webapps/root/下面,把Java文件編譯生成的class文件放到webapps/root/web-inf/classes/num下面。如果沒(méi)有classes文件夾,則要自己新建一個(gè),然后在classes下面再建一個(gè)包,對(duì)本例來(lái)說(shuō),就是num文件夾。numguess.jsp編譯運(yùn)行效果如圖2.11所示。 圖2.11 numguess.jsp的運(yùn)行

46、效果 2.2.3 JSP腳本1JSP聲明JSP聲明用來(lái)定義頁(yè)面級(jí)變量,以保存信息或定義JSP頁(yè)面的其余部分可能需要的支持方法。如果發(fā)現(xiàn)代碼太多,則通常把它們寫(xiě)成一個(gè)獨(dú)立的Java類別。聲明一般都在“”標(biāo)記中。一定要以分號(hào)( ;)結(jié)束變量聲明。例:。 可以一次性聲明多個(gè)變量和方法,只要以;結(jié)尾就行。當(dāng)然,這些聲明在Java中應(yīng)是合法的。 可以直接使用在中被包含進(jìn)來(lái)的已經(jīng)聲明的變量和方法,不需要對(duì)它們重新進(jìn)行聲明。一個(gè)聲明僅在一個(gè)頁(yè)面中有效。如果你想讓每個(gè)頁(yè)面都用到一些聲明,則最好把它們寫(xiě)成一個(gè)單獨(dú)的文件,然后用或元素包含進(jìn)來(lái)。2JSP表達(dá)式 JSP表達(dá)式的結(jié)果會(huì)被轉(zhuǎn)換成一個(gè)字符串,并且被直接包括

47、在輸出頁(yè)面之內(nèi)。JSP 表達(dá)式包含在“” 標(biāo)記中,沒(méi)有分號(hào)。 例: 表達(dá)式元素表示的是一個(gè)在腳本語(yǔ)言中被定義的表達(dá)式,在運(yùn)行后被自動(dòng)轉(zhuǎn)化為字符串,然后插入到這個(gè)表達(dá)式在JSP文件的位置顯示。因?yàn)檫@個(gè)表達(dá)式的值已經(jīng)被轉(zhuǎn)化為字符串,所以你能在一行文本中插入這個(gè)表達(dá)式。 3ScriptletScriptlet是一段可以在處理請(qǐng)求時(shí)間執(zhí)行的Java代碼。Scriptlet包括在之間,它可以產(chǎn)生輸出,并將輸入發(fā)到客戶的輸出流里;也可以是一些流程控制語(yǔ)句。當(dāng)然,在它中間還可以包含一些合法的Java注釋。在被編譯的類里, 多個(gè)Scriptlet可以按在JSP中出現(xiàn)的順序合并成一個(gè)Scriptlet。Scri

48、ptlet像其它的Java代碼或者方法一樣,可以修改在它內(nèi)部的對(duì)象,作為方法引用的結(jié)果。在一段Scriptlet中創(chuàng)建的對(duì)象,可以在另一個(gè)Scriptlet中使用。在編譯后的Servlet中,Srciptlet被包含在Servlet的Service方法中。Scriptlet的語(yǔ)法是:。 2.3 Session元素 2.3.1 Session 對(duì)象Session翻譯為中文是“會(huì)話”的意思。Session其實(shí)是指訪問(wèn)者從到達(dá)某個(gè)特定主頁(yè)到離開(kāi)的時(shí)間段內(nèi),服務(wù)器給他分配的一個(gè)用來(lái)存儲(chǔ)信息的全局變量的集合。這些變量可以是自動(dòng)生成的,也可以是程序員在服務(wù)器端腳本程序中定義的。因此,Session實(shí)際上是

49、服務(wù)器與客戶端之間的“會(huì)話”。Session可以用來(lái)存儲(chǔ)訪問(wèn)者的一些特定信息,如訪問(wèn)者姓名、性別、所使用瀏覽器類型、顯示器分辨率以及停留時(shí)間。主機(jī)服務(wù)器就是根據(jù)Session來(lái)跟蹤這些信息的。 用戶在Web應(yīng)用程序中訪問(wèn)同一頁(yè)面時(shí),Session變量始終存在。當(dāng)用戶在應(yīng)用程序的頁(yè)面間跳轉(zhuǎn)時(shí),存儲(chǔ)在Session對(duì)象中的變量也不會(huì)清除。當(dāng)然,也可以使用Session方法來(lái)結(jié)束一個(gè)會(huì)話或設(shè)置空閑會(huì)話的超時(shí)期限。Session在JSP程序中是一個(gè)內(nèi)置對(duì)象。Session存放數(shù)據(jù)的格式與Cookie一樣,是以“索引鍵(名字)/值”的格式來(lái)存放的。不同的是,在Session對(duì)象存儲(chǔ)的值可以是復(fù)雜的對(duì)象類

50、型,而不限于簡(jiǎn)單的字符串;另外,Session存放數(shù)據(jù)的對(duì)象存放在Web服務(wù)器端,而Cookie存放數(shù)據(jù)的對(duì)象存放在Web客戶端,因此Session比Cookie更安全。在JSP程序中,通常不需要特別的聲明就可以直接使用Session對(duì)象。 不過(guò),為了確認(rèn),可以加入以下代碼,以表示需要啟動(dòng)Session功能:如果設(shè)置Session的值為false,則說(shuō)明禁用Session功能。Session對(duì)象類為HttpSession,它提供了很多使用方法,在下一節(jié)中將詳細(xì)介紹。 2.3.2 Session對(duì)象方法Session對(duì)象類是HttpSession。HttpSession由服務(wù)器的程序?qū)崿F(xiàn),提供H

51、TTP服務(wù)器和HTTP客戶端之間的會(huì)話。會(huì)話被用來(lái)在多頁(yè)面請(qǐng)求中保持狀態(tài)和用戶認(rèn)證。會(huì)話實(shí)際是通過(guò)使用Cookie或Query字段來(lái)保持的。為了測(cè)試客戶端是否支持Cookie,HttpSession定義了一個(gè)isCookieSupportDetermined方法和一個(gè)isUsingCookies方法。Session對(duì)象常用方法如表2-3所示。表2-3 Session對(duì)象常用方法 2.3.3 Session示例在應(yīng)用中使用最多的是getAttribute和setAttribute?,F(xiàn)以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明Session的應(yīng)用,程序示例為例程2.5(信息寫(xiě)入Session并顯示Session相關(guān)信

52、息)和例程2.6(從Session讀出信息)。 例程2.5 Page1.jsp顯示Session相關(guān)信息并設(shè)置session顯示Session相關(guān)信息并設(shè)置session %/取得session的編號(hào)String Id = session.getId();out.println(session的編號(hào):+Id);/取得session的建立時(shí)間Date startTime = new Date(session.getCreationTime();out.println(session建立時(shí)間:+startTime);/取得session的最后一次使用時(shí)間Date lastTime = new Da

53、te(session.getLastAccessedTime();out.println(最后使用session時(shí)間:+lastTime);/取得session的有效時(shí)間 int tmpTime = session.getMaxInactiveInterval();out.println(默認(rèn)的session有效時(shí)間為:+tmpTime);/將session的有效時(shí)間設(shè)定為50分鐘session.setMaxInactiveInterval(60*50);int changeTime = session.getMaxInactiveInterval();out.println(修改后sessi

54、on有效時(shí)間為:+changeTime);/將字符串保存到sessionsession.setAttribute(str,this is a session example);% 轉(zhuǎn)向page2 例程2.6 page2.jsp獲取session 2.4 Cookie元素 2.4.1 Cookie對(duì)象1什么是Cookie瀏覽器用一個(gè)或多個(gè)限定的文件支持Cookie,這些文件在Windows機(jī)器上叫做Cookie文件,被網(wǎng)站用來(lái)存儲(chǔ)Cookie數(shù)據(jù),網(wǎng)站可以在這些Cookie文件中插入信息。Cookie也為一些網(wǎng)絡(luò)黑客提供了可乘之機(jī),例如,有的程序可以通過(guò)某些途徑讀取Cookie文件,所以有的用戶

55、認(rèn)為Cookie增加了安全隱患,甚至是對(duì)自身隱私的侵犯。盡管如此,由于Cookie的高效靈活等特性,它在應(yīng)用程序中還是得到了廣泛的應(yīng)用。 2. Cookie的工作原理Cookie將通過(guò)HTTP Headers從服務(wù)器返回到瀏覽器上,服務(wù)器首先在響應(yīng)中利用 Set-Cookie Header來(lái)創(chuàng)建一個(gè)Cookie,服務(wù)器端在響應(yīng)請(qǐng)求的Cookie Header中就會(huì)返回這個(gè)Cookie來(lái)完成瀏覽器的認(rèn)證。服務(wù)器可以根據(jù)Cookie來(lái)跟蹤用戶,這對(duì)于需要區(qū)別用戶的場(chǎng)合(如電子商務(wù))特別有用。服務(wù)器也可以據(jù)此收集用戶的信息,因此,為了保證安全,多數(shù)瀏覽器可以設(shè)置是否使用Cookie。選擇IE瀏覽器的

56、【工具】【Internet選項(xiàng)】【隱私】即可設(shè)定Cookie,如圖2.12所示。 圖2.12 Internet選項(xiàng)的隱私設(shè)置 2.4.2 Cookie對(duì)象方法常用的Cookie方法如表2-4所示。 表2-4 Cookie對(duì)象常用方法 2.4.3 Cookie示例一個(gè)Cookie包含一對(duì)鍵/值。下面的代碼生成一個(gè)Cookie并將它寫(xiě)到用戶的硬盤(pán)上:Cookie the Cookie=new Cookie(cookieName, cookieValue);Response.addCookie(theCookie);在Cookie的構(gòu)造方法中,第一個(gè)參數(shù)是鍵,第二個(gè)參數(shù)是值。如果服務(wù)器想從用戶硬盤(pán)上

57、獲取Cookie,則可以使用下面的方法從客戶請(qǐng)求中取得所有的Cookie:Cookie cookies=request.getCookies(); 然后調(diào)用Cookie的getName方法獲得Cookie的鍵,調(diào)用Cookie的getValue方法獲得Cookie的值。此外,還可以通過(guò)Cookie的setMaxAge(int expire)方法來(lái)設(shè)置Cookie的有效期。超過(guò)參數(shù)expire指定的時(shí)間(以秒為單位),Cookie就會(huì)失效。先寫(xiě)Cookie信息,然后從Cookie中讀出剛寫(xiě)入的信息,相關(guān)文件為writecookie.jsp(寫(xiě)Cookie)和readcookie.jsp(讀Coo

58、kie)。例程2.7 writecookie.jsp寫(xiě)入cookie寫(xiě)入cookie示例讀取cookie 例程2.8 readcookie.jsp讀取cookie% Cookie cookies=request.getCookies();/將適用目錄下所有Cookie讀入并存入cookies數(shù)組中Cookie sCookie=null;String svalue=null;String sname=null;if(cookies=null)/如果沒(méi)有任何cookieout.println(沒(méi)有cookie記錄);elseout.println(cookie個(gè)數(shù):+cookies.length)

59、; for(int i=0;icookies.length;i+)/循環(huán)列出所有可用的CookiesCookie=cookiesi;sname=sCookie.getName();svalue=sCookie.getValue();out.println(cookie名字:+sname+,cookie值:+svalue);% 下面再舉一例,先從客戶端中讀出Cookie鍵的值,然后將指定的一對(duì)Cookie的鍵/值寫(xiě)回客戶端。例程2.9 JspCookie.jspJspCookie % /從客戶請(qǐng)求中取得所有的Cookie Cookie cookies=request.getCookies();

60、if(cookies!=null) for(int i=0;i Cookie name: Cookie value: Old max age in seconds: New max age in seconds: JspCookie.jsp首先讀取客戶端所有的Cookie并把它們輸出到網(wǎng)頁(yè)上,然后修改Cookie的有效期,將修改前后Cookie的有效期輸出到網(wǎng)頁(yè)上,最后創(chuàng)建新的Cookie并把它寫(xiě)到客戶端。JspCookie.jsp生成的網(wǎng)頁(yè)如圖2.13所示。 圖2.13 JspCookie程序運(yùn)行結(jié)果 在瀏覽JspCookie.jsp時(shí),第一次訪問(wèn)時(shí)是將Cookie寫(xiě)到瀏覽器,所以看不到打印

溫馨提示

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