03WEB初识HttpServletResponse

一、响应行

【响应行】

响应行格式:协议/版本 状态码

如: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
2
3
 //location+302 共同完成重定向  重定向到login.html图片``    
response.setHeader("location", "login.html");``     response.setStatus(302);
//可以使用一行代码替换``response.sendRedirect("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");

  1. 设置响应的数据类型(mime-type);
  2. 设置响应的数据编码(utf-8);
处理响应乱码的API
方法 说明
response.setHeader("content-type","text/html;charset=utf-8"); 设置响应头
response.setContentType("text/html;charset=utf-8"); 简写方式

【注意事项】

  1. 开发中通常使用response.setContentType("text/html;charset=utf-8");来处理响应乱码;
  2. 处理响应乱码必须书写在响应数据之前才起作用;
3.重定向

【重定向API】

方法 说明
response.setStatus(302); response.setHeader("location", "/otherServlet"); 通过设置响应状态码和响应头实现重定向
response.sendRedirect("/otherServlet"); 重定向的简写方式

【注意事项】

  1. 开发中通常使用response.sendRedirect("/otherServlet");来实现重定向。
转发和重定向的区别
区别点 转发 重定向
实现原理 服务器内部 浏览器执行
请求次数 一次 两次
浏览器地址栏地址 不变化 变为第二次请求的地址
能否共享request域 能够共享 不能共享
作用 共享request域对象 完成跳转
转发和重定向怎么选择
  1. 如果需要共享request域,必须使用转发;
  2. 如果需要将浏览器地址栏地址变为第二次请求的地址,必须使用重定向;

2.4【响应体】

方法 说明
ServletOutputStream getOutputStream() 用于向浏览器输出二进制数据。【字节流–文件下载】
java.io.PrintWriter getWriter() 用于向浏览器输出字符数据。【字符流–给浏览器响应数据】

Powered by Hexo and Hexo-theme-hiker

Copyright © 2016 - 2018 Francis的个人博客 All Rights Reserved.

UV : | PV :