JSP的內(nèi)置對象課件(PPT 80頁)_第1頁
JSP的內(nèi)置對象課件(PPT 80頁)_第2頁
JSP的內(nèi)置對象課件(PPT 80頁)_第3頁
JSP的內(nèi)置對象課件(PPT 80頁)_第4頁
JSP的內(nèi)置對象課件(PPT 80頁)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、動態(tài)網(wǎng)頁設(shè)計第4章 JSP內(nèi)置對象7/20/20221第1頁,共80頁。第4章 JSP內(nèi)置對象為簡化Web頁面的開發(fā)過程,JSP提供了一些由服務(wù)器實現(xiàn)和管理的內(nèi)置對象,這些內(nèi)置對象在JSP頁面中不用聲明就可以使用。內(nèi)置對象是服務(wù)器JSP引擎自動創(chuàng)建的Java類實例通過存取這些內(nèi)置對象實現(xiàn)與JSP頁面和Servlet環(huán)境的相互訪問。內(nèi)置對象可以實現(xiàn)很多功能,如從客戶端獲得數(shù)據(jù)、向客戶端發(fā)回數(shù)據(jù)、控制傳輸數(shù)據(jù)的有效域和異常處理等。4.1 JSP內(nèi)置對象概述7/20/20222第2頁,共80頁。內(nèi)置對象功能舉例說明使用直接存取out對象來打印一些東西到客戶端: 借助請求對象來取得客戶端輸入的參數(shù)值:

2、 完成頁面的重定向: 在錯誤頁面中顯示出錯信息: 重新使用;改寄;改變投遞方向7/20/20223第3頁,共80頁。JSP中的9種內(nèi)置對象與輸入/輸出有關(guān) 與屬性作用域有關(guān) 與Servlet 相關(guān) 與錯誤處理有關(guān) 7/20/20224第4頁,共80頁。4.2 與輸入/輸出有關(guān)的內(nèi)置對象 4.2.1 request對象 4.2.2 response對象 4.2.3 out對象7/20/20225第5頁,共80頁。4.2.1 request對象1請求行 規(guī)定了請求的方法(如get、post、head、delete、put等),請求的資源和使用的HTTP協(xié)議版本號。2請求頭 請求頭主要說明請求客戶的

3、主機IP、cookie 、信息體和附加信息。一個HTTP請求可以包括多個請求頭。3信息體 指請求的正文。如表單數(shù)據(jù)被封裝為信息體7/20/20226第6頁,共80頁。4.2.1 request對象(續(xù))在JSP頁面中,使用內(nèi)置對象request可以查看HTTP請求報文中的這些信息。它是實現(xiàn) javax.servlet.HttpServletRequest 接口的類的一個實例。 request 對象的方法有很多 ,從功能角度可以將這些方法分為4類: 取得請求參數(shù)的方法取得請求HTTP 頭的方法儲存和取得屬性方法其他的方法7/20/20227第7頁,共80頁。1取得請求參數(shù)的方法 7/20/202

4、28第8頁,共80頁。2.取得請求HTTP 頭的方法 7/20/20229第9頁,共80頁。3儲存和取得屬性方法 7/20/202210第10頁,共80頁。4其他的方法 7/20/202211第11頁,共80頁。4其他的方法(續(xù)) 7/20/202212第12頁,共80頁。request比較重要的方法 getParameter() getParameterNames() getParameterValues() getHeader() 記住噢7/20/202213第13頁,共80頁。. 獲得客戶端提交的信息String getParameter(String name) 該方法用于獲取客戶端瀏

5、覽器傳遞(如:表單、param動作指令)給服務(wù)器端由name指定的參數(shù)值。當傳遞給此方法的參數(shù)名name沒有實際參數(shù)與之對應(yīng)時,則返回null。7/20/202214第14頁,共80頁。獲得客戶端提交的信息(續(xù)) 文本框提交的用戶名為: 客戶端提交的按鈕的名字為: exa3_1.jsp1.運行2.調(diào)用3.執(zhí)行結(jié)果舉例:tree.jsp 7/20/202215第15頁,共80頁。. 處理中文信息在例exa3_1.jsp中輸入中文時將不能正確顯示, 如圖所示:這就引發(fā)如何處理客戶端提交的中文問題。7/20/202216第16頁,共80頁。JSP頁面的漢字問題主要指兩方面:JSP頁面中的漢字問題表單

