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()%> =>> <%=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); %>