JSP response的使用

response 表示服務器端對客戶端的迴應。html

response最經常使用的三種操做是:設置頭信息,跳轉,Cookiejava

response中的主要方法:數據庫

No 方法名 描述
1 Public void setHeader(String name,String value) 設置頭信息的名字和內容
2 Public void sendRedirect(String location )throws IOException 跳轉,由一個頁面跳轉到另一個頁面
3 Public void addCookie(Cookie cookie) 向客戶端加入Cookie
4 Public void setContentType(String type) 設置內容的返回類型

##1.頭信息瀏覽器

###1.1 什麼是頭信息服務器

頭信息就是隨着具體的內容一塊兒提交到服務器端,或者從服務器端隨着內容一塊兒發送到客戶端上來的。cookie

固然,在JSP中能夠直接經過request對象,取得所有的頭信息。jsp

取得所有頭信息的名字:ui

public java.util.Enumeration getHeaderNames()

取得每個頭信息的內容:code

public String getHeader(String name)

例子:htm

<%@page contentType="text/html;charset=gbk"%>
<%@page import="java.util.*"%>
<%
	//取得所有的頭信息名稱
	Enumeration e = request.getHeaderNames();
	while(e.hasMoreElements()){
		String name=(String)e.nextElement();
		%>
			<h2>
				<%=name%>=>> <%=request.getHeader(name)%>
			</h2>
		<%
	}
%>

###1.2 設置頭信息

以上的頭信息屬於HTTP本身提交過的,可是用戶也能夠本身手工進行頭信息的設置,迴應給客戶端,可是由於頭信息很是多,因此最有用處的頭信息就是按期刷新,則頭信息的名稱成爲refresh。 例子:

<%!
	int temp=0;
%>
<%
	//每隔1秒刷新頁面
	response.setHeader("refresh" , "1");
%>
<%=temp++%>

通常刷新的頻率是2秒一刷新 定時刷新通過適當的設置,也能夠完成定時跳轉功能。可讓一個頁面通過多少秒以後,跳轉到其餘的頁面。

例子:

<%
	//2秒後跳轉到其餘頁面
	response.setHeader("refresh","2;URL=getHeader.jsp");
%>
<h1>本頁面2秒後跳回到首頁</h1>
<h2>若是沒有跳轉,請按<a href="getHeader.jsp" >這裏</a></h2>

定時跳轉以後,頁面的地址被改變了,因此此跳轉稱爲客戶端跳轉。

注:

  • 凡是跳轉以後地址沒有改變,內容改變了,稱爲服務器端跳轉。
  • 凡是跳轉以後,地址改變了,稱爲客戶端跳轉。

使用靜態也實現跳轉功能

<meta http-equiv="refresh" content="2;URL=getHeader.jsp" />
<h2>本頁面2秒以後跳轉會首頁</h2>
<h2>若是沒有跳轉,請按<a href="getHeader.jsp">這裏</a></h2>

以上兩種方式完成的效果都是同樣的,沒有任何的區別,可是若是有些頁面中只是須要跳轉的話,將其聲明爲動態頁,則確定執行速度不如靜態頁快,那麼此時就可使用第二種設置頭信息的方式完成。

##2.跳轉

###1.客戶端跳轉

在response對象中提供了專門的跳轉執行,使用sendRedirect()就能夠完成。 例子:

<%
//跳轉到其餘頁
response.sendRedirect("getHeader.jsp");
%>

能夠發現,以上完成了跳轉的功能,並且地址欄已經被改變,因此此跳轉稱爲客戶端跳轉。

此種跳轉依然能夠經過地址重寫的方式向跳轉頁傳遞參數 例子:

<%	response.sendRedirect("sendRedirect03.jsp?msg=hello world!"); %>

###2.兩種跳轉的區別

服務器端跳轉:

<jsp:forward >

客戶端跳轉 :

response.sendRedirect()、setHeader()

例子:response.sendRedirect()

<%@page contentType="text/html;charset=gb2312"%>
<%
	System.out.println("response跳轉前");
	request.setAttribute("name","cs");//設置一個屬性
	response.sendRedirect("response06.jsp?ref=hello world!"); 	//跳轉(客戶端)
%>
<%	System.out.println("response跳轉後"); %>

例子:<jsp:forward >

<%@page contentType="text/html;charset=gbk"%>
<%
	System.out.println("跳轉前");
	request.setAttribute("name","cs");
%>
<jsp:forward page="response06.jsp" >
	<jsp:param name="ref" value="hello world!" />
</jsp:forward>
<%	System.out.println("跳轉後"); %>

Response跳轉的特色:全部頁面執行完以後再進行跳轉,可是不能傳遞request範圍的屬性。 Forward屬於無條件的跳轉,只要執行到此語句以後則馬上跳轉,可是能夠傳遞request屬性。 通過比較以後,能夠總結出如下的一個應用問題:

若是如今一個頁面中使用了JDBC,則應該在forward跳轉以前關閉數據庫鏈接,而使用response則能夠在任意的位置處關閉。

##3.Cookie

###1.Cookie的基本使用

No 方法 類型 描述
1 Public Cookie(String name,String value) 構造 實例化Cookie對象,傳入名稱和內容
2 Public String getName() 普通 取得Cookie的名字
3 Public void setValue(String newValue) 普通 修改內容
4 Public void setMaxAge(int expiry) 普通 Cookie的最大保留時間

若是想要設置Cookie,則確定要使用response對象。

###2.向客戶端增長Cookie

例子:

<%@page contentType="text/html;charset=gb2312"%>
<%
	//準備號了兩個Cookie
	Cookie c1 = new Cookie("username","cs");
	Cookie c2 = new Cookie("userpwd" ,"cs");
	//經過response設置到客戶端上去
	response.addCookie(c1);
	response.addCookie(c2);
%>

若是要想取得Cookie,則必須依靠request傳遞,客戶端在每次提交的時候,都會將Cookie做爲頭信息一次性的提交過去,因此使用request對象中的如下方法。

public Cookie[ ] getCookies()

例子:

<%
	//取得所有設置的Cookie對象
	Cookie c[]=request.getCookies();
	for(Cookie i : c){
		
		%>
		<h2><%=i.getName()%>&nbsp;=>>&nbsp;<%=i.getValue()%> </h2>
		<%
	}
%>

###3.深刻研究

既然Cookie是保存在客戶端上的一組信息,那麼就意味着,瀏覽器關閉以後依然能夠取得Cookie。 發現出現錯誤的地方是沒有取得客戶端設置的Cookie,由於一個Cookie在默認狀況下只能保存在當前所打開的瀏覽器之中。而若是如今但願其真正保存在本地的話,則必須將其的保存時間進行設置。

Public void setMaxAge(int expiry)

例子:設置時間

<%@page contentType="text/html;charset=gb2312"%>
<%
	//準備號了兩個Cookie
	Cookie c1 = new Cookie("username","cs");
	Cookie c2 = new Cookie("userpwd" ,"cs");
	c1.setMaxAge(20);
	c2.setMaxAge(60);
	//經過response設置到客戶端上去
	response.addCookie(c1);
	response.addCookie(c2);
%>
相關文章
相關標籤/搜索