博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet--HttpServletResponse运行流程及设置响应信息
阅读量:2442 次
发布时间:2019-05-10

本文共 2230 字,大约阅读时间需要 7 分钟。

HttpServletResponse概述

在Servlet API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来封装HTTP相应消息。由于HTTP相应消息分为状态行、响应消息头、消息体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。

response的运行流程

在这里插入图片描述

通过抓包工具抓取HTTP响应

在这里插入图片描述因为response代表响应,所以我们可以通过该对象分别设置Http响应的响应行,响 应头和响应体

通过response设置响应行

  • 设置相应行的状态码:
    当Servlet向客户端回送响应消息时,需要在响应消息中设置状态码。为此,在HttpServletResponse接口中,定义了两个发送状态码的方法,如下。
    1. setStatus(int status)方法:
      该方法用于设置HTTP响应消息的状态码,并生成响应状态行。由于响应状态行中的状态描述信息直接与状态码相关,而HTTP版本由服务器确定。因此,只要通过setStatus(int status)方法设置了状态码,即可实现状态行的发送。需要注意的时,正常情况下,Web服务器会默认产生一个状态码为200的状态行。
    2. sendError(int sc)方法:
      该方法用于发送表示错误信息的状态码,例如,404状态码表示找不到客户端请求的资源。在response对象中,提供了两个重载的sendError(int sc)方法,具体如下:
      public void sendError(int code) throws java.io.IOException
      public void sendErroe(int code, String message) throws java.io.IOException
      在上面两个重载的方法中,第一个方法只是发送错误信息的状态码,而第二个方法除了发送状态码外,还可以增加一条用于提示说明的文本信息,该文本信息将出现在发送给客户端的正文内容中。

通过response设置响应头

当Servlet向客户端发送响应消息时,由于HTTP协议的响应头字段有很多种,为此,在HTTPServletResponse接口中,定义了一系列设置HTTP响应头字段的方法,如下表所示:

在这里插入图片描述

需要注意的是,在上述方法中,addHeader()、serHeader()、addIntHeader()、setIntHeader()方法都是用于设置各种头字段的,而serContentType()、setLocale()和setCharacterEncoding()方法用于设置字符编码,这些设置字符编码的方法可以有效解决乱码问题。

通过response设置响应体

由于在HTTP响应消息中,大量的数据都是通过响应体传递的,因此,ServletResponse遵循以IO流传递大量数据的设计理念。在发送响应消息体时,定义了两个与输出流相关的方法,具体如下:

  1. getOutputStream()方法:
    该方法所获取的字节输出流对象为ServletOutputStream类型。由于ServletOutputStream是OutputStream的子类,它可以直接输出字节数组中的二进制数据。因此,想要输出二进制格式的响应正文,就需要使用getOutputStream()方法。
  2. getWriter()方法:
    该方法所获取的字符输出流对象为PrintWriter类型。由于PrintWriter类型的对象可以直接输出字符文本内容,因此,想要输出内容为字符文本的网页文档,需要使用getWriter()方法。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String binaryData = "binaryData"; //获取字节输出流对象 OutputStream outputStream = response.getOutputStream(); outputStream.write(binaryData.getBytes());}

浏览器访问,页面显示:

在这里插入图片描述

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String strData = "strData"; //获取字符输出流对象 response.getWriter().write(strData); }

浏览器访问,页面显示:

在这里插入图片描述
需要注意的是:虽然response对象的getOutputSteam()和getWriter()方法都可以发送响应消息体,但是 它 们 之 间 相 互 排 斥 , 不 可 以 同 时 使 用 ! \color{red}{它们之间相互排斥,不可以同时使用!} 使

转载地址:http://xnsqb.baihongyu.com/

你可能感兴趣的文章
根据什么选择一套适合自己的linux系统?(转)
查看>>
戴尔将在法国推出Linux笔记本(转)
查看>>
近9成盗版Office用户称愿投奔开源(转)
查看>>
MySQL购InnoDB不敌甲骨文宣布开放数据引擎(转)
查看>>
银行监会选红旗Linux建设公文传输系统(转)
查看>>
网上交易中帐号和密码被盗的解决途径(转)
查看>>
Java线程总结(转)
查看>>
Java学习之类的属性(转)
查看>>
轻松搞定Java内存泄漏(转)
查看>>
Java学习之值传递(转)
查看>>
linux中crontab命令(转)
查看>>
牛人请进 小弟跪求(转)
查看>>
Linux版本凌乱痛失市场(转)
查看>>
大家好,新学生。 请问怎么升级Redhat9.0 kernel 2.4.X-->2.6.18 的详细过程(转)
查看>>
FreeBSD6.1+无线+永中......桌面安装【附笔记】(转)
查看>>
adsl设置(转)
查看>>
Wii将有一个可升级的Linux操作系统(转)
查看>>
Linux机为先锋智能机和PDA06销量大(转)
查看>>
Oracle与SQL Server在企业应用中的比较(转)
查看>>
让FreeBSD使用ntpd同步时间(转)
查看>>