http响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http响应相关的知识,希望对你有一定的参考价值。
http响应包含:响应行,响应头,一个空行,实体内容。
响应行:HTTP/1.1 200 OK
#http协议版本
#状态码 服务器处理请求的结果(状态)
200 成功接收并完美处理
302,304,307 未完成请求,客户需要进一步细化请求
404 客户端的请求有错误
500 服务器端出现错误
#状态描述 对前面的状态码进行描述。
服务器把响应信息封装到HttpServletResponse对象中,所以要改变响应的内容,只需要在servlet中操作该对象即可。
HttpServletResponse对象修改响应信息:
响应行:response.setStatus();设置状态码
设置响应头:response.setHeader("name","value");
设置实体内容:response.getWriter().write();发送字符实体内容
response.getOutputStream().write();发送字节实体内容
1 @WebServlet("/ResponseDemo1") 2 public class ResponseDemo1 extends HttpServlet { 3 /** 4 * 设置响应信息 5 */ 6 7 /** 8 * 1.在调用doGet方法之前,tomcat服务器已经把请求信息封装到HttpServletResponse对象中 9 * 2.tomcat服务器调用doGet方法,传入request,response对象 10 */ 11 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 12 /** 13 *3. 通过response对象改变响应信息 14 */ 15 16 /** 17 * 3.1响应行 18 */ 19 //response.setStatus(404);//修改状态码 20 //response.sendError(404);//发送404状态码和404错误页面 21 /** 22 * 3.2响应头 23 */ 24 response.setHeader("server", "JBOss"); 25 /** 26 * 3.3实体内容(浏览器可以直接看到) 27 */ 28 response.getWriter().write("01.hello world");//字符内容 29 response.getOutputStream().write("hello world".getBytes());;//字节内容 30 } 31 /** 32 * 4.tomcat服务器把response对象的内容转换成响应格式内容,再发给浏览器解析。 33 */ 34 }
案例一:请求重定向(location)
@WebServlet("/ResponseDemo2") public class ResponseDemo2 extends HttpServlet { /** * 案例-请求重定向(相当于超链接跳转到页面) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 需求:跳转到adv.html * 使用请求重定向:发送一个302状态码+location的响应 */ /* response.setStatus(302);//发送一个302状态码 response.setHeader("location", "/day10_web/adv.html");//location的响应头 */ //请求重定向简化写法 response.sendRedirect("/day10_web/adv.html"); } }
案例二:定时刷新(refresh)
1 @WebServlet("/ResponseDemo2") 2 public class ResponseDemo2 extends HttpServlet { 3 /** 4 * 案例-定时刷新 5 */ 6 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 7 /** 8 * 定时刷新 9 * 原理:浏览器认识refresh头,得到refresh头之后,重新请求当前资源 10 */ 11 //response.setHeader("refresh", "1");//每隔1s进行一个刷新 12 13 /** 14 * 隔n秒之后跳转到另外的资源 15 */ 16 response.setHeader("refresh", "3;url=/day10_web/adv.html"); 17 } 18 }
案例三-Content-Type的作用
Content-Type:text/html;charset=GB2312; 表示服务器发送给浏览器的数据类型及内容编码
1 @WebServlet("/ResponseDemo2") 2 public class ResponseDemo2 extends HttpServlet { 3 /** 4 * 案例-Content-Type的作用 5 */ 6 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 7 /** 8 * 设置响应实体内容编码 9 */ 10 //response.setCharacterEncoding("utf-8"); 11 12 /** 13 * 1.服务器发给浏览器的数据类型 14 */ 15 //response.setHeader("content-type", "text/html"); 16 17 //response.setContentType("text/html");//和上面代码等价,加以使用此方法 18 //上面的两行代码可以合并成一行代码 19 response.setContentType("text/html;charset=utf-8"); 20 21 //response.setContentType("image/png");//发送图片 22 23 response.getWriter().write("<html><head><title>this is a title</title></head><body>中国</body></html>"); 24 response.getOutputStream().write("<html><head><title>this is a title</title></head><body>中国</body></html>".getBytes("utf-8")); 25 /*如果html文件中有中文,则会出现乱码,方法中涉及到转码问题,一般都默认iso-8859-1*/ 26 /*所以response.getWriter()之前使用response.setCharacterEncoding("utf-8");设置相应内容编码*/ 27 28 29 /* File file=new File("C:/Users/MaoDoer/Desktop/pic.png"); 30 *//** 31 * 设置以下载的方式打开文件 32 *//* 33 response.setHeader("content-disposition","attachment;filename="+file.getName()); 34 *//** 35 * 下载图片 36 *//* 37 *//** 38 * 发送图片 39 *//* 40 FileInputStream in = new FileInputStream(file); 41 byte[] buf=new byte[1024]; 42 int len=0; 43 while((len=in.read(buf))!=-1){ 44 response.getOutputStream().write(buf, 0, len); 45 } 46 */ 47 } 48 }
完美解决项目编码问题:在每个servlet开头写request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");
总结:
http协议:浏览器和服务器之间数据传输的格式规范。
http请求:
格式:
请求行
请求头
空行
实体内容
重点:使用HttpServletRequest对象:获取请求数据
http响应:
格式:
请求行
请求头
空行
实体内容
重点:使用HttpServletResponse对象:设置响应数据
以上是关于http响应的主要内容,如果未能解决你的问题,请参考以下文章