JSP內置對象(9個內置對象):
1.PageContext javax.servlet.jsp.PageContext JSP的頁面容器
2.request javax.servlet.http.HttpServletrequest 獲取用戶的請求信息
3.response javax.servlet.http.HttpServletResponse 服務器向客戶端的迴應信息
4.session javax.servlet.http.HttpSession 用來保存每個用戶的信息
5.application javax.servlet.ServletContext 表示全部用戶的共享信息
6.config javax.servlet.ServletConfig 服務器配置信息,能夠取得初始化參數
7.out javax.servlet.jsp.jspWriter 頁面輸出
8.page java.lang.object)
9.exception java.lang.Throwable
四種屬性範圍:
page(pageContext):只在一個頁面中保存屬性。 跳轉以後無效。
request:只在一次請求中有效,服務器跳轉以後有效。 客戶端跳無效
session:再一次會話中有效。服務器跳轉、客戶端跳轉都有效。 網頁關閉從新打開無效
application:在整個服務器上保存,全部用戶均可使用。 重啓服務器後無效
注意:若是設置過多的application屬性範圍會影響服務器性能。
pageContext.PAGE_SCOPE
pageContext.REQUEST_SCOPE
pageContext.SESSION_SCOPE
pageContext.APPLICATION_SCOPE
pageContext.setAttribute("name", "liuyang", pageContext.APPLICATION_SCOPE);html
|
1.02 getProtocol() 獲取客戶使用的協議。python
|
1.03 getServletPath() 獲取客戶提交信息的頁面。web
|
1.04 getMethod() 獲取客戶提交信息的方式,get|post。數組
|
1.05 getHeade() 獲取HTTP頭文件中的accept、accept-encoding和Host的值。ruby
|
1.06 getRermoteAddr() 獲取客戶的IP地址。
|
1.07 getRemoteHost() 獲取客戶機的名稱。
|
1.08 getServerName() 獲取服務器名稱。
|
1.09 getServerPort() 獲取服務器的端口號。
|
1.10 getParameterNames() 獲取客戶端提交的全部參數的名字。
|
1.11 getHeaderNames() 取出所有頭信息。
<% Enumeration enu = request.getHeaderNames();//取出所有頭信息 while(enu.hasMoreElements()){ String name = (String)enu.nextElement(); String value = request.getHeader(name); %> <h1><%=name %>--<%=value %></h1> <% } %>
一、request對象
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象表明了客戶端的請求信息,主要用於接受經過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的做用域爲一次請求。
response 表明的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具備做用域,它只在JSP頁面內有效。
session 對象是由服務器自動建立的與用戶請求相關的對象。服務器爲每一個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操做狀態。session對象內部使用Map類來保存數據,所以保存數據的格式爲 「Key/value」。 session對象的value可使複雜的對象類型,而不只僅侷限於字符串類型。
application 對象可將信息保存在服務器中,直到服務器關閉,不然application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,相似於系統的「全局變量」。
out 對象用於在Web瀏覽器內輸出信息,而且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,能夠對數據緩衝區進行操做,及時清除緩衝區中的殘餘數據,爲其餘的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。
pageContext 對象的做用是取得任何範圍的參數,經過它能夠獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的建立和初始化都是由容器來完成的,在JSP頁面中能夠直接使用 pageContext對象。
config 對象的主要做用是取得服務器的配置信息。經過 pageConext對象的 getServletConfig() 方法能夠獲取一個config對象。當一個Servlet 初始化時,容器把某些信息經過 config對象傳遞給這個 Servlet。 開發者能夠在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。
page 對象表明JSP自己,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,相似於Java編程中的 this 指針。
exception 對象的做用是顯示異常信息,只有在包含 isErrorPage="true" 的頁面中才能夠被使用,在通常的JSP頁面中使用該對象將沒法編譯JSP文件。excepation對象和Java的全部對象同樣,都具備系統提供的繼承結構。exception 對象幾乎定義了全部異常狀況。在Java程序中,可使用try/catch關鍵字來處理異常狀況; 若是在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 對象,並把 exception 對象傳送到在page指令中設定的錯誤頁面中,而後在錯誤頁面中處理相應的 exception 對象。
JSP有九個內置對象(又叫隱含對象),不須要預先聲明就能夠在腳本代碼和表達式中隨意使用
JSP九大內置對象分爲四類:
九種對象簡介:
out對象是一個輸出流,用來向瀏覽器輸出信息,除了輸出各類信息外還負責對緩衝區進行管理。
out對象方法介紹:
方法名 |
說明 |
print或println |
輸出數據 |
newLine |
輸出換行字符 |
flush |
輸出緩衝區數據 |
close |
關閉輸出流 |
clear |
清除緩衝區中數據,但不輸出到客戶端 |
clearBuffer |
清除緩衝區中數據,輸出到客戶端 |
getBufferSize |
得到緩衝區大小 |
getRemaining |
得到緩衝區中沒有被佔用的空間 |
isAutoFlush |
是否爲自動輸出 |
request對象封裝了從客戶端到服務器發出的請求信息。
request對象方法介紹:
方法名 |
說明 |
isUserInRole |
判斷認證後的用戶是否屬於某一成員組 |
getAttribute |
獲取指定屬性的值,如該屬性值不存在返回Null |
getAttributeNames |
獲取全部屬性名的集合 |
getCookies |
獲取全部Cookie對象 |
getCharacterEncoding |
獲取請求的字符編碼方式 |
getContentLength |
返回請求正文的長度,如不肯定返回-1 |
getHeader |
獲取指定名字報頭值 |
getHeaders |
獲取指定名字報頭的全部值,一個枚舉 |
getHeaderNames |
獲取全部報頭的名字,一個枚舉 |
getInputStream |
返回請求輸入流,獲取請求中的數據 |
getMethod |
獲取客戶端向服務器端傳送數據的方法 |
getParameter |
獲取指定名字參數值 |
getParameterNames |
獲取全部參數的名字,一個枚舉 |
getParameterValues |
獲取指定名字參數的全部值 |
getProtocol |
獲取客戶端向服務器端傳送數據的協議名稱 |
getQueryString |
獲取以get方法向服務器傳送的查詢字符串 |
getRequestURI |
獲取發出請求字符串的客戶端地址 |
getRemoteAddr |
獲取客戶端的IP地址 |
getRemoteHost |
獲取客戶端的名字 |
getSession |
獲取和請求相關的會話 |
getServerName |
獲取服務器的名字 |
getServerPath |
獲取客戶端請求文件的路徑 |
getServerPort |
獲取服務器的端口號 |
removeAttribute |
刪除請求中的一個屬性 |
setAttribute |
設置指定名字參數值 |
request對象演示:
完成一個簡單的用戶註冊信息界面,將註冊信息發送到歡迎界面上。
用戶註冊界面表單設置:
<form action="do_register.jsp" method="post"> 用戶名: <input type="text" name="userName"><br> 技能: <input type="checkbox" name="skills" value="java">java <input type="checkbox" name="skills" value="python">python <input type="checkbox" name="skills" value="ruby">ruby <input type="checkbox" name="skills" value="golang">golang <br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form>
用戶註冊信息處理界面使用getParameter方法將用戶的表單信息提取出來
String name=request.getParameter("userName"); String[] skillArr=request.getParameterValues("skills");
將skillArr數組轉換成字符串:
String skills=""; if (skillArr!=null&&skillArr.length>0){ for (String skill:skillArr ) { skills=skills+skill+" "; } }
將數據使用setAttribute保存起來
request.setAttribute("userName",name); request.setAttribute("skills",skills);
使用jsp的forword指令將頁面跳轉到welcome.jsp
<jsp:forward page="welcome.jsp"></jsp:forward>
setAttribute和getAttribute用於在web組件之間共享信息
getparameter方法用於接收服務器經過set和post方法傳輸的數據
注意沒有setparameter方法
welcome.jsp頁面配置:
<html> <head> <title>技能展現界面</title> </head> <body> 信息展現界面:<br><br> <%--<%=%>這是表達式<%%>這是jsp程序處理--%> 姓名:<%=request.getAttribute("userName")%><br> 技能:<%=request.getAttribute("skills")%> </body> </html>
response對象主要用於對客戶端的請求進行迴應。
以及處理http的鏈接信息,例如設置http文件頭,設置cookie對象等。
response對象方法:
方法名 |
說明 |
addCookie |
添加一個Cookie對象 |
addHeader |
添加Http文件指定名字頭信息 |
containsHeader |
判斷指定名字Http文件頭信息是否存在 |
encodeURL |
使用sessionid封裝URL |
flushBuffer |
強制把當前緩衝區內容發送到客戶端 |
getBufferSize |
返回緩衝區大小 |
getOutputStream |
返回到客戶端的輸出流對象 |
sendError |
向客戶端發送錯誤信息 |
sendRedirect |
把響應發送到另外一個位置進行處理 |
setContentType |
設置響應的MIME類型 |
setHeader |
設置指定名字的Http文件頭信息 |
session對象:是一個jsp內置對象,它在第一個jsp被裝載時自動建立,完成會話期管理。從一個客戶打開瀏覽器並鏈接到服務器開始,到客戶關閉瀏覽器離 開這個服務器結束(或者超時),被稱爲一個會話。當一個客戶訪問一個服務器時,可能會在這個服務器的幾個頁面之間切換,服務器應當經過某種辦法知道這是一個客戶,就須要建立session對象。
http是無狀態的鏈接協議,須要使用session來存放用戶每次的登錄信息
session對象方法:
方法名 |
說明 |
getAttribute |
獲取指定名字的屬性 |
getAttributeNames |
獲取session中所有屬性名字,一個枚舉 |
getCreationTime |
返回session的建立時間 |
getId |
獲取會話標識符 |
getLastAccessedTime |
返回最後發送請求的時間 |
getMaxInactiveInterval |
返回session對象的生存時間單位千分之一秒 |
invalidate |
銷燬session對象 |
isNew |
每一個請求是否會產生新的session對象 |
removeAttribute |
刪除指定名字的屬性 |
setAttribute |
設定指定名字的屬性值 |
接下來經過一個登錄的小例子來演示下session對象的應用:
登錄表單設置:
<form action="do_login.jsp" method="post"> userName:<input type="text" name="userName"><br/> password:<input type="password" name="password"><br/> <input type="submit" value="submit"> <input type="reset" value="reset"> </form>
登錄邏輯處理界面,使用getParameter獲取到用戶名和密碼:
String userName=request.getParameter("userName"); String password=request.getParameter("password");
對用戶名和密碼進行判斷:
if (userName!=null&&password!=null){ session.setAttribute("userName",userName); response.setHeader("refresh","2;URL=welcome.jsp"); }
在歡迎界面使用getAttribute獲取當前的用戶名:
<%if(session.getAttribute("userName")!=null){%> <%--getAttribute方法是使用指定的key獲取session中的value值。獲取到的是一個object對象 在使用的時候須要根據具體的類型進行類型轉換。 這裏取出的是一個字符串,直接調用會使用他的toString方法,所以不用進行轉換--%> 歡迎 <%=session.getAttribute("userName")%> <a href="logout.jsp">註銷</a> <%}else{%> 請先登錄 <a href="login.jsp">登錄</a> <%}%>
判斷session對象是不是新建立
<%if (session.isNew()){%> <br/> <br/> 歡迎新用戶 <%}else{%> <br/> <br/> 歡迎老用戶 <%}%>
在登出界面裏清除session對象信息,並跳轉到歡迎界面中去:
session.invalidate();//清除掉session對象 response.setHeader("refresh","2;URL=welcome.jsp");
application對象表明當前的應用程序。存在於服務器的內存空間中。
應用一旦啓動便會自動生成一個application對象。若是應用沒有被關閉,
此application對象便一直會存在。直到應用被關閉
application的生命週期比session更長。
應用:
爲多個用戶共享全局信息。好比當前的在線人數等。
application對象方法:
方法名 |
說明 |
getAttribute |
獲取應用對象中指定名字的屬性值 |
getAttributeNames |
獲取應用對象中全部屬性的名字,一個枚舉 |
getInitParameter |
返回應用對象中指定名字的初始參數值 |
getServletInfo |
返回Servlet編譯器中當前版本信息 |
setAttribute |
設置應用對象中指定名字的屬性值 |
可使用application對象來實現頁面訪問次數記錄的功能:
<% Object obj=application.getAttribute("counter"); if (obj==null){ application.setAttribute("counter",new Integer(1)); out.println("該頁面被訪問了1次<br/>"); }else { int countValue=new Integer(obj.toString()); countValue++; out.println("該頁面被訪問了"+countValue+"次<br/>"); application.setAttribute("counter",countValue);//java會自動裝箱 } %>
config對象表示當前jsp程序的配置信息
通常項目中,jsp被用做模版技術,也就是位於表示層
而位於表示層的jsp文件通常是不須要配置信息的
因此此對象在jsp程序中其實不多使用
config對象是servletConfig類的一個實例。
config對象方法:
方法名 |
說明 |
getServletContext |
返回所執行的Servlet的環境對象 |
getServletName |
返回所執行的Servlet的名字 |
getInitParameter |
返回指定名字的初始參數值 |
getInitParameterNames |
返回該JSP中全部的初始參數名,一個枚舉
|
page對象有點相似與java編程中的this指針,他指向了當前jsp頁面自己。
page對象是java.lang.object類的一個實例
page對象擁有一個toString方法,下面是官方定義的方法介紹:
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 包名+類名+@+hashcode值
page對象的方法:
方法名 |
說明 |
toString |
將當前項目的信息打印出來 |
getClass |
返回當前的object類 |
hashCode |
返回page對象的hashCode值 |
equals |
用於比較對象是否與當前對象相同 |
exception對象表示jsp引擎在執行代碼時拋出的異常
若是想要使用exception對象,那麼須要配置編譯指令的isErrorPage屬性爲true
即在頁面指令中設置:<%@page isErrorPage=「true」%>
pageContetx對象是jsp頁面中全部對象功能的最大集成着。
使用他能夠訪問全部的jsp內置對象。
pageContext對象方法:
方法名 |
說明 |
forward |
重定向到另外一頁面或Servlet組件 |
getAttribute |
獲取某範圍中指定名字的屬性值 |
findAttribute |
按範圍搜索指定名字的屬性 |
removeAttribute |
刪除某範圍中指定名字的屬性 |
setAttribute |
設定某範圍中指定名字的屬性值 |
getException |
返回當前異常對象 |
getRequest |
返回當前請求對象 |
getResponse |
返回當前響應對象 |
getServletConfig |
返回當前頁面的ServletConfig對象 |
getServletContext |
返回全部頁面共享的ServletContext對象 |
getSession |
返回當前頁面的會話對象 |