JavaWeb--Http、Request、Response

本文详细阐述了HTTP协议的基础知识,包括其作为基于TCP/IP的高级协议特性,以及默认端口号80。深入探讨了请求/响应模型,无状态特性,并对比了GET与POST请求方式的优缺点。同时,讲解了Servlet容器的工作原理,request和response对象的使用方法,以及中文乱码、请求转发和重定向等高级主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet容器/web容器

HTTP
  1. Http协议

    • 基于TCP/IP协议的高级协议
    • 端口号默认是:80
    • 基于请求/响应模型的:一次请求一次响应
    • 无状态的:一次请求一个响应是单独的,不能交互数据
  2. 请求消息数据格式

    • 请求方式:HTTP协议有7中请求方式,常用的有2种
      • GET:请求参数在请求行中,在url后,url长度有限制,存储容量有限,不太安全
      • POST:请求参数在请求体中,存储容量多,相对安全
  3. 响应消息数据格式

Request
  1. request对象和response对象的原理

    • request和response对象都是由服务器创建的,我们来使用
    • request对象是来获取请求消息的,response对象是来设置响应消息
  2. request:获取请求消息

  3. request的继承体系:

    • ServletRequest接口
    • HttpServletRequest接口
  4. request功能:

    1. 获取请求消息数据
      1. 获取请求行数据:

        • GET:/day01/demo01/?name=zhangsan HTTP/1.1
        • 常用方法:
          1. 获取请求方式:GET
            • String getMethod()
          2. 获取虚拟目录:/day01
            • String getContextPath()
          3. 获取Servlet路径:/demo01
            • String getServletPath()
          4. 获取请求URI:/day01/demo01
            • String getRequestURI():/day01/demo01
            • String getRequestURL():http://localhost:8080/day01/demo01
          5. 获取客户机的IP地址:ServletRequest类中的方法
            • String getRemoteAddr()
          6. URI和URL区别
            • URI:统一资源标识符:/day01/demo01 共和国
            • URL:统一资源定位符:http://localhost:8080/day01/demo01 中华人民共和国
      2. 获取请求头数据:

        • 方法:String getHeader(“user-agent”);
        • 如何处理浏览器不兼容?
           /**
             处理浏览器不兼容问题
           */
           String agent = request.getHeader("user-agent");
        
           if(agent.contains("Chrome")){
               ....
           }else if(agent.contains("FireFox")){
               ....
           }else{
               ....
           }
        
      3. 获取请求体数据:POST请求方式才有请求体,在请求体中封装了POST请求的请求参数

        • 步骤:
          1. 获取流对象
            • BufferedReader getReader():获取字符流
          2. 流中拿出数据
    2. 其他功能:
      1. 获取请求参数通用方式:

        • String getParameter(String name)
        • String[] getParamter(String name)
        • Map<String,String[]> getParamterMap()
        • 中文乱码问题:
          • get方式在tomcat8以上已经解决
          • post方式仍有乱码
          • 设置流的编码:request.setCharacterEncoding(“utf-8”);
      2. 请求转发:

        1. request.getRequestDispatcher(String path).forward(request,response);
        2. 注意:
          • 浏览器地址栏路径不发生变化
          • 只能转发到当前服务器内部资源中
          • 转发是一次请求
      3. 共享数据:

        • 域对象:一个有作用范围的对象,可以在范围内共享数据
        • request域:代表了一次请求,一般用于请求转发的多个资源中共享数据
        • 方法:
          • void setAttribute(String name, Object o); 在同一个request域中,两个或多个servlet共享这个里面存储的数据
          • Object getAttribute(String name); 获取值,通过键
          • void removeAttribute(String name);通过键移除键值对
      4. 获取ServletContext:

        • request.getServletContext()
  5. 请求响应

    • 状态码:都是三位数
      • 1xx:服务器接收客户信息,但是没有接收完成,等待一段时间后,发送1xx多状态码
      • 2xx:成功,代表200
      • 3xx:重定向,代表302(重定向),304(访问缓存)
      • 4xx:客户端错误状态,404(路径不对)。405(请求方式没有doxxx方法)
      • 5xx:服务端内部异常,500(内部出异常)
Response
  1. 功能:

    • 设置响应消息
  2. 设置什么?

    • 设置响应行
      1. 格式:HTTP/1.1 200 ok
      2. 设置状态码:setStatus(int sc)
    • 设置响应头:setHeader(String name, String value)
    • 设置响应体
      1. 读取输出流:PrintWriter()
      2. 使用输出流:ServletOutputStream getOutputStream()
  3. 简单的重定向方法:response.sendRedirect("/day15/demo01");

    • 它的底层是:setStatus(int sc)、setHeader(String name, String value)
  4. 转发和重定向的区别?

    • 转发:
      1. 地址栏路径不变
      2. 转发只能访问当前服务器端下的资源
      3. 转发是一次请求,可以使用request域来使用共享数据
    • 重定向:
      1. 地址栏发生变化
      2. 重定向可以访问其他站点(服务器)的资源,比如http://www.baidu.com
      3. 重定向是两次请求,不能使用request域来共享数据

请求和响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值