java补完——HTTP协议(JSP内置对象请求&响应)

文章说明:黑色字体-已知,蓝色字体-所见即所得,红色字体-还需要再找资料弄明白的
参考资料:很多参考资料,段落下有原文链接到原作者

简介

  • http协议是一种数据传输协议,主要用于客户端与服务器之间数据的传递。
  • 基于 TCP/IP 的高级协议
    无状态的协议:每次请求之间相互独立,不能交换数据
    默认端口号:80
    基于请求/响应模型的:一次请求对应一次响应
  • 工作原理是:客户端通过http协议发出request(由请求头、请求行、空格、消息体组成),当请求传到服务器时有两种情况:
    • 第一,当生成的网页是静态网页时,服务器直接通过http协议返回给客户端response(由响应头、响应行、空格、消息体组成),就这样,整个流程结束。
    • 第二,当服务器接收到需要生成动态网页的 命令时,服务器自己不能生成,需要借助web容器生成,servlet就是依附于web容器的一项技术,它避开了CGI技术的不足。
  • web容器是一个内置在服务器中的小型服务器,依赖于服务器而生,作用域服务器,与servlet技术一起帮助服务器生成动态网页。其中最常用到的web容器是Tomcat。

发展史

  • HTTP/0.9 (1991)
    1.只有一个命令GET。
    2.没有HEADER等描述数据的信息。
    3.服务器发送完毕, 就关闭TCP连接。
  • HTTP/1.0 (1996)
    1.增加了POST, PUT , Header等命令
    2. 增加了 status code (处理请求的状态)和 Header(信息)
    3.支持了多字符集、 多部分发送、权限、 缓存等
  • HTTP/1.1 (1999)
    1.增加了持久连接(长连接)。即,HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。
    HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。
    2.pipeline。 可以在同个链接里 发送多个请求。但1.1服务端请求进入是需要按照顺序进行的。在HTTP2.0中会进行优化。
    3.增加host域和其他一些命令。
    4.支持只发送头信息,服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器。
    5.可以声明保持TCP连接状态
  • HTTP/2.0(2015)
    1.所有数据以二进制传输。
    2.同一个连接里面发送多个请求不再需要按照顺序来。
    3.头信息压缩以及推送等提高效率的功能。
    4.TCP连接支持并发, 多个请求只用创建一个TCP协议

请求 HttpServletRequest

请求响应原理

request 和 response 对象由服务器创建,由开发人员使用。request 对象获取消息请求,response 对象设置响应消息。
1、Tomcat 服务器根据请求URL中的资源路径,创建对应的对象
2、Tomcat 服务器创建 request和response 对象,request 对象中封装请求消息数据,response 对象中封装响应消息数据。
3、Tomcat 将 request 和 response 两个对象传递给 service 方法,并调用 service 方法
4、开发人员可以通过 request 对象获取请求消息数据,通过 response 对象设置响应消息数据。
5、服务器在给浏览器做出响应之前,从 response 对象中拿开发人员设置的响应消息数据。

Request对象继承体系

1、ServletRequest:接口
2、HttpServletRequest:接口
3、org.apache.catalina.connector.RequestFacade:Tomcat 的一个类
RequestFacade 类实现了 HttpServletRequest 接口,HttpServletRequest 接口继承了 ServletRequest 接口

请求数据格式和获取

1、请求行

  • 格式:请求方式 请求URL 请求协议/版本
    eg:GET /mySubmit.html HTTP/1.1
  • 请求方式:7 种请求方式,常用 GET 和 POST。
    GET:请求参数在请求行中,在URL后显示、请求的URL长度有限、不安全。
    POST:请求参数在请求体中、请求的URL没有长度限制、安全。
  • 获取请求行数据
    GET /oneStar?name=qq HTTP/1.1
    常用方法:
    Sring getMethod():获取请求方法:GET
    String getContextPath():获取虚拟目录:/
    String getServletPath():获取 servlet 路径:/oneStar
    Sring getQuervletPath():获取 get 方式请求参数:name=qq
    String getRequestURI():获取请求URI:/oneStar
    StringBuffer getRequestURL():获取请求URL:http://localhost/onestar/
    String getProtocol():获取协议版本:HTTP/1.1
    String getRemoteAddr():获取客户机的IP地址
    URL:统一资源定位符
    URI:统一资源标识符(范围更大)
//请求行数据
public static void requestHang(HttpServletRequest req){
   
    //1.获取请求方法:GET
    String method = req.getMethod();
    System.out.println(method);
    //2.获取虚拟目录
    String Cpath = req.getContextPath();
    System.out.println(Cpath);
    //3.获取 Servlet 路径
    String Spath = req.getServletPath();
    System.out.println(Spath);
    //4.获取get方式请求参数
    String Qpath = req.getQueryString();
    System.out.println(Qpath);
    //5.获取请求URI
    String URI = req.getRequestURI();
    System.out.println(URI);
    //6.获取请求URL
    StringBuffer URL = req.getRequestURL();
    System
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值