6、提交的漢字問題7/20/202217第17頁,共80頁。(1)JSP頁面的漢字問題對于JSP頁面的漢字問題,需要在JSP中使用page指令告訴客戶端漢字的編碼方式:在沒有特別指示下,瀏覽器無法正確顯示漢字,每個要顯示漢字的JSP頁面都應(yīng)該包含該語句。 7/20/202218第18頁,共80頁。(2)表單提交的漢字問題原因:客戶端和服務(wù)器交互過程中,在客戶端和服務(wù)器用的是GB2312對漢字編碼,而HTTP傳輸用ISO_8859_1編碼解決思想:不僅服務(wù)器端必須用指令指示客戶端漢字的顯示編碼,同時在服務(wù)器端接收到客戶端數(shù)據(jù)時需要將編碼轉(zhuǎn)換為GB2312后進行處理7/20/202219第19頁,共8

7、0頁。(2)表單提交的漢字問題(續(xù))具體做法: 或 或 7/20/202220第20頁,共80頁。. 類型轉(zhuǎn)換問題String getParameter(String name) 注意:request.getParameter方法獲取客戶端瀏覽器傳遞給服務(wù)器端由name指定的參數(shù)值類型是字串型。有時輸入的信息是數(shù)字,并需要用于數(shù)字計算時,要進行類型格式轉(zhuǎn)換7/20/202221第21頁,共80頁。請輸入一個數(shù)字,計算其平方根: 7/20/202222第22頁,共80頁。=0) r=Math.sqrt(number) ; out.print(+String.valueOf(number)+的平方

8、根:); out.print(+String.valueOf(r); else out.print(+請輸入一個正數(shù)); catch(NumberFormatException e) out.print(+請輸入數(shù)字字符); %Float.parseFloatInteger.parseInt7/20/202223第23頁,共80頁。. 避免空指針異常例如: String textContent=request.getParameter(“tnumber”) 如果在JSP引擎運行這個JSP頁面時,客戶端還沒有提交數(shù)據(jù),textContent也還沒有創(chuàng)建,此時textContent對象為nulln

9、umber=Double.parseDouble(textContent)語句需要使用textContent,Java解釋器會提示出現(xiàn)空指針異常NullPointerException為了避免使用空對象,在JSP頁面中使用了如下代碼: if ( textContent=null ) textContent=100; 7/20/202224第24頁,共80頁。. 其它常用方法getServletPath() getContentLength() getMethod() getHeader( )getProtocol() 7/20/202225第25頁,共80頁。 Request對象獲得服務(wù)器端參

10、數(shù) request.getMethod(): request.getProtocol(): request.getServletPath(): request.getServerName(): request.getServerPort(): request.getRemoteUser(): request.getRemoteAddr(): request.getRemoteHost(): 正在使用的瀏覽器: 7/20/202226第26頁,共80頁。. 獲取HTML表單中的各種數(shù)據(jù)表單 用戶登錄 用戶名:密碼:獲取方法:String textname=request.getParameter

11、(“User);String textpwd=request.getParameter(“pwd);(1)提取文本框和密碼框中數(shù)據(jù)7/20/202227第27頁,共80頁。p詩人李清照是中國歷史上哪個朝代的人?宋朝唐朝明朝清朝史記的作者是誰?曹雪芹羅貫中李白司馬遷您的了分(2)提取單選按鈕選擇的信息7/20/202228第28頁,共80頁。select.jsp關(guān)鍵代碼:選擇計算和的方式 計算1到n的和 計算1到n的平方和 計算1到n的立方和請選擇n的值 n=10 n=20 n=30 n=40 n=50 n=100(3)提取列表框中選擇的信息sum.jsp關(guān)鍵代碼:% int sum=0; St

12、ring s1=request.getParameter(“select1); String s2=request.getParameter(“select2); int n=Integer.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您的求和結(jié)果是7/20/202229第29頁,共80頁。(4)提取復(fù)選按鈕組中選擇的信息7/20/202230第30頁,共80頁。(4)提取復(fù)選按鈕組中選

13、擇的信息(續(xù))checkbox 選擇你喜歡的運動: 足球 藍球 乒乓球 游泳 跑步 網(wǎng)球 7/20/202231第31頁,共80頁。% request.setCharacterEncoding (gb2312);String itemName =request.getParameterValues(mylike); if (itemName=null) out.println(一個都不喜歡); else out.println(itemName.length=+itemName.length+); for(int k=0;k7/20/202232第32頁,共80頁。4.2.2 response

14、對象當客戶訪問一個服務(wù)器的頁面時,會提交一個HTTP請求,服務(wù)器接到請求時會返回HTTP響應(yīng)。HTTP 的報文結(jié)構(gòu)(響應(yīng)報文) 版 本狀態(tài)碼短 語首部字段名首部行:值首部字段名值:實體主體(有些響應(yīng)報文不用)狀態(tài)行空格回車換行:CRLFCRLFCRLFCRLF7/20/202233第33頁,共80頁。 response對象代表的是對客戶端的響應(yīng),其功能是將服務(wù)器處理后的結(jié)果傳回到客戶端,響應(yīng)客戶請求。response響應(yīng)是實現(xiàn)javax.servlet.HttpServletResponse接口的類的一個實例。7/20/202234第34頁,共80頁。response對象的方法:設(shè)定響應(yīng)狀態(tài)碼

15、的方法設(shè)定表頭的方法用來URL 重寫的方法其它方法7/20/202235第35頁,共80頁。設(shè)定表頭的方法 7/20/202236第36頁,共80頁。設(shè)定響應(yīng)狀態(tài)碼的方法 7/20/202237第37頁,共80頁。用來URL重寫的方法 7/20/202238第38頁,共80頁。其 它 方 法 7/20/202239第39頁,共80頁。response重要方法response對象中使用較多的方法是:setContentType()setHeader()sendRedirect()setStatus() 7/20/202240第40頁,共80頁。. 動態(tài)設(shè)置MIME類型在page指令中的conte

16、ntType屬性用來指定response對象響應(yīng)客戶端請求的MIME(Multipurpose Internet Mail Extension protocol,多用途網(wǎng)際郵件擴充協(xié)議)類型。 page指令只能為contentType指定一個值,如果想動態(tài)地改變這個屬性的值來以各種不同的方式做出響應(yīng),就要使用response對象的setContentType()方法改變contentType的值。一旦這個屬性值被改變,服務(wù)器就將按照新的MIME類型做出響應(yīng) 。7/20/202241第41頁,共80頁。contentType屬性和MIME類型的對應(yīng)關(guān)系 7/20/202242第42頁,共80頁。

17、 學(xué)習(xí)response對象的setContentType方法的使用 要將當前頁面保存為.TXT文件嗎? 程序運行后,單擊“是”按鈕彈出“保存”對話框7/20/202243第43頁,共80頁。. response對象的http頭response對象可以使用addHeader()和setHeader()方法動態(tài)添加和修改相應(yīng)頭的值,并將這些頭發(fā)送給客戶端。下面例response對象添加一個頭refresh,使客戶端在顯示該頁面時,每5秒鐘刷新一次。現(xiàn)在的時間是:7/20/202244第44頁,共80頁。. response重定向下面例中,客戶填寫表單,并提交給tree4.jsp頁面。如果表單填寫不

18、完整,tree4.jsp會重新定向到填寫頁面,否則顯示歡迎字樣填寫姓名7/20/202245第45頁,共80頁。. response重定向(續(xù))7/20/202246第46頁,共80頁。. response的狀態(tài)行當服務(wù)器響應(yīng)客戶端請求時,它發(fā)送的首行被稱為狀態(tài)行。狀態(tài)行包括3位數(shù)字的狀態(tài)碼和對狀態(tài)碼的簡單描述。1xx主要是試驗性質(zhì)的;2xx表示請求成功;3xx表示在請求在滿足之前應(yīng)進一步采取的行動;4xx表示服務(wù)器無法滿足要求;5xx服務(wù)器出現(xiàn)錯誤。7/20/202247第47頁,共80頁。狀態(tài)代碼表7/20/202248第48頁,共80頁。狀態(tài)代碼表7/20/202249第49頁,共80頁

19、。 點擊下面的超鏈接: 第一個頁面不歡迎你 第二個頁面歡迎你 第三個頁面不歡迎你 bird1.jsp bird2.jsp bird3.jsp7/20/202250第50頁,共80頁。4.2.3 out對象out對象是一個輸出流,表示向客戶端發(fā)送數(shù)據(jù),通過out對象發(fā)送的內(nèi)容將是瀏覽器需要顯示的內(nèi)容,是文本一級的。通過out對象直接向客戶端寫一個由程序動態(tài)生成HTML文件。out對象是javax.servlet.jsp.JspWriter類的一個實例。7/20/202251第51頁,共80頁。out對象重要方法 JSP允許通過page指令的buffer屬性調(diào)整out對象緩存的大小,甚至允許關(guān)閉緩

20、存。7/20/202252第52頁,共80頁。 % out.println(); out.println(); out.println(); out.println(+姓名+); out.println(+性別+); out.println(+年齡+); out.println(); out.println(); out.println(+張三豐+); out.println(+男+); out.println(+50+); out.println(); out.println(+劉東東+); out.println(+男+); out.println(+35+); out.println()

21、; out.println(); out.println(); % 例:用out對象輸出表格,運行結(jié)果如圖所示 7/20/202253第53頁,共80頁。關(guān)鍵代碼:BufferSize : Available : Used : 例:顯示目前緩沖區(qū)的大小 。運行結(jié)果如圖所示 7/20/202254第54頁,共80頁。4.3與屬性作用域有關(guān)的對象3.3.1 session對象3.3.2 application對象3.3.3 pageContext對象7/20/202255第55頁,共80頁。4.3.1 session對象從一個客戶打開瀏覽器連接到服務(wù)器開始,到客戶關(guān)閉瀏覽器離開這個服務(wù)器結(jié)束(期間

22、客戶訪問的是同一個WEB目錄中的頁面),被稱為一個會話。一個客戶訪問服務(wù)器時,可能會在這個服務(wù)器的幾個頁面之間反復(fù)連接,反復(fù)刷新一個頁面或不斷向一個頁面提交信息等。如在線商店購物時 ,當我們把不同頁面的商品分別加入購物車時,服務(wù)器如何才能知道車里原先有些什么?當用戶從選擇商品的頁面轉(zhuǎn)到輸入信用卡號和送達地址的頁面,服務(wù)器如何才能記住用戶買了些什么?HTTP是無狀態(tài)(stateless)協(xié)議。7/20/202256第56頁,共80頁。解決方法:Session/Cookie :利用Session/Cookie對象來存儲有關(guān)會話的信息,后繼的各個連接可以查看當前Session/Cookie,提取有關(guān)

23、該會話的完整信息。 重寫URL :如果客戶端不支持Cookie,服務(wù)器無法將session ID寫到客戶端。服務(wù)器無法識別同一個客戶端。解決該問題的有效方法是URL重寫技術(shù)。 即:把一些標識會話的數(shù)據(jù)附加到每個URL的后面,服務(wù)器能夠把該會話標識和它所保存的會話數(shù)據(jù)關(guān)聯(lián)起來。 隱藏表單域 :通過表單的隱藏域維持會話HttpSession API : 是一個基于Cookie或者URL重寫機制的高級會話狀態(tài)跟蹤接口。如果瀏覽器支持Cookie,則使用Cookie;如果瀏覽器不支持Cookie或者Cookie功能被關(guān)閉,則自動使用URL重寫方法。7/20/202257第57頁,共80頁。在服務(wù)器端,

24、系統(tǒng)JSP引擎為該客戶創(chuàng)建了一個session對象,在客戶端,系統(tǒng)為該客戶創(chuàng)建了Cookie對象。session對象是javax.servlet.http.HttpSession類的一個實例 ,session對象使同一用戶在訪問Web站點時多個頁面間共享信息。服務(wù)器完全可以通過session對象知道這是同一個客戶。同一個客戶訪問服務(wù)器中不同Web目錄時,JSP引擎為該客戶創(chuàng)建不同的session對象7/20/202258第58頁,共80頁。當JSP引擎為客戶創(chuàng)建一個session對象后,這個session對象被分配了一個String類型的ID號,JSP引擎同時將此ID號發(fā)送到客戶端,存放在Co

25、okie中。同一客戶會話的session對象和Cookie對象建立了一一對應(yīng)關(guān)系。即,每一客戶會話信息保存在session/Cookie對中。當用戶再次訪問連接該服務(wù)器的其他頁面時,就不再分配給用戶新的session對象直到關(guān)閉瀏覽器后,服務(wù)器端該用戶的session對象才取消,并且和用戶的對應(yīng)關(guān)系也取消 session對象與Cookie對象7/20/202259第59頁,共80頁。session對象與Cookie對象(續(xù))存儲位置不同Session對象保存在服務(wù)器內(nèi)存中Cookie對象保存在客戶端計算機硬盤中生存期不同Session對象客戶關(guān)閉瀏覽器或會話失效時消失Cookie對象一直保存在

26、客戶端計算機硬盤中,或用setMaxAge()設(shè)置7/20/202260第60頁,共80頁。session對象與Cookie對象(續(xù))安全性Session對象安全性高Cookie對象安全性差實現(xiàn)方式Session對象記錄會話的持續(xù)過程,直至?xí)捊K止Cookie對象在后繼的請求中由客戶端發(fā)送給服務(wù)器,以確定用戶的身份7/20/202261第61頁,共80頁。session對象的主要方法 7/20/202262第62頁,共80頁。. session對象的ID標識 您在訪問id.jsp頁面 您的session對象的ID是: FORM action= method=post name=form 7/2

27、0/202263第63頁,共80頁。 你在訪問liu頁面 您的session對象的ID是: 單擊超連接,連接到wang頁面 A HREF= 歡迎到wang頁面來!7/20/202264第64頁,共80頁。 你在訪問file頁面 您的session對象的ID是: 單擊超連接,返回到ID頁面 歡迎到ID頁面來! 7/20/202265第65頁,共80頁。. 在會話對象中保存數(shù)據(jù)保存和獲得session對象中的數(shù)據(jù)是JSP頁面常做的工作,需要使用getAttribute()和setAttribute()方法。書上例子4-7在session對象中保存數(shù)據(jù)num,這樣服務(wù)器可以告訴客戶他訪問該頁面一共多

28、少次,只要客戶不關(guān)閉瀏覽器。刷新13次后運行結(jié)果如圖所示。 這是第 次訪問該頁面7/20/202266第66頁,共80頁。例:main.jsp輸入您的姓名: 歡迎訪問站點,請到購書頁面選擇書籍 進入購書頁面 7/20/202267第67頁,共80頁。7/20/202268第68頁,共80頁。7/20/202269第69頁,共80頁。4.3.2 application對象application對象負責(zé)提供應(yīng)用程序在服務(wù)器中運行時的一些全局信息。服務(wù)器啟動時就創(chuàng)建一個application對象,不同客戶在該服務(wù)器的各個頁面之間鏈接時,共享使用同一個application對象,直到服務(wù)器關(guān)閉該對象才

29、消失。 7/20/202270第70頁,共80頁。例. 用application對象制作留言板客戶在submit.jsp中輸入姓名、留言標題和留言內(nèi)容。這些信息提交給messagePane.jsp。該頁面將客戶信息存入向量,并將向量存放在application對象中。當查看留言板時,showMessage.jsp負責(zé)從application對象中取出向量,并遍歷向量顯示其中的所有留言。7/20/202271第71頁,共80頁。 輸入您的名字: 輸入您的留言標題: 輸入您的留言: 例子:submit.jsp7/20/202272第72頁,共80頁。 例子: messagePane.jspserv

30、let中,application是當前pageContext所得到的servletContext的對象引用。 servletContext接口是Servlet中最大的一個接口,呈現(xiàn)了web應(yīng)用的Servlet視圖。ServletContext實例是通過 getServletContext()方法獲得的 7/20/202273第73頁,共80頁。 % String name=request.getParameter(peopleName); String title=request.getParameter(Title); String messages=request.getParameter(messages); if(name=null) name=guest+(int)(Math.random()*10000); if(title=null) title=無標題; if(messages=null) messages=無信息; String s=Name:+name+#+Title:+title+#+Content:+messages; sendMessage(s); out.print(您的信息已經(jīng)提交!); % 返回 例子:

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論