JSP內(nèi)置對象包括request對象、response對象、session對象、out對象、application對象、page對象、exception對象、pageContext對象、config對象。這些對象在客戶端和服務(wù)器端交互的過程中分別完成不同的功能。
1.Request對象
Request對象是javax.servlet.http.HtupServletRequest類的實例。代表請求對象,主要用于接受客戶端通過HTTP協(xié)議連接傳輸?shù)椒?wù)器端的數(shù)據(jù)。比如表單中的數(shù)據(jù)、網(wǎng)頁地址后帶的參數(shù)等。
常用方法 方法介紹
| 方法 | 說明 |
|---|---|
| String getParameter(String name) | 返回name指定參數(shù)的參數(shù)值 |
| String[] getParameterValues(String name) | 返回包含參數(shù)name的所有值的數(shù)組 |
| void setAttribute(String,Object) | 存儲此請求中的屬性 |
| Object getAttribute(String name) | 返回指定屬性的屬性值 |
| String getContentType() | 得到請求體的MIME類型 |
| String getProtocol() | 返回請求用的協(xié)議類型及版本號 |
| String getServerName() | 返回接受請求的服務(wù)器主機名 |
| int getServerPort() | 返回服務(wù)器接受此請求所用的端口號 |
| String getCharacterEncoding() | 返回字符編碼方式 |
| void setCharacterEncoding() | 設(shè)置請求的字符編碼方式 |
| int getContentLength() | 返回請求體的長度(以字節(jié)數(shù)) |
| String getRemoteAddr() | 返回發(fā)送此請求的客戶端IP地址 |
| String getRealPath(String path) | 返回一虛擬路徑的真實路徑 |
| String request.getContextPath() | 返回上下文路徑 |
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>用戶注冊</h1>
<form name="regForm" action="request.jsp" method="get">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<td>愛好:</td>
<td><input type="checkbox" name="favorite" value="read">讀書
<input type="checkbox" name="favorite" value="music">音樂
<input type="checkbox" name="favorite" value="moive">電影
<input type="checkbox" name="favorite" value="internet">上網(wǎng)</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form>
<br>
<br>
<a href="request.jsp?username=xxx">測試URL傳參數(shù)</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<h1>request內(nèi)置對象</h1>
<%
request.setAttribute("password", "123456");
%>
用戶名:<%=request.getParameter("username")%>
<br>
愛好:
<%
if (request.getParameterValues("favorite") != null) {
String[] fav = request.getParameterValues("favorite");
for (int i = 0; i < fav.length; i++) {
out.println(fav[i] + " ");
}
}
%>
<br>
密碼:<%=request.getAttribute("password")%><br>
請求體的mime類型:<%=request.getContentType()%><br>
協(xié)議類型及版本號:<%=request.getProtocol()%><br>
服務(wù)器主機名:<%=request.getServerName()%><br>
請求的端口號:<%=request.getServerPort()%><br>
字符編碼方式:<%=request.getCharacterEncoding()%><br>
請求體的長度:<%=request.getContentLength()%><br>
返回發(fā)送請求的客戶端IP地址:<%=request.getRemoteAddr()%><br>
返回虛擬路徑的真實路徑:<%=request.getRealPath("request.jsp")%><br>
返回上下文路徑:<%=request.getContextPath()%><br>
</body>
</html>
2.Response對象
Response對象是javax.servlet.http.HttpServletResponse類的實例。代表響應(yīng)對象,主要用于向客戶端發(fā)送數(shù)據(jù)。
| 方法 | 說明 |
|---|---|
| addCookie | 添加一個Cookie對象 |
| addHeader | 添加Http文件指定名字頭信息 |
| containsHeader | 判斷指定名字Http文件頭信息是否存在 |
| encodeURL | 使用sessionid封裝URL |
| flushBuffer | 強制把當(dāng)前緩沖區(qū)內(nèi)容發(fā)送到客戶端 |
| getBufferSize | 返回緩沖區(qū)大小 |
| getOutputStream | 返回到客戶端的輸出流對象 |
| sendError | 向客戶端發(fā)送錯誤信息 |
| sendRedirect | 把響應(yīng)發(fā)送到另一個位置進行處理 |
| setContentType | 設(shè)置響應(yīng)的MIME類型 |
| setHeader | 設(shè)置指定名字的Http文件頭信息 |
<%
response.sendRedirect("login.jsp"); //重定向到登錄頁面
%>
設(shè)置頁面自動刷新
通過設(shè)置HTTP頭還可以實現(xiàn)頁面的自動刷新。
示例:使頁面每隔10秒自動刷新一次。
<%
response.setHeader("refresh", "10");
%>
定時跳轉(zhuǎn)網(wǎng)頁
通過設(shè)置HTTP頭還可以實現(xiàn)定時跳轉(zhuǎn)頁面功能。
示例:使頁面5秒后自動跳轉(zhuǎn)到指定的網(wǎng)頁。
<% response.setHeader("refresh", "5;URL=login.jsp");%>
禁用緩存
在默認(rèn)情況下,瀏覽器將會對顯示的網(wǎng)頁內(nèi)容進行緩存,這樣可以提高網(wǎng)頁的顯示速度。對于一些安全性要求比較高的網(wǎng)站,通常需要禁用緩存。
示例:通過設(shè)置HTTP頭的方式實現(xiàn)禁用緩存。
<%
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
%>
1)如果使用request.getRequestDispatcher().forward() 這種方式進行跳轉(zhuǎn)頁面,前后頁面共享一個request,存儲在request里面的數(shù)據(jù)也會一起發(fā)送過去下一個頁面, 。
2)如果用response.sendRedirect()是重新定向,前后頁面不是一個request。
你在頁面中寫的request,當(dāng)這個jsp頁面被servlet容器編譯成servlet,再生成html流,通過response輸出到前端時生命周期才算結(jié)束,你的request在編譯、執(zhí)行期間都是有效的,這次請求響應(yīng)的周期直到response.write才算結(jié)束。不要弄混淆,你寫的JSP和用戶在前端看到的并不是同一個東西,JSP只是腳本,用戶看到的是腳本解釋執(zhí)行后輸出的結(jié)果
3.Out對象
Out對象是javax.servletjspjspWriter類的實例。主要用于向客戶端瀏覽器輸出數(shù)據(jù)。
print()方法
示例:通過兩種方式向客戶端瀏覽器輸出文字。
<% out.print("數(shù)字:");%>
println()方法
println()方法也可以用于向客戶端瀏覽器輸出信息,該方法輸出內(nèi)容后,還輸出一個換行符。
示例:使用println()方法向客戶端瀏覽器輸出文字。
<pre>
<%
out.print("數(shù)字:");
out.println("1");
out.println("2");
out.println("3");
out.println("<b>4</b>");
%>
</pre>
說明:使用println()方法輸出內(nèi)容要有換行的效果,需要同時使用HTML的<pre>標(biāo)記括起來,否則無法顯示換行效果。
4.session對象
session在網(wǎng)絡(luò)中被稱為會話。由于HTTP協(xié)議是一種無狀態(tài)協(xié)議,也就是當(dāng)一個客戶向服務(wù)器發(fā)出請求,服務(wù)器接收請求,并返回響應(yīng)后,該連接就結(jié)束了,而服務(wù)器并不保存相關(guān)的信息。為了彌補這一缺點,HTTP協(xié)議提供了session。通過session可以在應(yīng)用程序的Web頁面間進行跳轉(zhuǎn)時,保存用戶的狀態(tài),使整個用戶會話一直存在下去,直到關(guān)閉瀏覽器。但是,如果在一個會話中,客戶端長時間不向服務(wù)器發(fā)出請求,session對象就會自動消失。這個時間取決于服務(wù)器,例如,Tomcat服務(wù)器默認(rèn)為30分鐘。不過這個時間可以通過編寫程序進行修改。
| 方法 | 說明 |
|---|---|
| setAttribute(String name Object value) | 該方法用于將信息保存到session范圍內(nèi)。 |
| Object getAtribute(String name) | 該訪法用于獲取session信息,返回值為Object類型。 |
| removeAttribute(String name) | 移除session對象。 |
| invalidate() | 銷毀session對象。 |
| long getL astAccessedTime() | 返回客戶端最后- -次與會話相關(guān)聯(lián)的請求時間。 |
| int getMaxinactiveInterval() | 以秒為單位返回一個會話內(nèi)兩次請求最大時間間隔。 |
| setMaxinactiveInterval(int interval) | 以秒為單位設(shè)置session的有效時間。 |
| long getCreationTime() | 返回session對象被創(chuàng)建的時間,以毫秒為單位,從1970年1月1號凌晨開始算起。 |
| String getld) | 返回session對象的ID。 |
| boolean isNew() | 返回是否為- -個新的客戶端,或者客戶端是否拒絕加入session. |
<%
session.setAttribute("userName", "admin"); //保存session對象
String userName = session.getAttribute("userName").toString(); //獲取session對象
%>
5.Application對象
Application對象是javax.servlet.ServletContext類的實例。主要用于保存用戶信息,代碼片段的運行環(huán)境;它是一個共享的內(nèi)置對象,即一個容器中的多個用戶共享一個application對象,故其保存的信息被所有用戶所共享。
| 方法 | 說明 |
|---|---|
| String getInitParameter(String name) | 獲取已命名的應(yīng)用程序初始化參數(shù)值。 |
| Enumeration<String> getInitParameterNames() | 獲取所有已定義的應(yīng)用程序初始化參數(shù)名的枚舉。 |
| Enumeration<String> getAttributeNames() | 獲取所有application對象使用的屬性名。 |
| Object getAttribute(String name) | 從application對象中獲取指定對象名。 |
| void setAttribute(String key,Object obj) | 使用指定名稱和指定對象在application對象中進行關(guān)聯(lián)。 |
| void removeAttribute(String name) | 從application對象中去掉指定名稱的屬性。 |
6.PageContext對象
PageContext對象是javax.servlet.jsp.PageContext類的實例。用來管理網(wǎng)頁屬性,為JSP頁面包裝頁面的上下文,管理對屬于JSP中特殊可見部分中已命名對象的訪問,它的創(chuàng)建和初始化都是由JSP容器來完成的。
| 方法 | 說明 |
|---|---|
| forward(String relativeUrlPath) | 把頁面轉(zhuǎn)發(fā)給另一個頁面。 |
| getAttribute(String name) | 獲取參數(shù)值。 |
| getAttributeNamesInScope(int scope) | 獲取某范圍的參數(shù)名稱的集合。 |
| getException() | 獲取exception對象。 |
| getRequest() | 獲取request對象。 |
| getResponse() | 獲取response對象。 |
| getSession() | 獲取session對象。 |
| getOut() 獲取out對象。 | |
| setAttribute(String name,Object value) | 為指定范圍內(nèi)的屬性設(shè)置屬性值。 |
| removeAttribute(String name) | 刪除指定范圍內(nèi)的指定對象。 |
7.Config對象
config對象主要用于取得服務(wù)器的配置信息。當(dāng)一個Servlet初始化時,容器把某些信息通過config對象傳遞給這個Servlet。開發(fā)者可以在web.xml文件中為應(yīng)用程序環(huán)境中的Servlet程序和JSP頁面提供初始化參數(shù)。
config對象的常用方法如下:
| 方法 | 說明 |
|---|---|
| getServletContext() | 獲取Servlet上下文。 |
| getServletName() | 獲取Servlet服務(wù)器名。 |
| getInitParameter(String name) | 獲取服務(wù)器所有初始化參數(shù)名稱。 |
| getInitParameterNames() | 獲取服務(wù)器中name參數(shù)的初始值。 |
8.Page(相當(dāng)于this)對象
Page對象是javax.servlet.jsp.HttpJspPage類的實例。用來處理JSP網(wǎng)頁,它指的是JSP頁面對象本身,或者說代表編譯后的servlet對象,只有在JSP頁面范圍之內(nèi)才是合法的。
| 方法 | 說明 |
|---|---|
| getClass() | 返回當(dāng)前Object的類。 |
| hashCode() | 返回該Object的哈希代碼。 |
| toString() | 把該Object類轉(zhuǎn)換成字符串。 |
| equals(Object obj) | 比較該對象和指定的對象是否相等。 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>page對象各方法的應(yīng)用</title>
<meta name="author" content="">
</head>
<body>
<%! Object object; //聲明一個Object型的變量 %>
<ul>
<li>getClass()方法的返回值:<%=page.getClass()%></li>
<li>hashCode()方法的返回值:<%=page.hashCode()%></li>
<li>toString()方法的返回值:<%=page.toString()%></li>
<li>與Object對象比較的返回值:<%=page.equals(object)%></li>
<li>與this對象比較的返回值:<%=page.equals(this)%></li>
</ul>
</body>
</html>
9.Exception對象
Exception對象是java.lang.Throwable類的實例。處理JSP文件執(zhí)行時發(fā)生的錯誤和異常只有在JSP頁面的page指令中指定isErrorPage=“true”后,才可以在本頁面使用exception對象。
| 方法 | 說明 |
|---|---|
| getMessage() | 返回exception對象的異常信息字符串。 |
| getLocalizedMessage() | 返回本地化的異常錯誤。 |
| toString() | 返回關(guān)于異常錯誤的簡單信息描述。 |
| fillInStackTrace() | 重寫異常錯誤的棧行軌跡。 |
JSP四大作用域:
| 范圍 | 說明 |
|---|---|
| pageContext范圍 | 只在一個頁面保留數(shù)據(jù)(javax.servlet.jsp.PageContext(抽象類)) |
| request范圍 | 只在一個請求中保存數(shù)據(jù)(javax.servlet.httpServletRequest) |
| Session范圍 | 在一個瀏覽器范圍在一次會話中保存數(shù)據(jù),僅供單個用戶使用(javax.servlet.http.HttpSession) |
| Application范圍 | 在整個服務(wù)器中保存數(shù)據(jù),全部用戶共享(javax.servlet.ServletContext) |