• 07、JavaWeb启程——网络编程&Tomcat服务器


    1、网络编程

    1、概述

    【计算机网络】: 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。

    【网络编程】:网络通信协议下,实现网络互联的不同计算机上运行的程序间可以进行数据交换。通俗的说,就是可以使用我们编写的网络程序基于互联网去访问别人电脑上的资源和程序。

    【网络编程分类】:

    • C/S结构
    • B/S结构

    2、CS/BS

    1、CS结构

    【简介】: CS结构的全程为Client/Server结构,是指客户端和服务器结构。常见的有QQ、百度网盘等软件。

    【结构图示】:
    在这里插入图片描述

    【特点】: 一般服务端仅仅安装了数据库和数据存储,所有的程序代码(功能、界面)都编写在客户端软件中。

    【优点】: 直观、用户体验度好,界面美观、安全性高。

    【缺点】: 每次升级的过程中都需要重新安装,移植性较低,开发和维护成本较高,不跨平台。

    2、BS结构

    【简介】: BS结构的全称是Browser/Server结构,是指浏览器和服务器结构。常见的浏览器有谷歌、火狐等。

    【图示结构】:
    在这里插入图片描述

    【特点】: 在服务端编写代码、所有的业务逻辑都由服务端完成,客户端只负责渲染页面。

    【优点】: 可移植性高、开发和维护较好。

    【缺点】: 以前用户体验不好,界面不够丰富,安全性相对较低。

    【新型的BS结构】:

    • 瘦客户端:传统的BS结构,服务端负责业务逻辑、客户端负责数据渲染。
    • 富客户端:超级BS=CS+BS,界面美观、服务的:负责业务逻辑,客户端负责少量业务逻辑和界面渲染。

    3、网络通信的三要素

    1、IP地址

    【简介】: IP地址就是互联网协议地址,想要两个网络中的计算机能够被识别,就必须为每台计算机指定一个唯一的标识,通过该标识找到相应的计算机,而IP地址就是这个唯一的标识。

    【分类】:

    • IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a .b.c.d 的形式,例如192.168.65.100 、其中a、b、c、d都是0~255之间的十进制整数,那么最多可以表示大约43亿个。
    • IPv6:为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。
    • 特殊的ip地址:127.0.0.1:表示本机的ip地址。

    【域名】: 将一个IP地址映射到某一组英文字母,方便记忆。

    【IP常见的命令】:

    • 查看本机的IP地址
    ipconfig
    
    • 1
    • 查看网络是否连同
    ping 空格 ip地址或域名
    ping baidu.com
    ping 120.78.159.117
    
    • 1
    • 2
    • 3

    2、端口号

    【简介】: 端口号是用两个字节表示的整数,它的范围是0 ~ 65535。0 ~ 1023之间都是一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。

    【作用】: 网络通信的本质就是两个进程之间的通信,端口号就是在计算机中的众多程序中唯一标识的标志。

    3、通信协议

    【简介】: 网络通信协议是计算机必须遵守的规则,只有遵守这些规则,计算机之间才能通信。

    1、UDP协议

    【简介】: UDP是一种无连接的通信协议,不建立逻辑连接,当一台计算机向另外一台电脑发送数据的时候,发送端不会确定接收端是否在线,直接发送数据,同样接收端也是如此,不会向发送端反映是否收到数据。

    【特点】:

    • 消耗资源小
    • 通信效率高

    【使用场景】:

    • 视频、语音等数据传输。
    • 传输重要数据的时候不适合使用,因为传输过程中可能会丢失一些数据包。

    【传输图示】:
    在这里插入图片描述

    2、TCP协议

    【简介】: TCP是面向连接的通信协议,也就是在传输数据之间先和服务器之间建立逻辑连接,再进行数据传输。

    【特点】:

    • 面向连接的协议
    • 建立连接,形成传输数据的通道
    • 传输数据大小不受限制
    • 通过三次握手完成连接
    • 通过四次挥手断开连接
    • TCP是基于IO流进行数据传输数据
    • 因为需要建立连接,效率会低、但是是可靠协议。

    【三次握手示意图】:
    在这里插入图片描述
    【三次握手的步骤】:

    • 第一次握手:客户端询问服务器是否在线
    • 第二次握手:服务端通知客户端在线,并询问客户端是否在线
    • 第三次握手:客户端通知服务器在线
    • 建立连接通信,开始数据传输

    【四次挥手示意图】:
    在这里插入图片描述

    【四次挥手步骤】:

    • 第一次挥手:客户端请求断开连接。
    • 第二次挥手:服务器发送已经接到断开的请求,之后把数据传输完。
    • 第三次挥手:服务器发送完数据通知客户端正式断开。
    • 第四次挥手:客户端告知服务器确定断开,并等待2MSL之后断开。

    4、基于TCP编程

    1、TCP客户端

    【步骤】:

    • 创建一个连接服务器的Socket对象。
    • 从Socket中拿到输出流向服务器发送数据
    • 调用Scoket的shutdownInput()方法通知服务器数据发送完毕
    • 从Socket中拿到输入流,获取服务端的反馈信息
    • 调用Socket对象的shutdownOutput()方法通知客户端数据发送完毕
    • 关闭socket对象

    【代码示例】:

    package cn.simplelife.work._01tcp.client;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.nio.charset.StandardCharsets;
    
    /**
     * @ClassName Client
     * @Description
     * @Author simplelife
     * @Date 2022/10/17 15:22
     * @Version 1.0
     */
    
    public class Client {
        public static void main(String[] args) {
            try {
                // 1、创建一个连接某个服务器的socket对象
                Socket socket = new Socket("127.0.0.1", 8090);
                // 2、从socket中拿到输出流往服务器发数据
                OutputStream outputStream = socket.getOutputStream();
                outputStream.write("您好!服务器".getBytes(StandardCharsets.UTF_8));
                // 3、调用Socket对象的shutdownOutput()方法,通知服务器发送完毕。
                socket.shutdownOutput();
                // 4、从Socket中拿到输入流拿到数据
                InputStream inputStream = socket.getInputStream();
                byte[] bytes = new byte[1024];
                int len;
                while ((len = inputStream.read(bytes)) > 0) {
                    String s = new String(bytes, 0, len);
                    System.out.println(s);
                }
                // 5、调用socket对象的shutdownInput()方法,通知服务器数据接收完毕
                socket.shutdownInput();
                // 6、关闭Socket对象
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    2、TCP服务端

    【步骤】:

    • 创建一个服务端对象
    • 侦听客户端的连接,获取和客户端通信的socket对象
    • 从Socket获取输入流,接收客户端发送的数据
    • 调用Socket对象中的shutdownInput通知客户端数据接收完毕
    • 从Socket对象中拿到输出流往客户端发送数据
    • 调用Socket对象的shutdownOutput()方法通知客户端数据发送完毕
    • 关闭socket对象

    【代码】:

    package cn.simplelife.work._01tcp.server;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.nio.charset.StandardCharsets;
    
    /**
     * @ClassName Server
     * @Description
     * @Author simplelife
     * @Date 2022/10/17 16:35
     * @Version 1.0
     */
    
    public class Server {
        public static void main(String[] args) {
            try {
                // 1、创建一个服务端对象
                ServerSocket serverSocket = new ServerSocket(8090);
                // 2、侦听客户端的连接,获取和客户端通信的socket对象
                Socket accept = serverSocket.accept();
                // 3、从Socket获取输入流,接收客户端发送的数据
                InputStream inputStream = accept.getInputStream();
                byte[] bytes = new byte[1024];
                int len;
                while ((len = inputStream.read(bytes)) > 0) {
                    String s = new String(bytes, 0, len);
                    System.out.println(s);
                }
                // 4、调用Socket对象中的shutdownInput通知客户端数据接收完毕
                accept.shutdownInput();
                // 5、从Socket对象中拿到输出流往客户端发送数据
                OutputStream outputStream = accept.getOutputStream();
                outputStream.write("你也好!客户端".getBytes(StandardCharsets.UTF_8));
                // 6、调用Socket对象的shutdownOutput()方法通知客户端数据发送完毕
                accept.shutdownOutput();
                // 7、关闭Socket对象
                accept.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    2、Tomcat服务器

    1、WEB资源概述

    1、什么是web资源

    【简介】: 浏览器网页上看到的所有内容都称为web资源,比如文字,图片,音频,视频,链接等等内容。

    2、web资源分类

    分类概述使用技术
    静态资源静态资源是指没有后台数据库,不含程序和一些不可交互的网页。在程序中编写的是什么,就显示什么HTML\CSS\JS
    动态资源动态资源因人而异,以数据库为基础,每次访问内容都可能不一样jsp/servlet

    2、什么是服务器

    1、服务器分类

    • 软件服务器:通俗的说就是一个软件:提供了BS架构的应用运行环境。
      • 作用:可以将我们开发好的静态资源或动态资源提供给外界浏览器访问。
    • 硬件服务器:也就是一台电脑,该电脑安装了软件服务器。

    2、软件服务器分类

    • http服务器:用于运行静态的网页。
    • Web服务器:实现了JavaEE部分规范。
      • 常见的web服务器:Tomcat。
    • 应用服务器:实现了JavaEE的全部规范。

    3、Tomcat服务器安装及配置

    1、Tomcat安装

    参考文章:Tomcat服务器安装

    2、Tomcat目录结构

    目录名作用
    bin启动和关闭tomcat的可执行文件
    config配置文件夹,有些重要配置文件在这下面。如: server.xml, web.xml等不建议乱修改,可能导致Tomcat不能启动
    libTomcat在使用过程中依赖的第三方jar包
    logs日志记录文件,记录服务器在执行过程中的一些事情,包括异常。
    temp临时文件,保存服务器运行过程中的一些垃圾文件
    webapps我们开发好的项目发布目录,可以通过浏览器来直接访问
    ROOT根目录
    worktomcat的工作目录,存储运行过程中产生的文件,如jsp的class文件
  • 相关阅读:
    时序预测 | MATLAB实现NGO-BiLSTM北方苍鹰算法优化双向长短期记忆网络时间序列预测
    CentOs安装jdk
    【信号处理】基于扩展卡尔曼滤波器和无迹卡尔曼滤波器的窄带信号时变频率估计(Matlab代码实现)
    升级鸿蒙4.2新变化,新增 WLAN 网络自动连接开关!
    Ubuntu1804里进行KITTI数据集可视化操作
    分析Java的两种数据类型
    Java设计模式(三)结构型 设计模式
    Kubernetes(K8S)快速搭建typecho个人博客
    Python模块:模块搜索顺序、内置属性(__file__和__name__)、开发原则
    Word处理控件Aspose.Words功能演示:在 Python 中将 Word 文档拆分为多个文件
  • 原文地址:https://blog.csdn.net/m0_37911124/article/details/127669870