- JSP隱含物件
含這些物件方便我們使用。
隱含物件 | 類別與介面 | 說明 |
request | javax.servlet.HttpServletRequest | 取得用戶端的資料或是系統資料 |
respone | javax.servlet.HttpServletResponse | 回應伺服器處理的結果給用戶端 |
application | javax.servlet.ServletContext | |
session | javax.servlet.http.HttpSession | session物件 |
config | javax.servlet.ServletConfig | JSP轉Servlet的資料 |
page | java.lang.Object | |
pageContext | javax.servlet.jsp.PageContext | JSP頁面所儲存的資料,用此pageContext可以讀取到getException、getPage和 getSession |
exception | java.lang.Throwable | 處理例外事件的發生 |
out | javax.servlet.jsp.JspWriter | 為輸出的界面 |
(1) request物件
HttpServletRequest物件用來收集使用者的請求,如name/value、屬性資料或是串流資料
客戶端透過HTTP協定會將資料傳輸給伺服器端,而我們從客戶端所接受到的資料JSP頁
面可以利用 request物件來接收。它提供一些重要的方法:取得伺服器IP位址、設定/取得
屬性資料、或是取得請求的參數等等。
方法 | 說明 | 例子 |
Object getAttribute(String param) | 取得物件的內容值,如果不存在會回傳null | |
String getParameter(String name) | 一般只能接收字串的物件 | |
Object setAttribute(String name, Object value ) | 設定物件的內容值與名稱 | |
Enumeration getParameterNames() | 回傳所有的參數名稱 | |
String[] getParameterValues(String Name) | 回傳參數的字串陣列,通常會有陣列大多為checkbox或是多選下拉式選單等等 | |
Enumeration getAttributeNames() | 回傳所有的 | |
String getAuthType() | 身分認證方式,需要在伺服器端作環境設定才有能使用 | |
int getContentLength() | 取得使用者所傳送資料的長度,以byte為單位計算 | |
Cookie[] getCookie[] | 回傳用戶使用的cookie物件集合 | |
String getHeader(String name) | 取的標頭內容值 | |
Enueration getHeaderNames() | 回傳標頭名稱的集合 | |
String getMethod() | 取得傳送用戶端資料的方法,Get、POST、PUT等等方法 | |
String getProtocol() | 取得協定 | |
String getRemoteAddr() | 取得代理伺服器的IP位址 | |
String getServerName() | 取得網頁伺服器名稱 | |
String getServerPort() | 取得網頁伺服器埠號 | |
String getServerPath() | 取得網頁伺服器相對路徑與檔名 | |
HttpSession getSession() | 取的session物件 | |
boolean isSecure() | Server的需求是否有透過安全通道,有用為true,沒有為否 |
getAttribute()和getParameter()之間不同:
getAttribute()與setAttribute()只會在web容器內部傳遞;而getParameter()需要透過get/post傳遞。而getParameter沒有對應的setParameter方法。
EX:
<html>
<Meta http-equiv="Content-Type" Content="text/html; Charset=UTF-8">
<head></head>
<body>
<form name="form1" action="./user/jsp/information.jsp">
<label>姓名:</label><input type="text" name="username" maxlength="10" size="10" value="" /> <br/>
<label>性別:</label><input type="radio" name="sex" value="man" />男 <input type="radio" name="sex" value="women" />女<br/>
<label>興趣:</label><input type="checkbox" name="hobby" value="sport" />運動
<input type="checkbox" name="hobby" value="movice" />看電影
<input type="checkbox" name="hobby" value="music" />音樂
<input type="checkbox" name="hobby" value="book" />看書<br/>
<label> </label> <input type="submit" name="submit" value="提交" />
</form>
</body>
</html>
information.jsp
<html>
<body>
姓名:<% out.println(request.getParameter("username")); %>
<br>性別:<% out.println(request.getParameter("sex")); %>
<br>興趣:<% String hobbys[] = request.getParameterValues("hobby") ;
for(int i=0 ; i<hobbys.length;i++)
out.println(hobbys[i]+",");
%>
</body>
</html>
EX:印出標頭資訊
<table width="90%" border="1" >
<tr><td>標頭變數</td><td>內容值</td></tr>
<%
Enumeration enuHeader = request.getHeaderNames();
while(enuHeader.hasMoreElements())
{
String strName = (String) enuHeader.nextElement() ;
String value = (String) request.getHeader(strName) ;
out.println("<tr><td>"+strName+"</td>");
out.println("<td>"+value+"</td></tr>");
}
%>
(2)respone物件
HttpServletResponse介面用來回應使用者訊息用,包含傳送訊息到前端、重新轉送。
方法 | 說明 | 例子 |
boolean containsHeader(String name) | 指定標頭名稱是否存在 | |
void addHeader(String name, String value) | 新增標頭內容值 | |
void setHeader(String name, String value) | 設定物件的內容值與名稱 | |
void addIntHeader(String name ,int value) | 新增標頭內容值 | |
void setIntHeader(String name, String value) | 設定物件的內容值與名稱 | |
String getCharacterEncoding() | 取得字元編碼方式 | |
void setCharacterEncoding(String charset) | 設定字元編碼方式 | |
String getContentType() | ||
void setContentType(String type) | ||
void sendRedirect(String location) | 重新導向至指定URL | |
HttpSession getSession() | 取的session物件 | |
boolean isSecure() | Server的需求是否有透過安全通道,有用為true,沒有為否 |
sendRedirect重新導向:
常見的應用在身分認證,當我們輸入帳密錯誤時,它會自動導到錯誤的畫面,或是當我們
到未授權的網頁時,系統會先導向需要先輸入帳密。這些都是利用sendRedirect的功能。它
一開始瀏覽器會送出請求給伺服器,伺服器接收到後會轉送請求,第二次才會傳送需要轉送的網頁位址給伺服器,收到後才會送出正確的網頁給客戶端。所以它與其他轉送函式的不同是他必須透過瀏覽器才可以完成轉送的程序。
(3)Cookie處理
cookie解決網頁程式設計師資料暫存問題,它可以保留使用者資料的訊息,例如: 線上採
購商品的訊息、使用者上次登入時間等等,都可以存在Cookie中,我們主要利用response
函式完成。
先要宣告就建構子: Cookie cookie = new Cookie(String name , String value)
需要利用response隱含物件來加入到瀏覽器的Cookie
方法 | 說明 | 例子 |
void addCookie() | 加入Cookie物件 | |
Cookie[] cookie =getCookie() | 得到Cookie物件 | |
Cookie屬性
屬性 | 說明 | 例子 |
int getMaxAge() | 回傳cookie的存活時間(單位秒),無限期為-1, | int maxAge =cookie.getMaxAge() ; |
void setMaxAge(int secound) | 設定cookie的時間,單位為秒 | int month= 60*60*24*30 ; //一個月 cookie.setMaxAge(month) ; |
boolean getSecure() | 判斷是否有SSL協定,有為true,否為false | boolean isSecure = getSecure() |
void setSecure(boolean flag) | 設定SSL傳送cookie內容 | cookie.setSecute(true) ; |
(4)out物件
out物件會去實作javax.servlet.jsp.JspWriter,主要這個有兩個功能:
1.將資料輸出網頁畫面
2.控制緩衝區: 每個JSP網頁都有固定的緩衝容量,當每一次out.println()時不會立即輸出網
頁畫面,他會等到緩衝區滿或是手動response.flushBuffer()清理緩衝區,_才會輸出。
方法 | 說明 | 例子 |
void clear() | 清除緩衝區的內容,當緩衝區清空時,則丟出IOException例外 | |
void clearBuffer() | 清除緩衝區的內容,若緩衝區已被清空,不丟出IOException例外 | |
void close() | ||
void flush() | ||
int getBufferSize() | 取得緩衝區的大小KB | |
int getRemaining() | 取得緩衝區的剩餘大小KB | |
boolean isAutoFlush() | 是否會自動清除緩衝區。 | |
void newLine() | 換行字元 | |
void println(data) | 輸出資料自動換行 | |
void print(data) | 輸出資料 |
(5)application物件
系統層級的物件,此物件的生命週期為當我打開應用程式時就會生效直到應用程式關到
才會消失。
方法 | 說明 | 例子 |
void setAttribute(String name , Object value) | 設定系統層級的變數內容,無值時會回傳null | <% application.setAttribute("superuser","root)" %> |
Object getAttribute(String name) | 取得系統層級物件內容 | <% application.getAttribute("superuser") %> |
void removeAttribute(Stirng name) | 移除系統層級的物件內容 | <% application.removeAttribute("superuser") %> |
Enumeration getAttributeNames() | 取得在系統層級所有屬性的名稱陣列。 | <% Enumeration enumNames = application.getAttributeNames() while(enumNames.hasMoreElements()) { String strName = (String)enumName.nextElement() l } %> |
void log(String msg) | 指定訊息寫入Servlet日誌檔 | |
(6)session物件
主要是實作javax.servlet.http.HttpSession介面,它跟cookie的不同session的資料位置在伺
服器中,所以安全性會更高但是由於session存放在伺服器的數量有限,所以還是需要
方法 | 說明 | 例子 |
void setAttribute(String name , Object value) | 設定使用者層級的變數內容,無值時會回傳null | <% session.setAttribute("superuser","root)" %> |
Object getAttribute(String name) | 取得使用者層級物件內容 | <% session.getAttribute("superuser") %> |
void removeAttribute(Stirng name) | 移除使用者層級物件內容 | <% session.removeAttribute("superuser") %> |
Enumeration getAttributeNames() | 取得在使用者層級所有屬性的名稱陣列。 | <% Enumeration enumNames = session.getAttributeNames() while(enumNames.hasMoreElements()) { String strName = (String)enumName.nextElement() } %> |
void invalidate() | 使session物件失效 | |
(7) config物件
此物件用來抓取web.xml中的servlet的初始值,常用的方法:
方法 | 說明 | 例子 |
String getInitParameter(String name) | 取得web.xml中servlet的初始值,需要做web例外作宣告 | |
Enumeration getInitParameterNames() | ||
ServletContext getServletContext() | 取得servletContext參照 | |
String getServletName() | 取的servlet名稱 |
EX:取得初始值: getInitParameter()
web.xml
(8) pageContext物件
方法 | 說明 | 例子 |
void setAttribute(String name , Object value) | 設定屬性變 | <% pageContext.setAttribute("superuser","root)" %> |
void setAttribute(String name , Object value,int scope) | 設定屬性變數,並指定範圍 | <% pageContext.setAttribute("superuser","root)" %> |
Object getAttribute(String name) | 取得屬性變數 | <% pageContext.getAttribute("superuser") %> |
Object getAttribute(String name,int scope) | 取得屬性變數,並指定範圍 | |
void forward(String url) | 相對路徑,轉送至另一個網頁 | <% pageContext.forward("ex1.jsp") %> |
(9)exception物件
exception物件需實作java.lang.Throwable類別,一般在jsp轉譯為servlet時,並不會去實作
exception物件而是需要在下達<%@ page pageError="true" %>指令,exception物件才可以進
行存取。
- JSP網頁內物件的範圍與有效期間
方法 | 說明 | 例子 |
String getMessage() | 回傳錯誤訊息 | |
String toString() | 回傳錯誤訊息時,會加上類別名稱。 | |
application: 當伺服器生效時,它就會生效直到伺服器關掉,才會使此Application變數結
束,此變數的範圍,可以不同網頁、不同的使用者都可以讀取到此變數。
session : 為用戶建立連線時,會同時建立session物件,單一使用者讀取。生命週期
當超過seesion設定的時間或是連線中斷。
request : 為有效生命週期為客戶一次請求。
pageContext:只有在JSP網頁內才有效。
application > session > request >pageContext
留言
張貼留言