response对象

1、什么是response对象?

response 对象主要将JSP 处理请求后的结果传回到客户端。

respose对象的基类是:javax.servlet.ServletResponse;如果传输协议是http,则response对象的基类是javax.servlet.HttpServletResponse。

 

response对象提供的常用方法,如下所示:

(1) 设定contentType属性

contentType属性用来设置JSP页面的MIME类型和字符编码集,取值格式为"MIME类型"或"MIME类型;charset=字符编码集"。JSP引擎根据contentType属性,对用户的请求做出响应。

客户端收到响应后,根据contentType的值对信息做对应的处理。

response对象可以调用setContentType(String s)方法动态修改contentType属性值,JSP引擎会按照修改后的MIME类型来响应客户浏览器

 

(2) 设定HTTP响应头(HTTP文件头)

 

方法名

描述

void addCookie(Cookie cookie)

新增cookie到响应头

void addDateHeader(String name, long date)

新增long类型的值到响应头

void addHeader(String name, String value)

新增String类型的值到响应头,

name用于指定HTTP响应头的类型。

void addIntHeader(String name, int value)

新增int类型的值到响应头

void setDateHeader(String name, long date)

以指定名称和指定long类型的值设置响应头

void setHeader(String name, String value)

以指定名称和指定String类型的值设置响应头

void setIntHeader(String name, int value)

以指定名称和指定int类型的值设置响应头

(3) 设定HTTP响应行的状态码

 

方法名

描述

void sendError(int sc)

使用指定的状态码向客户端返回一个错误响应

void sendError(int sc, String msg)

使用指定的状态码和状态描述向客户端返回一个错误响应

void setStatus(int sc)

设置HTTP响应的状态行,以指定的状态码将响应返回给客户端。

 


    (4) 重定向

当服务器响应客户端请求时,将客户端请求重新引导到另一页面,称之为重定向。

例如,如果用户填写的表单信息不正确,就将客户请求重新引导到表单填写页面,继续填写数据。这个过程就是重定向。

可以使用response对象的sendRedirect(String location)方法实现重定向。

 

 

2HTTP文件头

(1) 常见HTTP文件头及其含义,如下表所示:

方法名

描述

 Allow

指定服务器支持哪些请求方法(例如:GET、POST等)

Content-Encoding

指定返回给客户端的文档的编码方式

Content-Length

指定返回给客户端的文档的大小

Content-Type

指定返回给客户端的文档的类型(例如:text/html、application/msword等)

Date

指定当前的GMT(格林威治)标准时间

Expires  

指定应该在什么时候认为文档已经过期,从而不再缓存它。

 Last-Modified

指定文档的最后修改时间

 Location

指定客户应当到哪里去提取文档

Refresh

指定浏览器应该在多少秒之后刷新文档

 

(2) 如何设置HTTP文件头

设置HTTP文件头最常用的方法是response对象的setHeader方法,该方法有两个参数,分别表示HTTP文件头的名字和值。

 

setDateHeader方法:用来设置包含日期的文件头,避免了把Java时间转换为GMT时间字符串的麻烦。

 

setIntHeadr方法:用来设置包含整数值的文件头,避免了把整数转换为字符串的麻烦。

 

setContentType方法:用来设置Content-Type文件头。

 

setContentLength方法:用来设置Content-Length头。

 

addCookie方法:用来设置一个Cookie。

 

sendRedirect方法:用来设置Location头。

 

 

3out对象和response对象的区别

(1)  out对象的基类是:javax.servlet.jsp.JspWriter 。

respose对象的基类是:javax.servlet.ServletResponse;如果传输协议是http,则response对象的基类是javax.servlet.HttpServletResponse。

 

(2) 两者对缓存区操作的比较:

输出缓存区里的数据:       out.flush()

response.flushBuffer()

 

清除缓存区里的数据:       out.clear()  或 out.clearBuffer()

response.reset()

 

设置缓存区的大小:    out对象不能设置

response.setBufferSize(int size)

 

获得缓存区的大小:    out.getBufferSize()  或 out.getRemaining()

                        response.getBufferSize()

 

(3) JSP中向客户端输出数据时,经常使用out对象,而很少直接使用response对象。

因为,使用out对象比较方便,相当于使用out对象来替代response对象。注意:out对象与response对象,它们在输出数据这方面,本质上是一样的。

 

 

4request对象和response对象的区别

(1) request对象:将客户端的数据发送到服务器端。

     response对象:将服务器端的数据发送到客户端。

 

(2) request对象:封装了从客户端发送到服务器端的所有信息。

     response对象:封装了从服务器端发送到客户端的所有信息。

 

 

5response重定向和forward跳转的区别

(1) response重定向

n  执行完页面的所有代码,再跳转到目标页面。

n  跳转到目标页面后,浏览器地址栏中的URL会改变。

n  在浏览器端重定向。

n  可以跳转到其它服务器上的页面,

例如:response.sendRedirect(“http://www.baidu.com”)

 

(2) forward跳转

n  直接跳转到目标页面,其后的代码不再执行。

n  跳转到目标页面后,浏览器地址栏中的URL不会改变。

n  在服务器端重定向。

n  无法跳转到其它服务器上的页面。

 

 


sendRedirect与<jsp:forward>形式一样,实质不同:

<jsp:forward>: 服务器跳转;不变地址;能够将request属性保存到跳转页;执行到跳转语句就立即跳转
sendRedirect():客户端跳转;变地址;  无法进行属性传递;整个页面执行后才跳转


实例比较:
<jsp:forward>: 服务器跳转--response_demo_01.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>  
<html>  
<head><title>www.jxau.edu.cn</title></head>  
<body>  
<%   System.out.println("============forward跳转前============");%>  
    <jsp:forward page="response_demo_01.jsp"/>  
<%   System.out.println("============forward跳转后============");%>  
</body>  
</html>  


(执行结果)Tomcat服务器的后台上:
============forward跳转前============
...........每隔两秒输出一句..........
============forward跳转前============


response.sendRedirect():服务器跳转--response_demo_01.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>  
<html>  
<head><title>www.jxau.edu.cn</title></head>  
<body>  
<%   System.out.println("============forward跳转前============");%>  
<%   response.sendRedirect("response_demo_01.jsp");%>  
<%   System.out.println("============forward跳转后============");%>  
</body>  
</html>  


(执行结果)Tomcat服务器的后台上:
============forward跳转前============
============forward跳转后============



跳转至此页面:--response_demo_01.jsp

  <%@ page contentType="text/html" pageEncoding="GBK"%>  
    <html>  
    <head><title>www.jxau.edu.cn</title></head>  
    <body>  
    <%!  //定义全局变量  
        int count = 0;  
    %>  
    <%  
        response.setHeader("refresh", "2"); //设置两秒刷新一次  
    %>  
        <h1>已经访问了<%=count++%>次!</h1>  
    </body>  
    </html>  

 


注意:若使用forward跳转则一定要在跳转前释放掉全部资源;在代码开发中,尤其是JDBC操作中,一定要在<jsp:forward>语句之前关闭数据库连接,否则在也无法关闭而如果数据库连接始终没有关闭,达到一定程度是将出现“数据库连接已经达到最大的异常”,此时只有重启服务器了


<jsp:forward>(更常用,结合MVC设计模式):<jsp:param>传递参数;
response.sendRedirect():(地址重写)传递参数;

 

 

 

posted @ 2014-06-10 14:52  yanbl  阅读(517)  评论(0)    收藏  举报