《Java-Web應用開發(fā)技術實用教程》-王紅第3章-JSP隱含對象_第1頁
《Java-Web應用開發(fā)技術實用教程》-王紅第3章-JSP隱含對象_第2頁
《Java-Web應用開發(fā)技術實用教程》-王紅第3章-JSP隱含對象_第3頁
《Java-Web應用開發(fā)技術實用教程》-王紅第3章-JSP隱含對象_第4頁
《Java-Web應用開發(fā)技術實用教程》-王紅第3章-JSP隱含對象_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java Web開發(fā)技術第3章 JSP隱含對象8/11/20221第3章 JSP隱含對象為簡化Web頁面的開發(fā)過程,JSP提供了一些由容器實現(xiàn)和管理的隱含對象,這些對象在JSP頁面中可以直接使用,不需要JSP頁面編寫者實例化。在JSP頁面中,可以通過存取這些隱含對象實現(xiàn)與JSP頁面和Servlet環(huán)境的相互訪問。本章主要內(nèi)容包括:JSP隱含對象概述和各類隱含對象的具體說明。8/11/20222Java Web開發(fā)技術3.1 JSP隱含對象概述JSP頁面的隱含對象就是在JSP頁面中不用聲明就可以使用的對象。隱含對象是JSP引擎自動創(chuàng)建的Java類實例,它們能與Servlet環(huán)境交互。隱含對象可以

2、實現(xiàn)很多功能,如從客戶端獲得數(shù)據(jù)、向客戶端發(fā)回數(shù)據(jù)、控制傳輸數(shù)據(jù)的有效域和異常處理等。如:8/11/20223Java Web開發(fā)技術隱含對象功能不必使用表達式,直接存取out對象來打印一些東西到客戶端: 不必直接傳送參數(shù),可以借助請求對象來取得客戶端輸入的參數(shù)值: 完成頁面的重定向: 在錯誤頁面中顯示出錯信息: 等等8/11/20224Java Web開發(fā)技術JSP中的9種隱含對象與輸入/輸出有關 與屬性作用域有關 與Servlet 相關 與錯誤處理有關 8/11/20225Java Web開發(fā)技術3.2與輸入/輸出有關的隱含對象 3.2.1 request對象 3.2.2 response

3、對象 3.2.3 out對象8/11/20226Java Web開發(fā)技術3.2.1 request對象在JSP頁面中,隱含對象request代表的是來自客戶端的請求,通過它可以查看請求參數(shù)、請求類型(GET,POST,HEAD等)以及請求的HTTP頭(Cookie,Referer等)客戶端信息 ,它是實現(xiàn) javax.servlet.HttpServletRequest 接口的類的一個實例。 request 對象的方法有很多 ,從功能角度可以將這些方法分為4類: 8/11/20227Java Web開發(fā)技術1取得請求參數(shù)的方法 8/11/20228Java Web開發(fā)技術2.取得請求HTTP

4、頭的方法 8/11/20229Java Web開發(fā)技術3儲存和取得屬性方法 8/11/202210Java Web開發(fā)技術4其他的方法 8/11/202211Java Web開發(fā)技術4其他的方法(續(xù))8/11/202212Java Web開發(fā)技術request比較重要的方法 getParameter() getParameterNames() getParameterValues() getHeader() 記住噢8/11/202213Java Web開發(fā)技術. 獲得客戶端提交的信息例exa3_1.jsp : 一個html文檔exa3_1.jsp提交一個表單給tree.jsp頁面,tree.j

5、sp通過request.getParameter()接收表單中的客戶輸入,并將有關信息送回客戶端。8/11/202214Java Web開發(fā)技術獲得客戶端提交的信息(續(xù)) 文本框提交的用戶名為: 客戶端提交的按鈕的名字為: exa3_1.jsp tree.jsp 1.運行2.調(diào)用3.結果8/11/202215Java Web開發(fā)技術. 處理中文信息在例exa3_1.jsp中輸入中文時將不能正確顯示, 如圖所示:這就引發(fā)如何處理客戶端提交的中文問題。JSP頁面的漢字問題主要指兩方面:JSP頁面中的漢字問題和表單提交的漢字問題。 8/11/202216Java Web開發(fā)技術(1)JSP頁面的漢字

