Servlet基础 HttpServletResponse 简单理解

由来

Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequestHttpServletResponse对象,从客户端取数据找HttpServletRequest,向客户端发送数据找HttpServletResponse。

HTTP 协议是基于请求-响应的协议,客户端请求一个文件,服务器对该请求进行响应。HTTP 使用 TCP 协议,默认使用 80 端口,现在使用版本为HTTP/1.1

在 HTTP 协议中,总是由主动建立连接、发送 HTTP 请求的客户端来初始化一个事务。服务器不负责连接客户端,或创建一个到客户端的回调连接(callback connection)。

每个 HTTP 请求都会有一个请求方法,HTTP1.1 中支持的方法包括,GET、POST、HEAD、OPTIONS、PUT、DELETE 和 TRACE。互联网应用中最常用的是 GET 和 POSTGET和POST区别(详情)

一个 HTTP 请求包含以下三部分:

1.请求地址(URL)

2.请求头(Request headers)

3.实体数据(Entity body)

URI 指明了请求资源的地址,通常是从网站更目录开始计算的一个相对路径,因此它总是以斜线 “/”开头的。
URL 实际上是 URI 的一种类型,请求头(header)中包含了一些关于客户端环境和请求实体(entity)的有用的信息。
每个请求头使用 CRLF(回车换行符,“\r\n”)分隔,其格式为:请求头名+英文空格+请求头值

具体如下:

在这里插入图片描述

HttpServletResponse

HttpServletResponse继承了ServletResponse接口,并提供了与Http协议有关的方法,这些方法的主要功能是设置HTTP状态码和管理Cookie。

设置响应的状态码

如图响应状态码是原谅色200,程序正常执行无异常的时候,Web服务器会默认产生一个状态码为200。另外URL路径错误的时返回状态码是404,调用servelt发生异常直接抛出返回的500错,也是web服务器默认产生的。

在这里插入图片描述

HttpServletResponse的常用方法:

