首页 > 代码库 > http响应

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响应