6、問題對于JSP頁面的漢字問題,需要在JSP中使用page指令告訴客戶端漢字的編碼方式:。在沒有特別指示下,瀏覽器無法正確顯示漢字,每個要顯示漢字的JSP頁面都應該包含該語句。 8/11/202217Java Web開發(fā)技術(2)表單提交的漢字問題客戶端和服務器交互過程中,在客戶端和服務器用的是GB2312對漢字編碼,而HTTP傳輸用ISO_8859_1編碼,因此,不僅服務器端必須用指令指示客戶端漢字的顯示編碼,同時在服務器端接收到客戶端數(shù)據(jù)時需要將編碼轉(zhuǎn)換為GB2312后進行處理,方法是: 或 其中tt為表單提交的含有中文的變量8/11/202218Java Web開發(fā)技術改進后的tree.j

7、sp 我們只須在tree.jsp中加入中文處理的相關語句,中文就能正確顯示了 ,代碼如下: 文本框提交的用戶名為: %String extContent=request.getParameter(boy); 8/11/202219Java Web開發(fā)技術. 避免空指針異常例如一表單向JSP頁面提交一個正數(shù),然后計算這個正數(shù)的平方根,JSP中有這么一個語句:String textContent=request.getParameter(“num”),其中num代表表單提交的正數(shù),要注意由于JSP引擎在運行這個JSP頁面時,客戶端還沒有提交數(shù)據(jù),textContent也還沒有創(chuàng)建,而JSP頁面中的

8、number=Double.parseDouble(textContent)語句需要使用textContent,此時textContent對象為null,Java解釋器會提示出現(xiàn)空指針異常NullPointerException。為了避免使用空對象,在JSP頁面中使用了如下代碼: if ( textContent=null ) textContent=100; 8/11/202220Java Web開發(fā)技術. 其它常用方法getServletPath() getContentLength() getMethod() getHeader( )getProtocol() 8/11/202221Ja

9、va Web開發(fā)技術. 獲取HTML表單中的各種數(shù)據(jù)由于客戶端經(jīng)常使用表單提交數(shù)據(jù),本節(jié)通過例子來說明表單中各種提交手段的用法。 表單的一般格式為: 表單中的標記(數(shù)據(jù)提交的手段) 8/11/202222Java Web開發(fā)技術表單中各種提交手段 (1)下面例text.jsp表單的輸入方式是文本框和口令,,運行結果如圖3-8所示。text.jsp關鍵代碼:表單 用戶登錄 用戶名: 圖3-8密碼:8/11/202223Java Web開發(fā)技術表單中各種提交手段 (2)下面例子用單選按鈕實現(xiàn)網(wǎng)上測試 radio.jsp關鍵代碼: answer.jsp關鍵代碼:p詩人李清照是中國歷史上哪個朝代的人?

10、宋朝唐朝明朝清朝史記的作者是誰?曹雪芹羅貫中李白司馬遷您的了分圖3-9 radio.jsp的輸出結果8/11/202224Java Web開發(fā)技術表單中各種提交手段 (3)下面例子說明滾動列表使用方式 :select.jsp關鍵代碼:選擇計算和的方式 計算1到n的和 計算1到n的平方和 計算1到n的立方和請選擇n的值 n=10 n=20 n=30 n=40 n=50 n=100sum.jsp關鍵代碼:% int sum=0; String s1=request.getParameter(girl); String s2=request.getParameter(boy); int n=Inte

