用 request
对象获取用户请求提交的信息,与 request
对象相对应的对象是 response
对象。可以用 response
对象对用户的请求作出动态响应,向用户端发送数据。
一、动态响应contentType属性
页面用page
指令设置页面的 contentType
属性的值,那么JSP引擎将按照这种属性值作出响应,将页面的静态部分返回给用户,用户浏览器接收到该响应就会使用相应的手段处理所收到的信息。由于page
指令只能为 contentType
指定一个值来决定响应的MIME类型,如果想动态地改变这个属性的值来响应用户,就需要使用 response
对象的setContentType( String s)
方法来改变 contentType
的属性值。该方法中的参数s
可取值有:text/html
、text/plain
、 Image/gif
、 Image/ x-xbitmap
、 Image/jpeg
、 Image/pIpes
、 application/x-shockwave-flash
, application/vnd. ms-powerpoint
, application/vnd. ms-excel
application/msword
等。
当用 setContentType
方法动态改变了 contentType
的属性值,即响应的MIME类型, JSP引擎就会按照新的MIME类型将JSP页面的输出结果返回给用户。
- 实例
example3_10.jsp
源码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="cyan">
<p>我正在学习response对象的<br>
setContentType方法
<p>将当前页面保存为word吗?
<form action="" method="get" name="form">
<input type="submit" value="yes" name="submit"/>
</form>
<%
String str = request.getParameter("submit");
if(str == null){
str = "";
}
if(str.equals("yes")){
response.setContentType("application/msword;charset=utf-8");
}
%>
</body>
</html>
二、response的HTTP文件头
当用户访问一个页面时,会提交一个HTTP请求给JSP引擎,这个请求包括一个请求行、http头和信息体,例如:
post/example3_1.jsp/http.1.1
host:localhost:8080
accept-encoding:gzip, deflate
其中首行叫请求行,规定了向访问的页面提交请求信息的方式,如post
、get
等,以及请求的页面的名字和使用的通信协议。
第2、3行分别是两个头( Header
):host
和 accept- encoding
,称host
、 accept-encoding
是头名字,而 localhost:8080
以及gzip
, deflate
分别是两个头的值。一个典型的请求通常包含很多的头,有些头是标准的,有些和特定的浏览器有关。
同样,响应也包括一些头。 response
对象可以使用方法
addHeader(String head, String value);
或
setHeader(String head, String value);
动态添加新的响应头和头的值,将这些头发送给用户的浏览器。如果添加的头已经存在,则先前的头被覆盖。
- 实例
example3_11.jsp
源码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="cyan">
<p>现在的时间是:<br>
<%
out.println("" + new Date());
response.setHeader("Refresh", "1");
%>
</body>
</html>
三、response重定向
在某些情况下响应用户时,需要将用户重新引导至另一个页面。例如,如果用户输入的表单信息不完整,就会再被引导到该表单的输入页面可以使用 response
的 sendRedirect( URL url)
方法实现用户的重定向。
- 实例
example3_12.jsp
源码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="cyan">
<p>填写姓名:<br>
<form action="example3_12_receive.jsp" method="post" name="form">
<input type="text" name="name"/>
<input type="submit" value="确定"/>
</form>
</body>
</html>
example3_12_receive.jsp
源码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="#DDEEFF">
<%
String name = request.getParameter("name");
if(name == null || name.length() == 0){
response.sendRedirect("example3_12.jsp");
}
byte b[] = name.getBytes("ISO-8859-1");
name = new String(b,"utf-8");
%>
<b>欢迎<%= name %>来到本网页。</b>
</body>
</html>
四、response的状态行
当服务器对用户请求进行响应时,它发送的首行称为状态行。
状态行包括3位数字的状态代码和对状态代码的描述(称作原因短语)。下面列出5类状态码及其简要描述:
1yy
(1开头的3位数):主要是实验性质的。2yy
:用来表明请求成功,例如,状态代码200
可以表明已成功取得了请求的页面。3yy
:用来表明在请求满足之前应采取进一步的行动4yy
:当浏览器给出无法满足的请求时,返回该状态代码,例如404
表示请求的页面不存在。5yy
:用来表示服务器出现问题。例如,500
说明服务器内部发生错误。
一般不需要修改状态行,在出现问题时,服务器会自动响应,发送相应的状态码。我们也可以使用 response
对象的 setStatus(int n)
方法来改变响应的状态行的内容。在下面的状态代码表中列举部分:
状态代码 | 代码说明 |
---|---|
101 | 服务器正在升级协议 |
100 | 用户可以继续 |
201 | 请求成功且在服务器上创建了新的资源 |
202 | 请求已被接受但还没有处理完毕 |
200 | 请求成功 |
203 | 用户端给出的元信息不是发自服务器的 |
204 | 请求成功但没有新信息 |
205 | 用户必须重置文档视图 |
206 | 服务器执行了部分get 请求 |
300 | 请求的资源有多种表示法 |
301 | 资源已经被永久移动到新位置 |
302 | 资源已经被临时移动到新位置 |
303 | 应答可以在另外一个URL中找到 |
304 | get 方式请求不可用 |
305 | 请求必须通过代理来访问 |
400 | 请求有语法错误 |
401 | 请求需要HTTP认证 |
403 | 取得了请求但拒绝服务 |
404 | 请求的资源不可用 |
405 | 请求所用的方法是不允许的 |
406 | 请求的资源只能用请求不能接受的内容特性来响应 |
407 | 用户必须得到认证 |
408 | 请求超时 |
409 | 发生冲突,请求不能完成 |
410 | 请求的资源已经不可用 |
411 | 请求需要一个定义的内容长度才能处理 |
413 | 请求太大,被拒绝 |
414 | 请求的URL太大 |
415 | 请求的格式被拒绝 |
- 实例
example3_13.jsp
源码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="cyan">
<font size="2">
<b>点击超链接看页面是否能相应用户:</b><br>
<a href="example3_13_bird.jsp">去看看是否欢迎您</a>
</font>
</body>
</html>
example3_13_bird.jsp
源码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
response.setStatus(400);
%>
<b>"设置响应是408,所以不显示这句话";</b>
</body>
</html>