一、响应行
【响应行】
响应行格式:协议/版本 状态码
如:HTTP/1.1 200 ;
常见状态码:
状态码 | 状态码描述 | 说明 |
---|---|---|
200 | OK | 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。 |
302 | Move temporarily | 重定向,请求的资源临时从不同的 URI响应请求。 |
304 | Not Modified | 从缓存中读取数据,不从服务器重新获取数据 |
404 | Not Found | 请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。 |
403 | Forbidden | 服务器已经理解请求,但是拒绝执行它 |
405 | Method Not Allowed | 请求行中指定的请求方法不能被用于请求相应的资源 |
500 | Internal Server Error | 服务器内部错误。通常程序抛异常 |
【响应头】
响应头也是用的键值对key:value,服务器基于响应头通知浏览器的行为。
常见的响应头 :
响应头Key | 响应头value |
---|---|
location | 指定响应的路径,需要与状态码302配合使用,完成跳转。 |
content-Type | 响应正文的类型(MIME类型)例如:text/html;charset=UTF-8 |
content-disposition | 通过浏览器以附件形式解析正文,例如:attachment;filename=xx.zip |
refresh | 页面刷新,例如:3;url=www.qiezi.cn //三秒刷新页面到www.qiezi.com |
【响应体】
响应体,就是服务器发送给浏览器的数据。当前请求的资源是hello.html,所以浏览器响应的数据是一个html页面。
二、HttpServletResponse对象
HttpServletResponse对象代表服务器响应,tomcat创建HttpServletResponse对象,并将该对象作为参数传递给servlet的service方法。
这个对象的作用:
设置响应行、头、体
下面,就这几方面对HttpServletResponse对象的常用API进行详细讲解:
2、HttpServletResponse对象常用API
2.1【响应行】
响应行:协议/版本 如:HTTP/1.1 200 。这里边的信息,我们通常只会用到状态码,操作状态码的方法setStatus(int code);
方法 | 说明 |
---|---|
setStatus(int code) | 向浏览器发送状态码 |
练习服务器重定向
1 | //location+302 共同完成重定向 重定向到login.html图片`` |
对应的状态码响应状态码常量 | 说明 |
---|---|
200 | 响应成功 |
404 | 资源路径错误或资源被删除 |
500 | 服务器内部错误 |
302 | 重定向 |
2.2 【响应头】
方法 | 说明 |
---|---|
setHeader(String name,String value) | 设置响应头信息 |
1 | 给浏览器设置响应头:Content-Disposition 告诉浏览器以附件的形式打开这个文件response.setHeader("Content-Disposition","attachment;filename="+fileName); |
【常见响应头】
响应头Key | 响应头value |
---|---|
refresh | 页面刷新,例如:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn |
content-type | 设置响应数据的类型(MIME类型)和编码格式 例如:text/html;charset=UTF-8 |
location | 指定响应的路径,需要与状态码302配合使用,完成重定向。 |
content-disposition | 通过浏览器以附件形式解析正文,例如:attachment;filename=xx.zip。 |
2.处理响应乱码
乱码产生的原因
服务器如果需要响应给浏览器中文数据,tomcat使用getWriter()
输出字符时,对于中文需要进行编码处理,而tomcat8 默认编码是ISO-8859-1
,该码表是不支持中文编码的。所以响应给浏览器,出现乱码。
响应乱码解决方案
因为HttpServlerResponse
实现类是由tomcat服务器提供的。所以服务器在向浏览器输出数据之前,对于中文要采用支持中文的编码进行编码,通过response.setContentType("text/html;charset=utf-8");
:
- 设置响应的数据类型(mime-type);
- 设置响应的数据编码(utf-8);
处理响应乱码的API
方法 | 说明 |
---|---|
response.setHeader("content-type","text/html;charset=utf-8"); |
设置响应头 |
response.setContentType("text/html;charset=utf-8"); |
简写方式 |
【注意事项】
- 开发中通常使用
response.setContentType("text/html;charset=utf-8");
来处理响应乱码; - 处理响应乱码必须书写在响应数据之前才起作用;
3.重定向
【重定向API】
方法 | 说明 |
---|---|
response.setStatus(302); response.setHeader("location", "/otherServlet"); |
通过设置响应状态码和响应头实现重定向 |
response.sendRedirect("/otherServlet"); |
重定向的简写方式 |
【注意事项】
- 开发中通常使用
response.sendRedirect("/otherServlet");
来实现重定向。
转发和重定向的区别
区别点 | 转发 | 重定向 |
---|---|---|
实现原理 | 服务器内部 | 浏览器执行 |
请求次数 | 一次 | 两次 |
浏览器地址栏地址 | 不变化 | 变为第二次请求的地址 |
能否共享request域 | 能够共享 | 不能共享 |
作用 | 共享request域对象 | 完成跳转 |
转发和重定向怎么选择
- 如果需要共享request域,必须使用转发;
- 如果需要将浏览器地址栏地址变为第二次请求的地址,必须使用重定向;
2.4【响应体】
方法 | 说明 |
---|---|
ServletOutputStream getOutputStream() | 用于向浏览器输出二进制数据。【字节流–文件下载】 |
java.io.PrintWriter getWriter() | 用于向浏览器输出字符数据。【字符流–给浏览器响应数据】 |