Java回顾(十六)HTTP响应、Response

1、Http响应

1.1、响应消息

响应消息:服务器发送给客户端的数据

数据格式:(1)、响应行  (2)、响应头 (3)、响应空行  (4)、响应体

1.2、响应行

1. 组成:协议/版本 响应状态码 状态码描述
   2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。
      1. 状态码都是3位数字 
      2. 分类:
          1. 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
          2. 2xx:成功。代表:200
          3. 3xx:重定向。代表:302(重定向),304(访问缓存)
          4. 4xx:客户端错误。
                * 代表:
                   * 404(请求路径没有对应的资源) 
                   * 405:请求方式没有对应的doXxx方法
          5. 5xx:服务器端错误。代表:500(服务器内部出现异常)

1.3、响应头

1. 格式:头名称: 值
    2. 常见的响应头:
        1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
        2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据
            * 值:
                * in-line:默认值,在当前页面内打开
                * attachment;filename=xxx:以附件形式打开响应体。文件下载

1.3、 响应空行
1.4、 响应体:传输的数据

2、Response对象

        1. 设置响应行
            1. 格式:HTTP/1.1 200 ok
            2. 设置状态码:setStatus(int sc) 
        2. 设置响应头:setHeader(String name, String value) 
            
        3. 设置响应体:
            * 使用步骤:
                1. 获取输出流
                    * 字符输出流:PrintWriter getWriter()

                    * 字节输出流:ServletOutputStream getOutputStream()

                2. 使用输出流,将数据输出到客户端浏览器

3、案例

3.1、重定向案例

传统的写法:

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("this is responseServlet1....");
        //1、设置响应行 状态码为302 表示重定向
        response.setStatus(302);
        //2、设置响应头 地址为B地址
        response.setHeader("location","/web/responseServlet2");
    }

 

改进的写法:使用sendRedirect即可

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("this is responseServlet1....");
        response.sendRedirect("/web/responseServlet2");
    }

 

3.1.1 重定向的特点:

  • 地址栏发生改变
  • 可以请求其它站点(服务器)的资源
  • 重定向是2次请求,不能通过request对象来共享数据

3.1.2 转发的特点:

  • 地址栏没有发生改变
  • 只能请求服务器内的地址
  • 转发是1次请求,可以使用request对象来共享数据

3.1.3  面试题:forward和redirect的区别

forward:转发,特点为(1)、地址栏不变 (2)、只能访问当前服务器内的地址 (3)、转发只有1次请求

redirect:重定向, 特点为 (1)、地址栏发生改变 (2)、可以访问其它站点(服务器)的资源  (3)、重定向有2次请求

3.1.4 路径的写法

1. 相对路径:通过相对路径不可以确定唯一资源
    * 如:./index.html
    * 不以/开头,以.开头路径

    * 规则:找到当前资源和目标资源之间的相对位置关系
        * ./:当前目录,如果是当前目录也可以不写./
        * ../:后退一级目录
2. 绝对路径:通过绝对路径可以确定唯一资源
    * 如:http://localhost/day15/responseDemo2        /day15/responseDemo2
    * 以/开头的路径

    * 规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
        * 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)
            * 建议虚拟目录动态获取:request.getContextPath()

String contextPath = request.getContextPath();
response.sendRedirect(contextPath + "/responseServlet2");


            * <a> , <form> 重定向...    response.sendRedirect("/web/responseServlet2");


        * 给服务器使用:不需要加虚拟目录
            * 转发路径  request.getRequestDispatcher("/successServlet").forward(request,response);

3.2、服务器输出字符数据到浏览器

要设置编码格式,告诉浏览器用改码解码

获取流之前设置

response.setContentType("text/html;charset=utf-8");
response.getWriter().write("你好....");

3.3、服务器输出字节数据到浏览器

要设置编码格式,告诉浏览器用改码解码

输出字节数据,一般以图片居多,文字的话,用字符数据来写居多

response.setContentType("text/html;charset=utf-8");
ServletOutputStream sos = response.getOutputStream();
sos.write("你好".getBytes("utf-8"));

3.4、验证码

 

4、ServletContext对象

4.1 获取对象
        (1). 通过request对象获取
            request.getServletContext();
        (2). 通过HttpServlet获取
            this.getServletContext();

5、会话

5.1 会话技术
    1. 会话:一次会话中包含多次请求和响应。
         一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
    2. 功能:在一次会话的范围内的多次请求间,共享数据
    3. 方式:
        1. 客户端会话技术:Cookie
        2. 服务器端会话技术:Session

5.2 Cookie

    1. 概念:客户端会话技术,将数据保存到客户端

    2. 快速入门:
        * 使用步骤:
            1. 创建Cookie对象,绑定数据
                * new Cookie(String name, String value) 
            2. 发送Cookie对象
                * response.addCookie(Cookie cookie) 
            3. 获取Cookie,拿到数据
                * Cookie[]  request.getCookies()  

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐形的稻草人HWS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值