目录 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"
http响应用法详解--response
最新推荐文章于 2024-01-31 00:09:33 发布