11、ger.parseInt(s2); if(s1.equals(1) for(int i=1;i=n;i+) sum+=i; else if(s1.equals(2) for(int i=1;i=n;i+) sum+=i*i; else for(int i=1;i您的求和結果是8/11/202225Java Web開發(fā)技術. 表格表格由和標記定義。一般格式為: 單元格中的數(shù)據(jù) 單元格中的數(shù)據(jù) 8/11/202226Java Web開發(fā)技術表格應用舉例下面例tableform.jsp是表單使用,運行結果如圖所示。tableform.jsp關鍵代碼: 杜甫是哪個朝代的人?: 宋朝 唐朝 請在右邊表格

12、中輸入數(shù)據(jù): 8/11/202227Java Web開發(fā)技術3.2.2 response對象當客戶訪問一個服務器的頁面時,會提交一個HTTP請求,服務器接到請求時會返回HTTP響應。響應是實現(xiàn) javax.servlet.HttpServletResponse接口的類的一個實例。response對象代表的是對客戶端的響應,可以通過response對象來組織發(fā)送到客戶端的數(shù)據(jù)。response對象的方法也有很多, 下面的幾個表列出了response對象的主要方法 :8/11/202228Java Web開發(fā)技術設定表頭的方法 8/11/202229Java Web開發(fā)技術設定響應狀態(tài)碼的方法 8

13、/11/202230Java Web開發(fā)技術用來URL 重寫的方法 8/11/202231Java Web開發(fā)技術其它方法 8/11/202232Java Web開發(fā)技術重要!response對象中使用較多的方法是:setContentType()sendRedirect()setHeader() 記住噢8/11/202233Java Web開發(fā)技術. 動態(tài)設置MIME類型在page指令中的contentType屬性用來指定response對象響應客戶端請求的MIME(Multipurpose Internet Mail Extension protocol,多用途網(wǎng)際郵件擴充協(xié)議)類型。 C

14、ontentType屬性值和MIME類型的主要對應關系如下表所示: 8/11/202234Java Web開發(fā)技術contentType屬性和MIME類型的對應關系 page指令只能為contentType指定一個值,如果想動態(tài)地改變這個屬性的值來以各種不同的方式做出響應,就要使用response對象的setContentType()方法改變contentType的值。一旦這個屬性值被改變,服務器就將按照新的MIME類型做出響應 。參考example3-11.jsp 。8/11/202235Java Web開發(fā)技術. response對象的http頭response對象可以使用addHeade

15、r()和setHeader()方法動態(tài)添加和修改相應頭的值,并將這些頭發(fā)送給客戶端。下面例example3_12.jsp中,response對象添加一個頭refresh,使客戶端在顯示該頁面時,每5秒鐘刷新一次。運行結果如圖 : example3_12.jsp關鍵代碼:現(xiàn)在的時間是:8/11/202236Java Web開發(fā)技術. response重定向下面例中,客戶填寫表單,并提交給tree4.jsp頁面。如果表單填寫不完整,tree4.jsp會重新定向到填寫頁面,否則顯示歡迎字樣,運行結果如圖 : tree4.jsp關鍵代碼:8/11/202237Java Web開發(fā)技術. respons

16、e的狀態(tài)行當服務器響應客戶端請求時,它發(fā)送的首行被稱為狀態(tài)行。狀態(tài)行包括3位數(shù)字的狀態(tài)碼和對狀態(tài)碼的簡單描述。其中,1xx主要是試驗性質(zhì)的;2xx表示請求成功;3xx表示在請求在滿足之前應進一步采取的行動;4xx表示服務器無法滿足要求;5xx服務器出現(xiàn)錯誤。具體可參考書中表3-11狀態(tài)碼表 。8/11/202238Java Web開發(fā)技術3.2.3 out對象out對象代表了向客戶端發(fā)送數(shù)據(jù)的對象,通過out對象發(fā)送的內(nèi)容將是瀏覽器需要顯示的內(nèi)容,是文本一級的??梢酝ㄟ^out對象直接向客戶端寫一個由程序動態(tài)生成HTML文件。它是javax.servlet.jsp.JspWriter類的一個實例

17、。 JSP允許通過page指令的buffer屬性調(diào)整out對象緩存的大小,甚至允許關閉緩存。 8/11/202239Java Web開發(fā)技術out對象重要方法 8/11/202240Java Web開發(fā)技術Out對象舉例 Out.jsp關鍵代碼:BufferSize : Available : Used : 因為在每個頁面中都用到out對象,因此在這兒僅舉一個例子再展示一下out對象的主要方法。Out.jsp顯示目前緩沖區(qū)的大小 。運行結果如圖所示 8/11/202241Java Web開發(fā)技術3.3與屬性作用域有關的對象3.3.1 session對象3.3.2 application對象3.

18、3.3 pageContext對象 8/11/202242Java Web開發(fā)技術3.3.1 session對象HTTP是無狀態(tài)(stateless)協(xié)議。客戶端向服務器發(fā)送一次請求(request),服務器給與響應(response)后連接就關閉了。因此,當下一次連接時,服務器已經(jīng)沒有以前的連接信息了。服務器對每一個客戶端請求都沒有歷史記憶的特點帶來了一系列的問題。如在線商店購物時 ,當我們把商品加入購物車時,服務器如何才能知道車里原先有些什么?當用戶從選擇商品的頁面轉(zhuǎn)到輸入信用卡號和送達地址的頁面,服務器如何才能記住用戶買了些什么?這個問題一般有三種解決方法: 8/11/202243Jav

19、a Web開發(fā)技術解決方法:Cookie :利用Cookie對象來存儲有關購物會話的信息,后繼的各個連接可以查看當前Cookie,提取有關該會話的完整信息。 重寫URL :把一些標識會話的數(shù)據(jù)附加到每個URL的后面,服務器能夠把該會話標識和它所保存的會話數(shù)據(jù)關聯(lián)起來。 隱藏表單域 :通過表單的隱藏域維持會話HttpSession API :Servlet提供的一種與眾不同的方案 。8/11/202244Java Web開發(fā)技術HttpSession API HttpSession API是一個基于Cookie或者URL重寫機制的高級會話狀態(tài)跟蹤接口。如果瀏覽器支持Cookie,則使用Cooki

20、e;如果瀏覽器不支持Cookie或者Cookie功能被關閉,則自動使用URL重寫方法。Servlet開發(fā)者無需關心細節(jié)問題,也無需直接處理Cookie或附加到URL后面的信息 。8/11/202245Java Web開發(fā)技術什么是會話(session)session對象是javax.servlet.http.HttpSession類的一個實例 ,session對象使同一用戶在訪問Web站點時多個頁面間共享信息。一個客戶訪問服務器時,可能會在這個服務器的幾個頁面之間反復連接,反復刷新一個頁面或不斷向一個頁面提交信息等。服務器完全可以通過session對象知道這是同一個客戶。從一個客戶打開瀏覽器連

21、接到服務器開始,到客戶關閉瀏覽器離開這個服務器結束,被稱為一個會話。 8/11/202246Java Web開發(fā)技術session對象的主要方法 8/11/202247Java Web開發(fā)技術. session對象的ID標識客戶首次訪問服務器上的JSP頁面時,JSP引擎產(chǎn)生session對象,并分配給它一個String類型的ID,并將其發(fā)送到客戶端存入Cookie中,這樣session對象和客戶端之間建立了一一對應關系,客戶在該服務器不同網(wǎng)頁間轉(zhuǎn)換或從其他服務器回到該服務器時,不分配給客戶新的session,直到客戶關閉瀏覽器,分配給客戶的session對象被取消。 8/11/202248Ja

22、va Web開發(fā)技術Session與ID的一一對應關系下面例中,客戶在三個頁面id1.jsp、id2.jsp和id3.jsp之間進行鏈接,只要不關閉瀏覽器,三個頁面的session對象完全相同,這可以從三個頁面中得到的session ID看到。代碼如下,運行結果單擊如圖 id1.jsp關鍵代碼: 您在id1頁面的session對象的ID是:單擊超連接,可到id2頁面歡迎到id2頁面來。 id2.jsp關鍵代碼:您在id2頁面中的id號為:單擊超連接,可到id3頁面歡迎到id3頁面來。id3.jsp關鍵代碼: 您在id3頁面中的session對象的ID是: 點擊超鏈接,連接到id1頁面。 歡迎到

23、id1頁面來。 8/11/202249Java Web開發(fā)技術. session對象和URL重寫上面例子是在客戶端支持Cookie基礎上的。如果客戶端不支持Cookie,服務器無法將session ID寫到客戶端。服務器無法識別同一個客戶端。解決該問題的有效方法是URL重寫技術。 改進后id1_1.jsp關鍵代碼:在id1頁面中的id號為:單擊超連接,可到id2頁面a href=歡迎到id2_1頁面來。id2_1.jsp 和id3_1.jsp在相同位置做相應更改即可 。8/11/202250Java Web開發(fā)技術. 在會話對象中保存數(shù)據(jù)保存和獲得session對象中的數(shù)據(jù)是JSP頁面常做的工

24、作,需要使用getAttribute()和setAttribute()方法。例子simplesession.jsp在session對象中保存數(shù)據(jù)numVisits,這樣服務器可以告訴客戶他訪問該頁面一共多少次,只要客戶不關閉瀏覽器。刷新6次后運行結果如圖3-20所示。圖3-20例:example3_17.jsp , Login.jsp , Member.jsp 8/11/202251Java Web開發(fā)技術. session對象的生存時間例example3_18.jsp是一個猜數(shù)字游戲 8/11/202252Java Web開發(fā)技術. session對象的新與舊前面已經(jīng)講到,會話有生存期 ,一

25、般來說,下列情況會使會話結束:由于網(wǎng)絡故障套接字刪除、關閉瀏覽器、服務器關閉重起、會話超時和主動撤銷會話。 在第二章已經(jīng)實現(xiàn)了計數(shù)器功能,顯示客戶是訪問本網(wǎng)站的第多少位客戶。但那時客戶不斷刷新頁面時,計數(shù)器的數(shù)目在增加,這是不正確的。下面的例example3_19.jsp解決了這個問題,對第二章的例子進行改進 。8/11/202253Java Web開發(fā)技術3.3.2 application對象pplication對象負責提供應用程序在服務器中運行時的一些全局信息。服務器啟動時就創(chuàng)建一個application對象,客戶在該服務器的各個頁面之間鏈接時,application對象都是同一個,直到服

26、務器關閉。 表3-14 列出了application對象的主要方法8/11/202254Java Web開發(fā)技術. application對象的常用方法例:application.jsp ,setAttribute.jsp ,getAttribute.jsp ,example3_20.jsp 8/11/202255Java Web開發(fā)技術. 用application對象制作留言板在下例中,客戶在submit.jsp中輸入姓名、留言標題和留言內(nèi)容。這些信息提交給messagePane.jsp。該頁面將客戶信息存入向量,并將向量存放在application對象中。當查看留言板時,showMessa

27、ge.jsp負責從application對象中取出向量,并遍歷向量顯示其中的所有留言。代碼詳見:submit.jsp ,messagePane.jsp ,showMessage.jsp 8/11/202256Java Web開發(fā)技術3.3.3 pageContext對象pageContext對象主要用來管理頁面的屬性,描述JSP文檔的運行環(huán)境。它是頁面中對象功能的最大集成者,提供對所有其他隱含對象及其屬性的訪問。 pageContext對象的方法詳見表3-15 和表3-16 例scopeexample1.jsp 和scopeexample2.jsp 8/11/202257Java Web開發(fā)技

28、術3.4 與Servlet 有關的隱含對象與Servlet 有關的隱含對象有兩個: page和config。page對象表示Servlet本身;config對象則是存放Servlet的初始參數(shù)值。8/11/202258Java Web開發(fā)技術3.4.1 page 對象它是this的同義詞,表示JSP頁面本身,是Servlet類的一個實例,就是轉(zhuǎn)換后的Servlet類,可以調(diào)用Servlet中的任何方法。它實現(xiàn)了javax.servlet.jsp.HttpJspPage接口。當前page對象用處不大。下面舉一個簡單例子PageInfo.jsp,運行結果如圖3-29所示。 圖3-29 PageIn

29、fo.jsp運行結果 8/11/202259Java Web開發(fā)技術3.4.2 config 對象config對象是 javax.servlet.servletConfig 接口的實例,存儲Servlet配置對象。其重要方法如下表所示。8/11/202260Java Web開發(fā)技術3.5 與Error 有關的隱含對象這類的隱含對象只有一個成員:exception 對象。 exception對象代表了JSP文件運行時所產(chǎn)生的異常對象,目的是在JSP內(nèi)處理錯誤。此對象不能在一般JSP文件中直接使用,而只能在使用了的JSP文件中使用。 例:dividedexample.jsp 8/11/202261

30、Java Web開發(fā)技術3.6 小 結本章介紹了JSP頁面中使用的主要隱含對象。它們是:request、response、out、session、application、pageContext、config、page、exception。正是由于這些隱含對象,你可以進入JSP頁面的代碼段,用不著深入了解太多的Servlet API細節(jié)。 從本質(zhì)上講,JSP的這些隱含對象其實都是由特定的Java類所產(chǎn)生的,在服務器運行時根據(jù)情況自動生成,所以如果你有較好的Java基礎,可以參考相應的類說明。 8/11/202262Java Web開發(fā)技術習 題1編寫JSP頁面,完成下圖功能:8/11/20226

31、3Java Web開發(fā)技術習題2編寫JSP頁面,完成下圖功能,提交請求后顯示相應的選中項標簽:8/11/202264Java Web開發(fā)技術習題3在aa.jsp中有行代碼:在bb.jsp中有行代碼 :為了使得在bb.jsp中的如上代碼可以顯示”jb-aptech”,可以使用()發(fā)送。A)在aa.jsp中使用把請求提交到bb.jspB)在aa.jsp中使用把頁面重定向到bb.jspC)在aa.jsp中使用把頁面重定向到bb.jspD)在aa.jsp中使用包含頁面bb.jspE)在aa.jsp中使用把頁面重定向到bb.jsp8/11/202265Java Web開發(fā)技術習題4如果在JSP腳本中有如下代碼: int I=10; /1 String str=”jb-aptech”; /2 Vector v=new Vector(); /3 v.add(“jb”); /4 v.add(“aptech”); /5 sess

溫馨提示

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

評論

0/150

提交評論