• Web开发相关


    OSI模型

    计算机网络中,存在不同厂商、不同结构的网络产品。这些网络产品在进行互联时会遇到不兼容的问题。

    国际标准化组织ISO 提出了 OSI(Open System Interconnection)开放系统互联的参考模型,为异构系统互联提供了概念性的框架。

    OSI 网络模型 ,将网络分为七个层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

    TCP/IP 协议对 OSI网络模型中的一些层进行了合并,将应用层、表示层、会话层,合并为应用层。传输层不变。网络层变成了网络互联层,数据链路层和物理层合并为网络接口层。

    端口,就是应用程序用于数据交互的通道,用于实现程序间的通信。每个应用程序都有固定的端口。

    注意 :两个应用程序如果使用同一个端口,那么会抛出端口异常冲突java.net.BindException。

    常见端口:

    tel 协议 --- 23

    smtp 协议 --- 25

    ftp 协议 --- 21

    http 协议 --- 80

    数据传输由 TCP/IP 分层模型中的传输层负责,该层包含 TCP 和 UDP 两种协议。

    TCP 协议是一种比较可靠的传输协议,提供三次握手机制。信息在传输过程中,有遗失,有损耗,会要求发送方重新发送,从而保证信息的完整性。

    UDP 协议是一种不可靠的传输协议,信息在传输过程中,有遗失,有损耗,不会要求发送方重新发送。特点是速度快。

    html

    超文本标记语言。超文本的意思是在html中不仅仅包含文本数据,而且可以通过一系列标记,链接各式各样的资源(图片、音频、视频、css、js等)。客户端在显示html网页,不仅仅需要下载文本数据,还需要发出一系列请求,将该网页链接资源一一下载。

    http协议

    HTTP 协议称为超文本传输协议,是客户端与服务器通信的一种标准。客户端和服务器都遵循HTTP 协议,就能从彼此发送的信息中提取自己想要的数据。

    http协议的特点:

    1、http协议遵循的是请求/响应模型

    2、http协议是一种无状态的协议

    当请求/响应完成以后,客户端和服务器的连接会断开。所以,服务器无法知道两次请求的用户是否为同一个用户。

    3、http协议占用 80 端口

    http协议的工作流程:

    1、客户端和服务器建立连接

    2、客户端发送 http 请求

    3、服务器产生 http 响应

    4、关闭连接

    http协议的请求信息

    http协议的请求信息分为:请求行、请求头、空行、消息体。

    请求行:描述请求方式,请求URL路径、http协议版本

    请求头:以键值对方式描述客户端相关的信息

    空行:标识请求头的结束

    消息体:(POST)描述客户端请求的表单数据

    http协议请求方式有8种:

    GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT

    其中 GET、POST 是最常用的两种。

    GET请求:1、浏览器输入URL路径为GET请求

    2、用户点击超链接为GET请求

    3、用户提交表单,默认为GET请求,method属性为GET时,也就是GET请求

    POST请求:

    GET和POST的区别

    1、流格式的区别

    GET请求,只有请求行,请求头,空行。会将表单数据附加在URL后面。

    POST请求,有请求行、请求头、空行、消息体。在消息体中附加表单数据。

    2、传输性能的区别

    GET 请求,不能传输大数据,只能传输小文本数据。

    POST 请求,可以传输大数据,同时可以传输文本数据,以及二进制数据。数据的传输相对安全。

    3、用户的区别

    GET 请求用于服务器的资源查找。POST请求用于数据的传输。

    http协议的响应信息

    http协议的响应信息分为四个部分:状态行、响应头、空行、消息体。

    状态行:描述http协议的版本、状态码、响应描述。

    响应头:以键值对方式描述服务器相关的信息。

    空行:标识响应头的结束。

    消息体:服务器发送给客户端的具体数据。

    http协议的状态码有五种

    100 - 199 表示客户端请求服务器在进行中。

    200 - 299 表示客户端请求成功

    300 - 399 表示资源移走,请求新的地址

    400 - 499 表示客户端引发的错误

    500 - 599 表示服务器端引发的错误

    MIME 类型

    MIME 类型用于服务器端发送数据给客户端时,告诉客户端浏览器以什么格式来解析响应信息体内容。

    常见的 MIME 类型:

    text/html:html网页数据

    image/jpeg:JPG 图片数据

    application/json:json 格式数据

    text/xml:xml格式数据

    传统 的web服务器的缺陷

    传统的web服务器在接收到客户端请求后,只能将静态的html信息发送给客户端,极大的影响了响应信息的灵活性。

    解决方案是,在传统的web服务器接受到客户端请求后,交由辅助应用进行处理。辅助应用可以利用数据库作为存储介质,将请求信息进行处理后,动态的产生响应信息。

    java 利用 web 容器 + Servlet 方式作为辅助应用解决方案的。

    WEB容器

    在java中, web容器完成底层操作。预留 Servlet 接口,交给开发者书写业务操作。WEB 容器调用 servlet 业务方法,动态产生响应信息。

    WEB容器的作用

    1、通讯支持

    WEB 容器,需要将请求信息和响应信息封装成请求对象和响应对象,以便更好的接受和发送数据。

    2、Servlet生命周期管理

    Servlet是web容器预留给开发者的接口。开发者实现了 Servlet 接口后,可以书写相关的业务处理操作。Servlet实现类对象的产生、销毁、方法调用,全部由 web 容器管理。

    3、线程支持

    由于服务器需要接受多个客户端的同时访问,那么web容器采用多线程来进行多任务处理。线程的创建、运行、启动、同步等,都由web容器管理。

    4、JSP 支持

    主要由 web 容器编写 jsp 引擎对 jsp 页面进行翻译。

    5、处理安全性

    tomcat

    tomcat 源自于 apache 软件基金会 jakkarta 项目。tomcat 是一款免费的、开源的、性能稳定、技术成熟的WEB容器产品

    在maven 工程中,导入tomcat

    1. org.apache.tomcat.embed
    2. tomcat-embed-core
    3. 9.0.36

    Servlet 的API 结构

    在Servlet 规范中,Servlet 是业务接口,预留 service 方法,交给开发者书写业务操作。ServletConfig为配置接口。GenericServlet 同时实现了Servlet、ServletConfig 两个接口,并重写了大部分方法,但是没有实现service()。该方法应该由GenericServlet 的子类,根据协议的特点分别实现。HttpServlet 继承了 GenericServlet,根据Http 协议的特点,重写了service(),根据不同的请求方式调用doXX();

    创建Servlet

    1. public class TestServlet extends HttpServlet {
    2. @Override
    3. protected void doGet(HttpServletRequest req,
    4. HttpServletResponse resp) throws ServletException, IOException {
    5. this.doPost(req, resp);
    6. }
    7. @Override
    8. protected void doPost(HttpServletRequest req,
    9. HttpServletResponse resp) throws ServletException, IOException {
    10. //设置请求信息编码集,只对POST有效
    11. ​ req.setCharacterEncoding("utf-8");
    12. //设置响应信息的MIME类型和编码集
    13. ​ resp.setContentType("text/html;charset=utf-8");
    14. //根据表单名,得到表单值
    15. String userName = req.getParameter("userName");
    16. //向客户端输出文本信息
    17. ​ resp.getWriter().print("hello." + userName);
    18. ​ }

    创建并启动tomcat,并注册Servlet

    1. public class Main {
    2. public Main(){
    3. Tomcat tomcat = new Tomcat();
    4. //设置tomcat端口
    5. tomcat.setPort(8088);
    6. //引导http引擎
    7. tomcat.getConnector();
    8. //定义上下文
    9. Context context = tomcat.addContext("",null);
    10. //注册servlet,第一个参数为上下文对象,
    11. // 第二个参数为servlet的名称,
    12. // 第三个参数为servlet实现类对象
    13. Wrapper wp = Tomcat.addServlet(context,"test",new TestServlet());
    14. //容器一启动就初始化
    15. ​ wp.setLoadOnStartup(1);
    16. //配置servlet的访问路径
    17. ​ wp.addMapping("/abc");
    18. try {
    19. //启动tomcat
    20. ​ tomcat.start();
    21. ​ } catch (LifecycleException e) {
    22. ​ e.printStackTrace();
    23. ​ }
    24. ​ }
    25. public static void main(String[] args) {
    26. new Main();
    27. ​ }
    28. }

    servlet 映射路径有三种:

    精确映射:/add 表示客户端以/add路径请求,就能找到对应的servlet

    扩展映射:*.do 表示客户端以.do结尾的请求都能找到servlet

    路径映射:/abc/* 表示客户端以/abc/路径的请求,都能找到对应的servlet

    得到表单数据

    1. //根据表单名,得到表单值
    2. String value = req.getParameter(“表单名”)
    3. //得到多个同名键值对的值,返回数组
    4. String[ ] value = req.getParameterValues(“表单名”)
    5. //得到表单数据中的表单名枚举
    6. Enumeration em = req.getParameterNames();

    Servlet 的生命周期

    1、容器加载并实例化 Servlet;

    2、调用init(),完成初始化。loadOnStartup为0或者正数,表示容器一启动就初始化。如果为负数或不写,表示第一次访问容器再做初始化。

    3、当请求到达,调用service()方法,处理请求,产生响应

    4、销毁阶段,调用destoy()完成清理。

    在整个生命周期中,1、2、4都只做一次。只有3步,才是每次请求都会执行。而servlet对象也是单实例多线程的对象。

    web容器向客户端发送数据

    有两种方式

    1、向客户端发送文本数据

    response.getWriter().print("hello");

    2、向客户端发送二进制数据

    OutputStream out = response.getOutputStream();

  • 相关阅读:
    RabbitMQ消息中间件
    【命令行魔法:掌握Linux基础工具开发的独门技艺】
    iOS小技能:RSA签名、验签、加密、解密的原理
    vue elementUI table表格自定义样式滚动
    【Kubernetes】Kubernetes的污点和容忍度
    jenkins发布springboot到k8s
    统计子矩阵
    java镜子之反射篇
    2023.11.19 hadoop之MapReduce
    SQL正则表达式、列表运算、涉及null的查询
  • 原文地址:https://blog.csdn.net/weixin_66564094/article/details/126572211