目录
1、response类型
2、响应格式
3、状态码
4、响应头
5、响应体
6、快捷的重定向
------------------------------------------------------------------------------------------------
服务器处理请求的流程:
服务器每次收到请求时,都会为这个请求开辟一个新的线程,然后把客户端的请求数据封装到request对象中,
服务器还会创建response对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应。
------------------------------------------------------------------------------------------------
response
1、response类型:HttpServletResponse
ServletResponse-->与协议无关的类型
HttpServletResponse-->与http协议相关的类型
2、响应格式
---------------------------------------------------------------------------------------
| * 响应首行
| * 响应头
| * 空行
| * 响应体(或称之为响应正文)
---------------------------------------------------------------------------------------
截取信息:
--------------------- 响应信息如下 -------------------------------------------------------
| HTTP/1.1 200 OK [响应首行]
| Server: Apache-Coyote/1.1
| Content-Type: text/html;charset=UTF-8
| Content-Length: 724
| Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
| Date: Wed, 25 Sep 2012 04:15:03 GMT
| [描述:这是空行]
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> [描述:以下都是响应体]
| <html>
| <head>
| <base href="http://localhost:8080/hello/">
|
| <title>My JSP 'index.jsp' starting page</title>
| <meta http-equiv="pragma" content="no-cache">
| <meta http-equiv="cache-control" content="no-cache">
| <meta http-equiv="expires" content="0">
| <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
| <meta http-equiv="description" content="This is my page">
| </head>
|
| <body>
| <form action="" method="post">
| 关键字:<input type="text" name="keyword"/>
| <input type="submit" value="提交"/>
| </form>
| </body>
| </html>
--------------------- 响应信息结束 ------------------------------------------------------
3、状态码
200表示成功、302表示重定向、404表示客户端错(访问的资源不存在)、500表示服务器端错
> sendError(int sc) --> 发送错误状态码,例如404、500
> sendError(int sc, String msg) --> 也是发送错误状态码,还可以带一个错误信息!
> setStatus(int sc) --> 发送成功的状态码,可以用来发送302
例如:response.setStatus(302);
案例:发送404错误。
例如:response.sendError(404,"资源找不到");
4、响应头
Content-Type、Refresh、Location等等.
头就是一个键值对!可能会存在一个头(一个头名,一个头值),也可能存在一个头(一个头名,多个头值!)
> setHeader(String name, String value):适用于单值的响应头,(常用!)
response.setHeader("aaa", "AAA");
> addHeader(String name, String value):适用于多值的响应头(了解)
response.addHeader("aaa", "A");
response.addHeader("aaa", "AA");
> setIntHeader(String name, int value):适用于单值的int类型的响应头(了解)
` response.setIntHeader("Content-Length", 888);
> setDateHeader(String name, long value):适用于单值的毫秒类型的响应头(了解)
response.setDateHeader("expires", 1000 * 60 * 60 * 24);
案例:
> 重定向:发送302,设置Location头!
response.sendStatus(302);
response.setHeader("Location", "/day10_1/CServlet");
> 定时刷新:设置Refresh头,你可以把它理解成,定时重定向!
response.setHeader("Refresh", "5;URL=/day10_1/EServlet");//5秒后跳转到新url地址。
> 禁用浏览器缓存:Cache-Control、pragma、expires (这三个加起来对所有浏览器都兼容)
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.setDateHeader("expires", -1);
> <meta>标签可以代替响应头:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5、响应体
通常是html、也可以是图片!
response的两个流:
* PrintWriter,用来向客户端发送字符数据!需要设置编码。
PrintWriter writer = response.getWriter();
* ServletOutputStream,用来向客户端发送字节数据。
ServletOutputStream out = resopnse.getOutputStream();
注意:两个流不能同时使用!!
案例:
* 使用PrintWriter发送字符数据
response.getWriter().print("使用PrintWriter发送字符数据!");
* 使用ServletOutputStream发送字节数据(图片),// 把一张图片读取到字节数组中
FileInputStream in = new FileInputStream("F:/F/白冰.jpg");
byte[] bytes = IOUtils.toByteArray(in);//读取输入流内容的字节到字节数组中。
response.getOutputStream().write(bytes);
6、快捷的重定向
(1)重定向:发送302,设置Location头!
response.sendStatus(302);
response.setHeader("Location", "/day10_1/CServlet");
(2)快捷的重定向:
设置302状态码、Location头!其中变化的只有Location头,所以java提供了一个快捷方法,完成重定向!
* sendRedirect(String location)方法
例如:response.sendRedirect("/day10_1/CServlet"); //重定向到"/day10_1/CServlet"
RestControllerAdvice 获取响应对象 response响应
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
windows应急响应
Windows应急响应
数据 启动项 临时文件 -
Javaweb核心响应对象
Javaweb核心响应对象
字节流 html 字符流 -
hutool response获取响应时间 response获取响应内容
现在, Java 的各种基于 Reactor 模型的响应式编程库或者框架越来越多了,像是 RxJava,Project Reactor,Vert.x 等等等等。在 Java 9, Java 也引入了自己的 响应式编程的一种标准接口,即java.util.concurrent.Flow这个类。这个类里面规定了 Java 响应式编程所要实现的接口与抽象。我们这个系列要讨论的就是Project Reac
response获取响应内容 响应式编程优点 有效 响应式编程应用场景 性能之争 响应式编程优点 阻塞式和非阻塞式udp传输 -
java 拓扑成布局算法
基于jquery.jsPlumb编写拓扑图要求:实现公司组织结构拓扑关系,可展开,可收拢;动态数据展示;叶子节点可点击;实现办法: 1 国内还有一个插件也比较简单,但是该插件只能全部展开,并不能收拢,放弃了该办法; &nb
java 拓扑成布局算法 拓扑图 js ico sed json