response的主要功能是用于服务器对客户端的回应,将web服务器处理后的结果发回给客户端,response对象
属于javax.servlet.http.HttpServletResponse接口的实例;
response对象的常用方法:
public void addCookie(Cookie cookie)---向客户端增加cookie
public void setHeader(String name,String value)---设置回应的头信息
public void sendRedirect(String location) throws IOException---页面跳转
1、设置头信息:
所有的头信息都是随着请求和回应自动发送到服务器端(客户端),在response中
一个比较常用的头信息就是刷新指令,可以完成定时刷新的功能;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head><title>这是测试</title></head>
<body>
<%!//定义全局变量
int count=0;
%>
<%
response.setHeader("refresh","2");//页面2面一刷新
%>
<h2>页面已经访问了<%=count++%>次</h2>
</body>
</html>
对于刷新的头信息,除了定时的功能外,还具备了定时跳转的功能;可以让一个页面
定时的跳转到一个指定的页面;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head><title>这是测试</title></head>
<body>
<h2>三秒后跳转到hello.html</h2>
<%
response.setHeader("refresh","3;URL=hello.html");//3秒后跳转到hello.html
%>
</body>
</html>
但是这种跳转并不是万能的,有时候根据无法进行跳转的操作----跳转完后 后退,这时就无法进行
在跳转了,解决办法:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head><title>这是测试</title></head>
<body>
<h2>三秒后跳转到hello.html,如果无法跳转请点击<a href="hello.html">这里</a></h2>
<%
response.setHeader("refresh","3;URL=hello.html");//3秒后跳转到hello.html
%>
</body>
</html>
对于这种定时跳转的头信息也可以采用html的方式进行设置,html本身也可以设置头信息:
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head>
<META HTTP-EQUIV="refresh" CONTENT="3;URL=hello.html">
</head>
<body>
<h2>三秒后跳转到hello.html,如果无法跳转请点击<a href="hello.html">这里</a></h2>
</body>
</html>
此时的跳转地址栏地址发生了变化,属于客户端的跳转;
提问:到时是使用response设置还是使用<META>设置呢?
在web中只要是包含了动态页的,都需要web容器的支持,而所有的静态页直接使用即可;
2、页面的跳转:
在response对象中提供了一个sendRedirect()方法完成跳转的功能;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head>
</head>
<body>
<%response.sendRedirect("hello.html");%>
</body>
</html>
此时已经跳转成功,而且地址栏改变了,那么这种跳转属于客户端跳转,客户端跳转
是无法传递request属性范围内容的;
问题:两种跳转的区别:
<jsp:forward>和response.sendRedirect();
如果使用<jsp:forward>跳转的话,有如下特点:
·服务器跳转,跳转之后地址栏不改变
·属于无条件跳转,执行到后立即跳转,跳转之前的语句会执行,跳转语句之后的语句不会执行;
如果是用的是response.sendRedirect():
·客户端跳转
·跳转之间和之后的语句都会被执行,即执行完所有的语句后在跳转;
3、操作cookie:
Cookie是浏览器所提供的一种技术,这种技术让服务器端的程序能将一些只须保存在客户端,
或者在客户端进行处理的数据,放在使用的计算机本身的计算机,不需要通过网络传输,因而提供
网页处理的效率,而且也能够减少服务器端的负载,但是Cookie是服务器保存在客户端的信息,所
以安全性很差;
javax.servlet.http.Cookie
在一般的站点中往往都会存在记住用户名的这样的一种操作,只是将信息保存在本机上,如果
换电脑无效;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head>
</head>
<body>
<%
Cookie c1=new Cookie("name1","lid");
Cookie c2=new Cookie("name2","yuj");
response.addCookie(c1);
response.addCookie(c2);
%>
</body>
</html>
以上表示在客户端上设置两个Cookie对象,既然可以设置了,就需要取得;
客户端每次请求的时候都会发送一个包含Cookie的头信息,所以要取得Cookie
则必须使用request对象完成;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head>
</head>
<body>
<%
Cookie c[]=request.getCookies();//取得全部Cookie
for(int i=0;i<c.length;i++){
%>
<h3><%=c[i].getName()%>----><%=c[i].getValue()%></h3>
<%
}
%>
</body>
</html>
现在来看,设置Cookie可以取得了,可是如果按照Cookie的理论来讲,
所有的Cookie都应该保存在了客户端,那么即使现在的浏览器关闭了也应该
可以继续取得;
现在为止的Cookie由于没有设置保存的时间,所有默认是 在一个浏览器上保存的;
如果此浏览器关闭Cookie消失(),那么要想真正的保存在客户端上一段时间,则必须
使用Cookie提供的setMaxAge()方法完成;
<%@ page contentType="text/html" pageEncoding="gbk"%>
<%@page import="java.util.*"%>
<html>
<head>
</head>
<body>
<%
Cookie c1=new Cookie("name1","lid");
Cookie c2=new Cookie("name2","yuj");
c1.setMaxAge(100);
c2.setMaxAge(100);
response.addCookie(c1);
response.addCookie(c2);
%>
</body>
</html>
注:换浏览器 Cookie也是无法访问到的,Cookie是保存的在浏览器上的;