5 jsp内建对象之response

第五讲 jsp内建对象之response

 

response对象是一个javax.servlet.http.HttpServletResponse类的子类的对象
主要方法:
addCookie(Cookie cook)
addheader(String name,String value)
constrainsHeader(String name)
encodeURL()
flushBuffer()
getBufferSize()
getOutputStream()
sendError(int)
sendRedirect(String url)
setContentType(String contentType)
setHeader(String name,String value)
例子:
addCookie设置Cookie
cookie是客户端保存的一种资源,常用来自动登录网站等。
 index.jsp:
<%@page contentType="text/html;charset=gb2312"%>
<HTML>
       <HEAD>
              <TITLE>Cookie的使用</TITLE>
       </HEAD>
       <BODY>
       <%
              Cookie c1 = new Cookie("name","aaa") ;
              Cookie c2 = new Cookie("password","111") ;
 
              // 最大保存时间为60秒
              c1.setMaxAge(60) ;
              c2.setMaxAge(60) ;
 
              // 通过response对象将Cookie设置到客户端
              response.addCookie(c1) ;
              response.addCookie(c2) ;
       %>
       </BODY>
</HTML>
 
common.jsp:
<%@page contentType="text/html;charset=gb2312"%>
<HTML>
       <HEAD>
              <TITLE>Cookie的使用</TITLE>
       </HEAD>
       <BODY>
       <%
              // 通过request对象,取得客户端设置的全部Cookie
              // 实际上客户端的Cookie是通过HTTP头信息发送到服务器端上的
              Cookie c[] = request.getCookies() ;
       %>
       <%
              for(int i=0;i<c.length;i++)
              {
                     Cookie temp = c[i] ;
       %>
                     <h1><%=temp.getName()%> --> <%=temp.getValue()%></h1>
       <%
              }
       %>
       </BODY>
</HTML>
 
 
先后执行上面的两个页面,我们可以看到,客户端所保存的cookie会被服务器读取。如果超过了cookie保存时间,则第二个页面就会出错。
另外,如果上面的两个页面是在同一窗口中执行,则我们会看到JSESSIONID,这是服务设置一个默认的cookie到客户端。如果我们另外开窗口执行common.jsp,就不会看到它了,因为session的ID号只对同一窗口有效。

sendRedirect(String url)
sendRedirect()不需要直接编码URL,可以实现传递参数;
forward操作,两个页面之间可以通过request对象分享数据,而sendRedirect()方法不支持数据共享。
<jsp:forward> 通过<jsp:param>    传递参数;
response.sendRedirect则是用更直接的方式传递参数,举例:response.sendRedirect(“exam.jsp?id=28");

contentType

当请求一个JSP页面的时候,如果该页面用page指令设置页面的contentType属性的值是text/html,那么服务器将把静态页面部分发送给客户端。

也可以设置为其他一些相应类型,如:text/plain(文本文件)、application/x-msexcel(Excel文件)和application/msword(Word文件)等。
显示为Word文档
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
 <BODY>
 <P>response对象 <BR>setContentType方法
 <P>将当前页面保存为word文档吗
 <%
 response.setContentType("application/msword;charset=GB2312");
 %>
 </BODY>
</HTML>

setHeader页面自动跳转
index.jsp:
<%@page contentType="text/html;charset=gb2312"%>
<HTML>
       <HEAD>
              <TITLE>自动跳转并传参数</TITLE>
       </HEAD>
       <BODY>
       <%
              response.setHeader("refresh","3;URL=common.jsp?ref=aaa") ;
       %>
       三秒后跳转!!!<br>
       如果没有跳转,请按<a href="common.jsp">这里</a>!!!
       </BODY>
</HTML>
 
 
setHeader禁用页面缓存

在实际的项目开发工程中,往往会用到禁用缓存技术,即如果通过后退按钮回到了某一页,也必须从服务器上重新读取,例如:
 
index.jsp:
<%@page contentType="text/html;charset=gb2312" import="java.util.Date"%>
<HTML>
       <HEAD>
       <%
       response.setHeader("Cache-Control","no-cache");
       response.setHeader("Pragma","no-cache"); 
       response.setDateHeader ("Expires", 0);
       %>
              <TITLE>禁用页面缓存</TITLE>
       </HEAD>
       <BODY>
       <%
              Date d = new Date();
              out.println(d.toLocaleString());
       %>
    <a href="http://www.g.cn">google</a>
       </BODY>
</HTML>
 
    我们运行这个例子,进入google,点击后退按钮回到index.jsp时,页面代码都会被执行一次。

你可能感兴趣的:(response)