JSP內(nèi)置對象

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] + "&nbsp;&nbsp;");
            }
        }
    %>
    <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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容