HTTP

HTTP:

  概念:Hyper Text Transfer Protocol 超文本传输协议

      传输协议:定义了,客户端和服务器端通信时,发送数据的格式

      特点:

        1  基于TCP/IP的高级协议

        2  默认端口号:80

        3  基于请求/响应模型:一次请求对应一次响应

        4  无状态的:每次请求之间相互独立,不能交互数据

  请求消息数据格式

    1  请求行

      请求方式 请求url 请求协议/版本

      GET /login.html HTTP/1.1

        请求方式:

          HTTP协议中有7种请求方式,常用的有2种

            GET:

              1  请求参数在请求行中,在url后

              2  请求的url长度是有限制的

              3  不太安全

            POST:

              1  请求参数在请求体中

              2  请求的url长度没有限制

              3  相对安全

    2  请求头:客户端浏览器告诉服务器一些信息

      请求头名称:请求头值

      常见的请求头:

        1  User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息

          * 可以在服务器端获取该头的信息,解决浏览器的兼容性问题

        2  Referer:

          *  告诉服务器,我(当前请求)从哪里来

            作用:

              1  防盗链:

              2  统计工作:

    3  请求空行

      空行,用于分割POST请求的请求头,和请求体的

    4  请求体(正文)

      *  封装POST请求消息的请求参数的

   

      

  响应消息数据格式

 

 

    Request:

    1  request对象和response对象的原理

      1  request和response对象是由服务器创建的,我们来使用它们

      2  request对象是来获取请求消息,response对象是来设置响应消息

    2  request对象继承体系结构:

      ServletRequest    --接口

         |

      HttpServletRequest  --接口

         |

      org.apache.catalina.connector.RequestFacade  类(tomcat)

    3  request功能:

      1  获取请求消息数据

        1  获取请求行数据

          *  GET /day14/demo1?name=zhangsan HTTP/1.1

          *  方法:

            1  获取请求方式:GET

              *  String getMethod()

            2  (*)获取虚拟目录:/day14

              *  String getContextPath()

            3  获取Servlet路径:/demo1

              *  String getServletPath()

            4  获取get方式的请求参数:name=zhangsan

              *String getQueryString()

            5  (*)获取请求URI:/day14/demo1

              *String getRequestURI()  /day14/demo1

              *String getRequestURL()  http://localhost/day14/demo1

              URI:统一资源标识符

              URL:统一资源定位符

            6  获取协议及版本:HTTP/1.1

              *String getProtocol()

            7  获取客户机的IP地址

              *String getRemoteAddr()

        2  获取请求头数据

          方法:

            1  (*)String getHeader(String name):通过请求头的名称获取请求头的值

            2  Enumeration<String> getHeaderNames():获取所有的请求头名称

        3  获取请求体数据

          请求体:只有post请求方式,才有请求体,在请求体中封装了post请求的请求参数

          步骤:

            1  获取流对象

              *  BufferedReader getReader():获取字符输入流,只能操作字符数据

              *  ServletInputStream getInputStream:获取字节输入流,可以操作所有类型数据

            2  再从流对象中拿数据

              

      2  其他功能:

        1  获取请求参数通用方式

          1 String getParameter(String name):根据参数名称获取参数值

          2  String[] getParameterValues(String name):根据参数名称获取参数值的数组

          3 Enumeration<String> getParameterNames()获取所有请求的参数名称

          4  Map<String,String[]>getParameterMap()获取所有参数的map集合

          *  中文乱码问题:

            *  get方式:tomcat 8 已经将get方式乱码问题解决

            *  post方式:会乱码

             *解决:在获取参数前,设置request编码request.setCharacterEncoding("utf-8");

                  

        2  请求转发:一种在服务器内部的资源跳转方式

          1  步骤:

            1  通过request对象获取请求转发器对象 RequestDispatcher getRequestDispatcher(String path)

            2  使用RequestDispatcher对象进行转发:forward(ServletRequest request,ServletResponse response)

          2  特点:

            1  浏览器地址栏没有发生变化

            2  只能转发到当前服务器内部资源中

            3  转发是一次请求

        3 共享数据

          * 域对象:一个有作用范围的对象,可以在范围内共享数据

          * request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据

          * 方法:

            1 void setAttribute(String name,Object obj):存储数据

            2  Object getAttribute(String name):通过键获取值

            3  void removeAttribute(String name):通过键移除键值对

            

        4  获取ServletContext

          1  ServletContext getServletContext()

 

      

posted @   Cuora  阅读(32)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示