JSP response的使用

response 表示服务器端对客户端的回应。

response最常用的三种操作是:设置头信息,跳转,Cookie

response中的主要方法:

No方法名描述
1Public void setHeader(String name,String value)设置头信息的名字和内容
2Public void sendRedirect(String location )throws IOException跳转,由一个页面跳转到另外一个页面
3Public void addCookie(Cookie cookie)向客户端加入Cookie
4Public 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方法类型描述
1Public Cookie(String name,String value)构造实例化Cookie对象,传入名称和内容
2Public String getName()普通取得Cookie的名字
3Public void setValue(String newValue)普通修改内容
4Public 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);
%>

转载于:https://my.oschina.net/csmw00/blog/678290

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值