addHeader(String name,String value)  //将指定的名字和值加入到响应的头信息中
encodeURL(String url)  //编码指定的URL
sendError(int sc)  //使用指定状态码发送一个错误到客户端
sendError(int sc,String msg)  //使用指定状态码和状态描述发送一个错误到客户端
setDateHeader(String name,long date  //将给出的名字和日期设置响应的头部
setHeader(String name,String value)  //将给出的名字和值设置响应的头部 eg:response.setHeader(“Refresh”,”2;url=”http://www.baidu.com”); 页面的刷新
setStatus(int sc)  //给当前响应设置状态码
getOutputStream()  //字节输出流对象
getWriter()   //字符的输出流对象
sendRedirect ()   //对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。
setContentType(String ContentType)  //设置响应的MIME类型 ,页面的设置文本类型,获取或设置输出流的 HTTP MIME 类型。
setCharacterEncoding(String charset) //告知服务器用什么方式编码解析

setStatus(int sc)通过其方便的设置给客户端响应的状态码

sendError(int sc)sendError(int sc,String msg)使用指定状态码(和状态描述)发送一个错误到客户端,会将Servlet之前写入缓冲区的数据全部清除

HTTP状态码

1xx:信息提示,这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。

2xx:成功,这类状态代码表明服务器成功地接受了客户端请求。

3xx:重定向,客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

4xx:客户端错误,发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。

5xx:服务器错误,服务器由于遇到错误而不能完成该请求。

int SC_CONTINUE = 100;
int SC_SWITCHING_PROTOCOLS = 101;
int SC_OK = 200;
int SC_CREATED = 201;
int SC_ACCEPTED = 202;
int SC_NON_AUTHORITATIVE_INFORMATION = 203;
int SC_NO_CONTENT = 204;
int SC_RESET_CONTENT = 205;
int SC_PARTIAL_CONTENT = 206;
int SC_MULTIPLE_CHOICES = 300;
int SC_MOVED_PERMANENTLY = 301;
int SC_MOVED_TEMPORARILY = 302;
int SC_FOUND = 302;
int SC_SEE_OTHER = 303;
int SC_NOT_MODIFIED = 304;
int SC_USE_PROXY = 305;
int SC_TEMPORARY_REDIRECT = 307;
int SC_BAD_REQUEST = 400;
int SC_UNAUTHORIZED = 401;
int SC_PAYMENT_REQUIRED = 402;
int SC_FORBIDDEN = 403;
int SC_NOT_FOUND = 404;
int SC_METHOD_NOT_ALLOWED = 405;
int SC_NOT_ACCEPTABLE = 406;
int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
int SC_REQUEST_TIMEOUT = 408;
int SC_CONFLICT = 409;
int SC_GONE = 410;
int SC_LENGTH_REQUIRED = 411;
int SC_PRECONDITION_FAILED = 412;
int SC_REQUEST_ENTITY_TOO_LARGE = 413;
int SC_REQUEST_URI_TOO_LONG = 414;
int SC_UNSUPPORTED_MEDIA_TYPE = 415;
int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
int SC_EXPECTATION_FAILED = 417;
int SC_INTERNAL_SERVER_ERROR = 500;
int SC_NOT_IMPLEMENTED = 501;
int SC_BAD_GATEWAY = 502;
int SC_SERVICE_UNAVAILABLE = 503;
int SC_GATEWAY_TIMEOUT = 504;
int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
状态码discribtion释义
100SC_CONTINUE(继续) 指示客户端可以继续的状态代码
101SC_SWITCHING_PROTOCOLS(切换协议) 指示服务器正在根据Upgrade标头切换协议
200SC_OK(成功)请求正常成功
201SC_CREATED(已创建)该请求已成功,并因此创建了一个新的资源
202SC_ACCEPTED(已接受)请求已经被接受以进行处理,当尚未成功
203SC_NON_AUTHORITATIVE_INFORMATION(非授权信息)服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝
204SC_NO_CONTENT(无内容)服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息
205SC_RESET_CONTENT(重置内容) 服务器成功处理了请求,且没有返回任何内容,要求请求者重置文档视图
206SC_PARTIAL_CONTENT(部分内容)服务器已经成功处理了部分 GET 请求
300SC_MULTIPLE_CHOICES(多种选择) 被请求的资源有一系列可供选择的回馈信息,每个表示都有其自己的特定位
301SC_MOVED_PERMANENTLY(永久移动)被请求的资源已永久移动到新位置,服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302SC_MOVED_TEMPORARILY(临时移动) 指示资源已暂时移动到另一个位置。重定向是临时的,客户端应当继续向原有地址发送以后的请求
302SC_FOUND(临时驻留)指示资源暂时驻留在不同的 URI 下。由于有时可能会更改重定向,因此客户端应继续使用 Request-URI 来处理未来的请求
303SC_SEE_OTHER(查看其他位置) 可以在不同的 URI 下找到对请求的响应,客户端应当采用 GET 的方式访问那个资源
304SC_NOT_MODIFIED(未修改) 自从上次请求已被允许,请求的网页(或文档内容)并没有改变。服务器返回此响应时,不会返回网页内容。
305SC_USE_PROXY(使用代理)请求者必须通过指定的代理访问所请求的资源,收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源
307SC_TEMPORARY_REDIRECT(临时重定向)请求的资源临时从不同的URI 响应请求,但请求者应继续使用原有位置来进行以后的请求
400SC_BAD_REQUEST(错误请求) 客户端发送的请求在语法上不正确
401SC_UNAUTHORIZED(未授权) 需要 HTTP 身份验证
402SC_PAYMENT_REQUIRED为了将来可能的需求而预留的状态码
403SC_FORBIDDEN(禁止)服务器理解请求但拒绝执行
404SC_NOT_FOUND(未找到)请求失败,请求所希望得到的资源未被在服务器上发现
405SC_METHOD_NOT_ALLOWED(方法禁用)请求行中指定的请求方法不能被用于请求相应的资源
406SC_NOT_ACCEPTABLE(不接受)请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体
407SC_PROXY_AUTHENTICATION_REQUIRED(需要代理授权) 与401响应类似,只不过客户端必须在代理服务器上进行身份验证
408SC_REQUEST_TIMEOUT(请求超时)客户端没有在服务器预备等待的时间内完成一个请求的发送
409SC_CONFLICT(冲突)由于和被请求的资源的当前状态之间存在冲突,请求无法完成
410SC_GONE(已删除) 被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址
411SC_LENGTH_REQUIRED(需要有效长度) 服务器拒绝在没有定义 Content-Length 头的情况下接受请求
412SC_PRECONDITION_FAILED(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个或多个先决条件
413SC_REQUEST_ENTITY_TOO_LARGE(请求实体过大)服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围
414SC_REQUEST_URI_TOO_LONG(请求的 URI 过长)请求的URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务
415SC_UNSUPPORTED_MEDIA_TYPE(不支持的媒体类型)对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝
416SC_REQUESTED_RANGE_NOT_SATISFIABLE(请求范围不符合要求)请求中包含了 Range 请求头,并且 Range 中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义 If-Range 请求头
417SC_EXPECTATION_FAILED(未满足期望值)服务器无法满足 Expect 请求标头字段指示的期望值
500SC_INTERNAL_SERVER_ERROR(服务器内部错误) 服务器遇到了不知道如何处理的情况
501SC_NOT_IMPLEMENTED(尚未实施)服务器不具备完成请求的功能,但是GET和HEAD是是要求服务器支持的,它们必定不会返回此状态码
502SC_BAD_GATEWAY(错误网关)服务器作为网关或代理,从上游服务器接收到无效的响应
503SC_SERVICE_UNAVAILABLE(服务不可用) 服务器目前无法使用(暂时过载或停机维护),无法处理请求
504SC_GATEWAY_TIMEOUT(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求
505SC_HTTP_VERSION_NOT_SUPPORTED(HTTP 版本不受支持)服务器不支持请求中所使用的HTTP协议版本

参考地址:https://blog.csdn.net/unbreakablec/article/details/87377400

参考地址:https://www.bbsmax.com/A/gGdXjNKQJ4/

设置响应消息头

在chrom调试工具中查看Response Headers信息

在这里插入图片描述

Response有对应的响应头

在这里插入图片描述

Servlet在MVC架构中是充当controller这个角色,其负责响应用户的请求和用户进行交互,从前端获取数据进行处理,给客户端一个响应,HttpServletRequest可以获取用户提交来的数据,有以下相关方法:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值