




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、JSP九大內置對象和四種屬性范圍解讀一、四種屬性范圍1.1、在JSP中提供了四種屬性保存范圍page:在一個頁面內保存屬性,跳轉之后無效request:在一次服務請求范圍內,服務器跳轉后依然有效session:-在一次會話范圍內,無論何種跳轉都可以使用,但是新開瀏覽器無法使用application:在整個服務器上保存,所有用戶都可以使用1.2、4種屬性范圍都支持的操作java view plain copypublic void setAttribute(String name,Object value) public Object getAttribute(String name) publ
2、ic Object removeAttribute(String name) 下面,我們來對四種范圍來分別進行詳細的介紹1.3、page范圍在JSP中設置一個頁的屬性范圍,必須通過pageContext完成,PageContext屬性范圍是最重要的JSP屬性之一,但是如果使用純粹的JSP代碼開發(fā),此屬性顯示不出用處,其發(fā)揮作用在 Struts ,WebWork 中如下:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType
3、="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; chars
4、et=UTF-8"> <title>Insert title here</title> </head> <body> <% /設置page屬性范圍,此屬性只在當前JSP頁面內起作用 pageContext.setAttribute("name", "linbingwen"); pageContext.setAttribute("time", new Date(); %> 姓名:$pageS<br> 時間:$pageScope.ti
5、me<br> </body> </html> $pageS這里用了EL表達式來取得值,輸出結果如下,這里要注意發(fā)果在其它頁面使用:如下:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html
6、 PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>
7、姓名:$pageS<br> 時間:$pageScope.time<br> </body> </html> 輸出結果:這說明page范圍的值只能在本頁使用!1.4、request屬性范圍request將屬性保存在一次請求范圍之內:前提:必須使用服務器端跳轉:<jsp:forward/> 應用點:MVC設計模式、Struts、 Webwork應用實例首先是設置request:request.jsphtml view plain copy<%page import="java.util.*"%&g
8、t; <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv=&quo
9、t;Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /設置request屬性范圍 request.setAttribute("name", "linbingwen"); request.setAttribute("time", new Date(); %> <jsp:forward
10、page="requestResult.jsp"/> </body> </html> 然后是顯示requestResult.jsphtml view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBL
11、IC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 獲取req
12、uest姓名:$requestS<br> 獲取request時間:$requestScope.time<br> </body> </html> 訪問結果:這時比如requestResult1.jsp也想來訪問這兩個屬性內容和requestResult.jsp一樣:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; cha
13、rset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> &l
14、t;title>Insert title here</title> </head> <body> 獲取request姓名:$requestS<br> 獲取request時間:$requestScope.time<br> </body> </html> 結果如下,說明request只針對服務器跳轉有效,在兩次跳轉之間保存。1.5、session屬性范圍session:只要設置上去,則不管是什么跳轉,都可以取得屬性,主要用于驗證用戶是否登陸。EMAIL->用戶需要先進行登陸,登陸成功后
15、再編輯郵件。與session有關的任何打開的頁面都可以取得session比如session.jsp設置如下:html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transit
16、ional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /設置session屬性范圍 session.setAttribute
17、("name", "linbingwen"); session.setAttribute("time", new Date(); %> <a href="sessionResult.jsp">獲取session內容</a> </body> </html> 然后是取出sesson的值sessionResult.jsphtml view plain copy<%page import="java.util.*"%> <% pag
18、e language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Ty
19、pe" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 獲取session姓名:$sessionS<br> 獲取session時間:$sessionScope.time<br> </body> </html> 輸出結果:如果還有一個sessionResult1.jsp和sessionResult.jsp一樣如下html view
20、 plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"&
21、gt; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /設置request屬性范圍 session.setAttribute("name", "linbingwen"); session.setAttribut
22、e("time", new Date(); %> <a href="sessionResult.jsp">獲取session內容</a> </body> </html> 然后是取出sesson的值sessionResult.jsp <%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageE
23、ncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert titl
24、e here</title> </head> <body> 獲取session姓名:$sessionS<br> 獲取session時間:$sessionScope.time<br> </body> </html> 注意看上面的GIF動畫和這里的獲取到的時間是一樣的,這也說明了這兩個jsp頁面取得了同一個值 1.6、application屬性范圍只要設置一次,則所有的頁面窗口都可以取得數(shù)據。這里的值將會保存在服務器上,所以每一個用戶都可以看見。如下面application.jsp:html vi
25、ew plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"
26、;> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /設置request屬性范圍 application.setAttribute("name", "linbingwen"); application.s
27、etAttribute("time", new Date(); %> <a href="applicationResult.jsp">獲取application內容</a> </body> </html> 然后是applicationResult.jsphtml view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/
28、html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8&quo
29、t;> <title>Insert title here</title> </head> <body> 獲取application姓名:$applicationS<br> 獲取application時間:$applicationScope.time<br> </body> </html> 輸出結果:如果這時在新建一個網頁或新建一個新的web項目,但是它們兩個要運行在同一個Tomcat中,那么它同樣也能訪問到這個值。注意:pplication、session、request-=
30、-都與要跨多個頁,屬性保存是有內存開銷的,設置過多的application或每一個session保存過多的對象,性能就降低了。原則:能用request就不要用session,能用session就不要用applicationapplication應用:在線人員統(tǒng)計、在線人員名單列表,要釋放application資源,只能重新啟動服務器.使用application緩存數(shù)據庫的連接,每次使用時,從緩沖中取出,用完就返回。二、JSP九大內置對象詳解內置對象(又叫隱含對象,有9個內置對象):不需要預先聲明就可以在腳本代碼和表達式中隨意使用JSP內置對象映射表request 請求對象 類型 javax.s
31、ervlet.ServletRequest 作用域 Requestresponse 響應對象 類型 javax.servlet.SrvletResponse 作用域 PagepageContext 頁面上下文對象 類型 javax.servlet.jsp.PageContext 作用域 Pagesession 會話對象 類型 javax.servlet.http.HttpSession 作用域 Sessionapplication 應用程序對象 類型 javax.servlet.ServletContext 作用域 Applicationout 輸出對象 類型 javax.servlet.js
32、p.JspWriter 作用域 Pageconfig 配置對象 類型 javax.servlet.ServletConfig 作用域 Pagepage 頁面對象 類型 javax.lang.Object 作用域 Pageexception 例外對象 類型 javax.lang.Throwable 作用域 pageJSP中一共預先定義了9個這樣的對象,分別為:request、response、session、application、out、pagecontext、config、page、exception2.1、request對象request 對象是 javax.servlet.httpSer
33、vletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用于接受通過HTTP協(xié)議傳送到服務器的數(shù)據。(包括頭信息、系統(tǒng)信息、請求方式以及請求參數(shù)等)。request對象的作用域為一次請求。實現(xiàn)常有的方法1、獲取數(shù)據java view plain copygetParameter;接收請求參數(shù)的, 2、對所有數(shù)據進行再編碼java view plain copypublic byte getBytes(“encoding”) 如下實例將byte數(shù)組編碼轉換html view plain copy<% page contentType="text/html"
34、charset=gbk"%> <html> <body> <% /接收內容 String name=request.getParameter("uname"); byte b=name.getBytes("ISO8859-1"); name=new String(b); String name= new String(request.getParameter("uname").getBytes("ISO8859-1"); %> <h1>輸入內容為:&l
35、t;%=name%></h1> </body> </html> 3、設置統(tǒng)一的請求編碼java view plain copypublic void setCharacterEncoding(String env) throws UnsunpportedEncodingException 如下設置html view plain copy<% page contentType="text/html"charset=gbk"%> <html> <body> <% /接收內容 reque
36、st.setCharacterEncoding("GBK"); String name= request.getParameter("uname"); %> <h1>輸入內容為:<%=name%></h1> </body> </html> 4、獲取requst信息:html view plain copy<% page language="java" contentType="text/html; charset=UTF-8" pageEnco
37、ding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title h
38、ere</title> </head> <body bgcolor="#FFFFF0"> <form action="" method="post"> <input type="text" name="name"> <input type="submit" value="提交"> </form> 請求方式:<%=request.getMethod()%><
39、br> 請求的資源:<%=request.getRequestURI()%><br> 請求用的協(xié)議:<%=request.getProtocol()%><br> 請求的文件名:<%=request.getServletPath()%><br> 請求的服務器的IP:<%=request.getServerName()%><br> 請求服務器的端口:<%=request.getServerPort()%><br> 客戶端IP地址:<%=request.getRemot
40、eAddr()%><br> 客戶端主機名:<%=request.getRemoteHost()%><br> 表單提交來的值:<%=request.getParameter("name")%><br> </body> </html> 我們第一次訪問是默認用GET方法,表單提交后使用POST方式。2.2、response對象 response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。response對象的
41、主要使用1.設置HTTP頭信息、重定向、設置COOKie(1).Web服務器收到一個http請求,會針對每個請求創(chuàng)建一個HttpServletRequest和HttpServletResponse對象,向客戶端發(fā)送數(shù)據找HttpServletResponse,從客戶端取數(shù)據找HttpServletRequest;(2).HttpServletResponse對象可以向客戶端發(fā)送三種類型的數(shù)據:a.響應頭b.狀態(tài)碼c.數(shù)據2.2.1、response對象所提供的方法。(1)設定表頭的方法java view plain copyvoid addCookie(Cookie cookie) 新增coo
42、kie void addDateHeader(String name, long date) 新增long類型的值到name標頭 void addHeader(String name, String value) 新增String類型的值到name標頭 void addIntHeader(String name, int value) 新增int類型的值到name標頭 void setDateHeader(String name, long date) 指定long類型的值到name標頭 void setHeader(String name, String value) 指定String類型的
43、值到name標頭 void setIntHeader(String name, int value) 指定int類型的值到name標頭 containsHeader( String name )判斷指定名字的HTTP文件頭是否已經存在,然后返回真假布爾值 (2)設定響應狀態(tài)碼的方法html view plain copyvoid sendError(int sc) 傳送狀態(tài)碼(status code) void sendError(int sc, String msg) 傳送狀態(tài)碼和錯誤信息 void setStatus(int sc) 設定狀態(tài)碼 (3)用來URL 重寫(rewriting)
44、的方法html view plain copyString encodeRedirectURL(String url) 對使用sendRedirect( )方法的URL予以編碼 (4)設置重定向html view plain copysendRedirect():設置重定向頁面. 2.2.2、使用范例(1)使用response對象可以設置HTTP的頭信息。格式response.setHeader(“頭信息名稱”,”參數(shù)”),其中一個重要的頭信息:refresh(刷新)。例如,每秒刷新一次也沒,顯示刷新次數(shù):html view plain copy<%page import="j
45、ava.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <m
46、eta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <%!int i=0; %> <% /每秒刷新一次 response.setHeader("refresh","1"); %> <%=i+ %> </body> </html>
47、輸出結果如下:(2)重定向html view plain copy<%page import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/
48、html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% response.setHeader("refresh","3;URL=index.jsp") ; %>
49、三秒后跳轉!<br> 如果沒有跳轉,請按<a href="index.jsp">這里</a>! </body> </html> 來輸出結果看看:輸入http:/localhost:8080/JspLearning/responseObject1.jsp,三秒后自動跳轉到http:/localhost:8080/JspLearning/index.jsp當然還可以使用response.sendRedirect("*.jsp");命令如下:html view plain copy<%page
50、import="java.util.*"%> <% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <
51、head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% response.sendRedirect("index.jsp"); %> </body> </html> 輸出結果,直接重定向返回到首頁了,(3)設置cookiehtml view p
52、lain copy<%pagecontentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>Cookie的使用</TITLE> </HEAD> <BODY> <% Cookie c1 = newCookie("name","aaa") ; Cookie c2 = newCookie("password","111") ; / 最大保存時間為60秒
53、 c1.setMaxAge(60) ; c2.setMaxAge(60) ; / 通過response對象將Cookie設置到客戶端 response.addCookie(c1) ; response.addCookie(c2) ; %> </BODY> </HTML> (4)讀取cookiehtml view plain copy<%page contentType="text/html;charset=gb2312"%> <HTML> <HEAD> <TITLE>Cookie的使用</T
54、ITLE> </HEAD> <BODY> <% / 通過request對象,取得客戶端設置的全部Cookie / 實際上客戶端的Cookie是通過HTTP頭信息發(fā)送到服務器端上的 Cookie c = request.getCookies() ; %> <% for(int i=0;i<c.length;i+) Cookie temp = ci ; %> <h1><%=temp.getName()%> -> <%=temp.getValue()%></h1> <% %>
55、 </BODY> </HTML> 2.3、session對象session 對象是由服務器自動創(chuàng)建的與用戶請求相關的對象。服務器為每個用戶都生成一個session對象,用于保存該用戶的信息,跟蹤用戶的操作狀態(tài)。session對象內部使用Map類來保存數(shù)據,因此保存數(shù)據的格式為 “Key/value”。 session對象的value可以使復雜的對象類型,而不僅僅局限于字符串類型。(1)session(會話)對象是類javax.servlet.Httpsession的一個對象。session是從客戶端連接服務器開始,到與服務器斷開為止。(2)session對象用于保存每個
56、與服務器建立連接的客戶端的信息,session的ID保存于客戶端的Cookie中,這個session ID標識唯一和用戶,與其他用戶的session ID不同。(3)session對象的ID:當一個客戶端訪問服務器的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,并發(fā)給客戶端??蛻舳藢⑵浯鎯τ贑ookie.a其標志了一個唯一的ID;采用getID()方法返回session對象在服務器端的編號。服務器端通過此ID,唯一地識別一個用戶,并提供特殊的服務。(4)session對象的有效期:存在以下幾個情況時,session對象和其存儲的數(shù)據會消失,情況有
57、:當用戶關閉當前正在使用的瀏覽器時;關閉網頁服務器。用戶未向服務器提出請求超預設時,Tomcat服務器預設為30分鐘;運行程序結束session.出現(xiàn)以上四種情況時,session對象會消失。以下是一個簡單的session登陸實例:login.jsphtml view plain copy<% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/
58、W3C/DTD HTML 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action=
59、"login.jsp" method="post"> 用戶名:<input type="text" name="uname"><br> 密 碼:<input type="password" name="upass"><br> <input type="submit" value="登錄"> <input type="reset" value=&q
60、uot;重置"> </form> <% String name = (String)request.getParameter("uname"); String password = (String)request.getParameter("upass"); if(!(name = null | "".equals(name) | password = null | "".equals(password) if("linlin".equals(name) &am
61、p;& "123456".equals(password) /如果登錄成功,則設置session的屬性范圍 session.setAttribute("userid", name); response.setHeader("refresh","3;URL= welcome.jsp"); %> <h3>用戶登錄成功!三秒后跳轉到歡迎頁</h3> <h3>如果沒有跳轉,請按<a href="welcome.jsp">這里</a>
62、;</h3> <% else %> <h3>錯誤的用戶名或密碼!</h3> <% %> </body> </html> welcome.jsphtml view plain copy<% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-/W3C/DTD HTML
63、 4.01 Transitional/EN" "/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% /如果已經設置過了session屬性,則肯定不為空 if(session.getAttribute("userid") != null) %> <h3>歡迎<%=session.getAttribute("userid")%>登陸<a href="logout.jsp">注銷</a></h3> <% else %> <h3>請先進行本系統(tǒng)的<a href="login.jsp&qu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 王夫之與譚嗣同認識論比較研究
- 基于細粒含量和塑性指數(shù)的砂黏混合物小應變動力特性研究
- 社區(qū)消防知識教育
- 護理實習生疑難病例報告撰寫指南
- 盧梭公民教育理論
- 營養(yǎng)健康知識講座
- 車輛落戶流程
- 領獎禮儀班會課課件
- 《智能網聯(lián)整車綜合測試》課件-交叉路口通行場景測試評價
- 預防近視知識課件圖片
- 2025屆上海市普陀區(qū)高三上學期一??荚囉⒄Z試題【含答案解析】
- 如何進行高質量的護理查房
- 特征值估計技術-洞察分析
- Unit3 Weather B let's learn(說課稿)-2023-2024學年人教PEP版英語四年級下冊
- 2024年新濟南版七年級上冊生物全冊知識點
- 桶裝飲用水生產項目可行性研究報告
- 肥胖相關性腎病臨床病理及治療新進展-課件
- 裝修工程投標用技術標范文
- 港科金融碩士面試
- 《電力安全工作規(guī)程DLT408-2023》知識培訓
- 建筑工程危險源臺賬
評論
0/150
提交評論