response 表示服务器端对客户端的回应。
response最常用的三种操作是:设置头信息,跳转,Cookie
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 什么是头信息
头信息就是随着具体的内容一起提交到服务器端,或者从服务器端随着内容一起发送到客户端上来的。
当然,在JSP中可以直接通过request对象,取得全部的头信息。
取得全部头信息的名字:
public java.util.Enumeration getHeaderNames()
取得每一个头信息的内容:
public String getHeader(String name)
例子:
<%@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);
%>