JSP学习笔记 05 - 内置对象response

request对象获取用户请求提交的信息,与 request对象相对应的对象是 response对象。可以用 response对象对用户的请求作出动态响应向用户端发送数据

一、动态响应contentType属性

页面用page指令设置页面的 contentType属性的值,那么JSP引擎将按照这种属性值作出响应,将页面的静态部分返回给用户,用户浏览器接收到该响应就会使用相应的手段处理所收到的信息。由于page指令只能为 contentType指定一个值来决定响应的MIME类型,如果想动态地改变这个属性的值来响应用户,就需要使用 response对象的setContentType( String s)方法来改变 contentType的属性值。该方法中的参数s可取值有:text/htmltext/plainImage/gifImage/ x-xbitmapImage/jpeg、 Image/pIpesapplication/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

其中首行叫请求行,规定了向访问的页面提交请求信息的方式,如postget等,以及请求的页面的名字和使用的通信协议
第2、3行分别是两个头( Header):hostaccept- encoding,称hostaccept-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重定向

在某些情况下响应用户时,需要将用户重新引导至另一个页面。例如,如果用户输入的表单信息不完整,就会再被引导到该表单的输入页面可以使用 responsesendRedirect( 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中找到
304get方式请求不可用
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>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值