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)方法实现重定向。
2、HTTP文件头
(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头。
3、out对象和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对象,它们在输出数据这方面,本质上是一样的。
4、request对象和response对象的区别
(1) request对象:将客户端的数据发送到服务器端。
response对象:将服务器端的数据发送到客户端。
(2) request对象:封装了从客户端发送到服务器端的所有信息。
response对象:封装了从服务器端发送到客户端的所有信息。
5、response重定向和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():(地址重写)传递参数;
浙公网安备 33010602011771号