Response

第1章 响应信息的组成部分

1.1 http协议中的响应

使用浏览器开发工具查看响应 和http协议中的请求一样,响应也分成三个部分——响应行(状态行)、响应头、响应体。

第2章 response对象操作响应信息

2.1 response对象的概念

总结:HttpServletResponse对象封装了向客户端发送数据、发送响应头,发送响应状态码的方法。开发人员必须学会使用HttpServletResponse,才能给浏览器发送数据。

2.2 response操作响应行

2.2.1  响应行的组成

响应行是http响应内容的第一行。

响应行一般数据为:HTTP/1.1 200(tomcat8.5)  或者  HTTP/1.1 200 OK(tomcat7)

响应行分为三个部分: HTTP/1.1:协议版本

200:响应状态码

OK:对响应状态码的解释

2.2.2 常见的响应状态码:

302 Move temporarily 重定向,请求的资源临时从不同的 URI响应请求。
304 Not Modified  从缓存中读取数据,不从服务器重新获取数据。
403 Forbidden  服务器已经理解请求,但是拒绝执行它,一般在权限不够的时候常见。
404 Not Found  请求失败,请求所希望得到的资源未被在服务器上发现。
405 Method Not Allowed  请求行中指定的请求方法不能被用于请求相应的资源。
500 Internal Server Error  服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

以上就是我们常用的响应状态码,了解了http协议有关响应行的部分,对于response对象来说 , 只有响应状态码可以操作 , 并且我们一般也不操作状态码 。

2.2.3 API介绍

   void setStatus(int sc) 设置响应的状态代码(一般用来设置 1xx 2xx 3xx)
  void sendError(int sc) 设置响应的状态代码(一般用来设置 4xx 5xx)

注意 : 状态码的一般不需要我们手动设置

2.3 response操作响应头

2.3.1 常见的响应头介绍

响应头有很多 , 我们先来看自己大家必须知道的响应头

location :

重定向操作:通常告知浏览器马上向该地址发送请求,通常和响应码302 一起使用

refresh :

定时刷新操作 , 指定时间后跳转到指定页面

content-encoding :

设置当前数据的压缩格式,告知浏览器以何种压缩格式解压数据

content-disposition :

通知浏览器以何种方式获取数据(直接解析数据(网页,图片文本),或者以附件方式(下载文件))

content-type :

实体头部用于指示资源的MIME类型(MIME类型:用于提示当前文件的媒体类型,例如图片为 : image/png 、音频为:audio/ogg)。它的作用与传统上Windows上的文件扩展名相同。该名称源于最初用于电子邮件的MIME标准。)

注意:我们content-type常用的设置一般都是“text/html;charset=utf-8”,其中“text/html”用来设置浏览器以指定文件格式解析数据;“charset=utf-8”用来响应数据的编码表,若不需要设置编码可以不写。

2.3.2 API 介绍

 void setHeader(String name, String value)  用给定名称和值设置响应头
void sendRedirect(String location) 用类设置重定向

2.3.3 例1:使用location响应头实现跳转(重定向)

案例需求

使用location响应头实现重定向跳转淘宝主页www.taobao.com

代码实现

//urlPatterns = "/redirect"
public class RedirectServlet extends HttpServlet {
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       doGet(request, response);
   }
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //设置重定向响应头
       // response.setHeader("location","http://www.taobao.com");
       //设置状态码
       //response.setStatus(302);
       //============上面代码的简化方式======================
       response.sendRedirect("http://www.taobao.com");
   }
}

2.3.4 请求转发与请求重定向的区别

转发在一次请求中完成,重定向是两次请求

转发操作发生在服务器内部,重定向是浏览器执行操作

转发地址栏不变(只有一次请求,一个地址),重定向,地址栏变化(两次请求,两个地址)

转发可以在一次请求中共享数据,重定向不行(重定向两次请求)。

2.3.5 例2 : 3秒钟之后跳转到其他页面

案例需求

在当前页面停留3秒钟之后跳转到京东首页

代码实现

// .......
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //自动刷新操作,在3秒后跳转京东主页
   response.setHeader("Refresh"," 3;url=http://www.jd.com");
 }
}

2.4 response操作响应体

响应体页面上的要展示的html的代码了

2.4.1 API介绍

ServletOutputStream getOutputStream()  获取字节输出流
PrintWriter getWriter()  获取字符输出流

注意:两个流不能同时使用(互斥),这两个流使用完成后如果没有关闭,Servlet容器会帮我们将其关闭

例1:向浏览器输出中文数据(无乱码)

        response.setContentType("text/html;charset=utf-8");

        response.getWriter().write("你好");

例2:以附件形式下载文件

               以附件形式下载文件

例3:点击切换验证码

               点击切换验证码

第3章 servletContext

3.1 ServletContext的概述

ServletContext是一个容器(域对象)可以存储键值对数据(String key,Object value),保存在ServletContext中的数据不仅可以提供给所有的servlet使用,而且可以在整个项目范围内使用(后期的过滤器、监听器也可以使用ServletContext)。

3.2 ServletContext作为域对象

ServletContext中定义了很多方法,在javaweb阶段我最常用的就是将ServletContext作为容器(域对象)使用,因此,接下来我们要学习这个容器(域对象的)API。

3.2.1 API介绍

GenericServlet:

1. ServletContext getServletContext() 
   获取ServletContext对象

ServletContext:

1.  void setAttribute(String name, Object object)
往servletcontext容器中存入数据,name为数据名称,object为数据的值
2. Object getAttribute(String name)
   从ServletContext中获取数据,根据指定的数据名称
3. void removeAttribute(String name)
   从ServletContext中移除数据,根据指定的数据名称

3.3 ServletContext作用总结

ServletContext对象一共两个作用:

可以读取资源在当前项目中的文件位置

可以作为域对象在项目全局范围内提供共享数据

发表评论