隨筆-59  評論-31  文章-0  trackbacks-0

          JSP內置對象:我們在使用JSP進行頁面編程時可以直接使用而不需自己創建的一些Web容器已為用戶創建好的JSP內置對象。如request,session,response,out等。

          下面就JSP2.0給出的9個內置對象:

           

          內置對象類型作用域
          requestjavax.servlet.http.HttpServletRequestrequest
          responsejavax.servlet.http.HttpServletResponseresponse
          pageContextjavax.servlet.jsp.PageContextpage
          sessionjavax.servlet.http.HtpSessionsession
          applicationjavax.servlet.jsp.ServletContextapplication
          outjavax.servlet.jsp.JspWriterpage
          configjavax.servlet.ServletConfigpage
          pagejava.lang.Objectpage
          exceptionjava.lang.Throwablepage

           

          我們同樣可以根據它們的作用進行分類:

          第一類:與Servlet有關:page和config

          第二類:與Input/Output有關:out,request和response

          第三類:與Context有關:application,session和pageContext

          第四類:與Error有關:exception

           

          一、屬性保存范圍

          在JSP中可以通過setAttribute()和getAttribute()這兩個方法來設置和取得屬性。從而實現數據的共享。JSP提供了四種屬性保存范圍:response,request,session和application。

          1、page:就是設置的屬性只能在當前頁面有效。通過pageContext的setAttribute()和getAttribute()。

          2、request:指屬性在一次請求范圍內有效。如果頁面從給一個頁面跳轉到另一個頁面,那么該屬性就失效了。這里所指的跳轉是指客戶端跳轉,比如客戶單擊超鏈接跳轉到其他頁面或者通過瀏覽器地址欄瀏覽其他頁面。如果使用服務器端跳轉<jsp:forward>,則該屬性仍然生效。同理使用request對象的setAttribute()和getAttribute()。

          3、session:指客戶瀏覽器與服務器一次會話范圍內,如果服務器斷開連接,那么屬性就失效了。同理通過session對象的setAttribute()和getAttribute()。session范圍的例外比如重新打開一個瀏覽器。

          4、application:指在整個服務器范圍,知道服務器停止以后才會失效。同理通過application對象的setAttribute()和getAttribute()。application范圍就是保存的屬性只要服務器不重啟,就能在任意頁面中獲取,就算重新打開瀏覽器也是可以獲取屬性的。

           

          二、移除屬性:在屬性的作用域還未到就想清除相應的屬性時,必須編程清除。即調用相應對象的removeAttribute()方法就可以移除指定屬性。

          <%@ page language="java" contentType="text/html;charset=gb2312"%> <html> <head> <title>移除屬性</title> </head> <body> <%-- 在page范圍設置屬性 --%> <% pageContext.setAttribute("name","James"); //設置屬性name,其值為James pageContext.setAttribute("age","12"); //設置屬性age,其值為12 pageContext.setAttribute("sex","男"); //設置屬性sex,其值為男 %> <%-- 移除屬性--%> <% pageContext.removeAttribute("sex"); %> <%-- 取得page范圍屬性--%> <% String strName = (String)pageContext.getAttribute("name"); //取值屬性name的值 String strAge = (String)pageContext.getAttribute("age"); //取值屬性age的值 String strSex = (String)pageContext.getAttribute("sex"); //取值屬性sex的值 out.println("page范圍:name屬性值為" + strName + "<br>"); out.println("page范圍:age屬性值為" + strAge+ "<br>"); out.println("page范圍:sex屬性值為" + strSex); %> </body> </html>

            

           

           結果頁面輸出:page范圍:name屬性值為James
                                  page范圍:age屬性值為 12

                                  page范圍:sex屬性值為 null

          三、request對象:request對象不但可以用來設置和取得request范圍變量,還可以用來獲取客戶端請求參數、請求的來源、表頭、Cookies等。

          1、request獲取客戶端請求參數方法

           

           方法返回值類型 方法說明 
           getParameter(String name)String  獲取參數名為name的參數值
           getParameterNames()Enumeration  獲取所有參數的名稱,可與上一個方法合用獲取所有參數的值
           getParameterValues(String name) String[] 獲取參數名為name的所有參數,比如參數是多個checkbox
           getParameterMap() Map 獲取所有參數封裝的Map實例,通過Map實例的String[] get("id")方法返回對應參數名為id的值數組

           

          2、request的其他方法

           

          方法返回值類型方法說明
          getHeader(String name)String獲取指定標題名稱為name的標頭
          getHeaderName()Enumeration獲取所有的標頭名稱
          getIntHeader(String name)int獲取標題名稱為name的標頭,內容以整數類型返回
          getDateHeader(String name)long獲取標題名稱為name的標頭,內容以日期類型返回
          getCookies()Cookie獲取相關的Cookie
          getContextPath()String獲取Context的路徑
          getMethod()String獲取客戶端的提交方式
          getProtocol()String獲取使用的HTTP協議
          getQueryString()String獲取請求的字符串
          getRequestSessionId()String獲取客戶端的Session ID
          getRequestURI()String獲取請求的URI
          getRemoteAddr()String獲取客戶端IP地址

           

          四、response對象:用來向客戶端傳送輸出信息。

           

          方法返回值方法說明
          addCookie(Cookie cookie)void 
          addDateHeader(String name,long date)void 
          addHeader(String name,String value)void 
          addIntHeader(String name,int value)void 
          setDateHeader(String name,long date)void 
          setHeader(String name,String value)void 
          setIntHeader(String name,int value)void 
          sendError(int sc)void傳送狀態碼
          sendError(int sc,String msg)void傳送狀態碼和錯誤信息
          setStatus(int sc)void設置狀態碼
          sendRedirect(String URL)void頁面重定向,用來實現頁面跳轉

           

          注:這里的response對象的sendRedirect(String URL)方法設置頁面重定向將改變瀏覽器地址欄信息,所以也稱客戶端跳轉。

          實例1:response對象實現頁面的自動刷新:只需要早JSP頁面中加上

          <%--使用response對象的setIntHeader設置屬性Refresh的值(單位為秒)來實現頁面自動刷新--%> <% response.addIntHeader("Refresh",10); %>

           

          實例2:實現頁面自動跳轉:可以通過response對象的setHeader()方法添加一個標題為Refresh的標頭,并制定頁面跳轉時間及跳轉頁面,從而實現頁面自動跳轉。 <% response.setHeader("Refresh","10;URL=http://www.baidu.com"); %>

            這里使用setHeader方法添加一個標題為"Refresh",值為"10,URL=http://www.baidu.com"的標頭。

           

           

          五、out對象:用來向頁面輸出信息。

           

          方法返回值類型方法說明
          clear()void清除網頁上輸出內容
          clearBuffer()void清除緩沖區內容
          close()void關閉緩沖區,清除所有內容
          getBufferSize()int取得緩沖區大小
          getRemaining()int取得緩沖區剩余大小
          isAutoFulsh()boolean獲得緩沖區是否進行自動清除的信息
          print(String str)void進行頁面輸出
          println(String str)void進行頁面輸出并換行

           

           

           

          六、session對象:用來表示用戶的會話狀況,一般用于保存用戶的各種信息,直到生命周期超時或者被認為釋放掉為止。

           

          方法返回值類型方法說明
          getId()String獲取session的ID
          getCreationTime()long獲取session的生成時間
          getLashAccessedTime()long獲取用戶最后通過session發送請求時間
          getMaxInactiveInterval()long獲取session生命周期,如果超過這個時間則失效
          invalidate()void清空session內容
          isNew()boolean判斷session是否為“新”的
          setMaxInactiveInterval()void設置session生命周期,如果超過這個時間則失效

           

          七、application對象:用來取得和設置Servlet的相關信息。

           

          方法返回值類型方法說明
          getMajorVersion()int獲取主要的Servlet API版本
          getMinorVersion()int獲取次要的Servlet API版本
          getServerInfo()String獲取服務器版本
          getMimeType()String獲取指定文件的MIME類型
          getContext()ServerContext獲取指定Local的Application context
          getRealPathString獲取指定path的絕對路徑

           

          八、pageContext對象:可以用來設置page范圍的屬性,還可以設置其他范圍屬性,不過需要指定范圍參數,同時還可以獲取其他內置對象。

           

          方法返回值方法說明
          getException()Exception獲取當前的exception內置對象
          getOut()JspWriter 
          getPage()Object 
          getRequest()ServletRequset 
          getResponse()ServletResponse 
          getServletConfig()ServletConfig 
          getServeltContext()ServletContext 
          getSession()HttpSession 
          getAttribute(String name,int scope)Object獲取指定范圍的name屬性值
          getAttributeNamesInScope(int scope)Enumeration獲取指定范圍所有屬性名稱
          getAttributesScope(String name)int獲取屬性名稱為name的屬性范圍
          removeAttribute(String name)void移除屬性名稱為name的 屬性
          removeAttribute(String name,int scope)void移除指定范圍的屬性名稱為name的 屬性
          setAttribute(String name,Object value,int scope)void設置指定范圍的name屬性
          findAttribute(String name)Object尋找所有范圍的屬性名稱為name的屬性

           

          九、page對象:page對象代表JSP轉譯后的Servlet,通過page對象可以非常方便地調用Servlet類中定義的方法。

          實例1:通過page對象調用Servlet類中定義的方法 

          <%@ page language="java" contentType="text/html;charset=gb2312"%> <%@ page info="this is the page Object Practice" %> <html> <head> <title>page對象</title> </head> <body> <%--通過page對象調用Servlet中的getServletInfo()方法 --%> <% String info = ((javax.servlet.jsp.HttpJspPage)page).getServletInfo(); %> <%=info %> </body> </html>

            

          輸出:this is the page Object Practice.

           

          十、config對象:可以用來獲取Servlet的配置信息。

           

          方法返回值類型方法說明
          getInitParameter(name)String獲取Servlet初始化參數
          getInitParameterNames()Enumeration獲取Servlet所有初始化參數名稱
          getServletContext()ServletContext獲取當前Application context
          getServletName()String獲取Servlet名稱

           

          十一、exception對象:用來處理錯誤異常,如果要用exception對象,必須指定page中的isErrorPage屬性值為true。

          實例:exception用來處理錯誤異常

          1、包含錯誤的頁面:error.jsp

          <%@ page language="java" contentType="text/html;charset=gb2312" errorPage="ExceptionDemo01.jsp"%> <html> <head> <title>錯誤頁面</title> </head> <body> <% int[] arr = {1,2,3}; out.println(arr[3]); %> </body> </html>

           

           注:error.jsp中arr[3]數組下表越界.需在page指令中指定errorPage的屬性值為相應的異常處理程序。

          2、異常處理頁面:exceptionDo.jsp

          <%@ page language="java" contentType="text/html;charset=gb2312" isErrorPage="true"%> <%@page import="java.io.PrintStream"%> <html> <head> <title>處理錯誤異常</title> </head> <body> <%=exception%><br> <%=exception.getMessage()%><br> <%=exception.getLocalizedMessage()%><br> <% exception.printStackTrace(new java.io.PrintWriter(out)); %> </body> </html>

           

           注:必須在page指令中指定屬性isErrorPage屬性值為true。也就是說這個頁面可以用于異常處理。

          將會在exceptionDo.jsp中打印出error.jsp中的數組下標越界異常 信息

          posted on 2012-01-05 16:36 RoyPayne 閱讀(18588) 評論(1)  編輯  收藏 所屬分類: jsp相關

          評論:
          # re: JSP系列四:JSP9個內置對象 2014-02-07 14:40 | struts自媒體
          這篇文章寫的不錯,我重新整理了一下,并且加深了分析,大家可以看:http://www.strutshome.com/index.php/archives/1  回復  更多評論
            
          主站蜘蛛池模板: 长汀县| 长治市| 天气| 饶阳县| 卢湾区| 思茅市| 寿宁县| 赤壁市| 横山县| 同德县| 楚雄市| 平顶山市| 丹巴县| 昌乐县| 德惠市| 正定县| 玉门市| 名山县| 桂林市| 化德县| 宜章县| 德兴市| 旬阳县| 青岛市| 息烽县| 无为县| 左贡县| 肇源县| 邻水| 二手房| 沛县| 化德县| 友谊县| 兴安县| 邛崃市| 萨迦县| 丁青县| 德州市| 神农架林区| 容城县| 北票市|