【Tomcat】第一站:理解tomcat与Socket
目录
1. Tomcat
1.1 Tomcat帮助启动http服务器。
1.2 tomcat理解:
2. 计算机网络最基本的流程
2.1 信息是怎么来的?
2.2 端口是干什么的?
3. 简单的Socket案例
服务端
客户端
启动:
3.2 在Tomcat发送信息,看能不能接收到
1. Tomcat
大公司的MVC框架都是自己设计搭建的。
Tomcat---本身只是一个web容器,这个容器能够承载项目。
1.1 Tomcat帮助启动http服务器。
解释:xxxDemo 自己写好的项目,外部是无法通过http访问到这个写好的项目的,那么我们把它放进tomcat中,然后启用http,外部就能够访问了。

http是网络访问形式,
1.2 tomcat理解:
比如,
我们写一个a.html,在网页上打开显示访问方式:
我们想要http访问,可以:
把它放进tomcat中。
我们直接打开tomcat
所有的项目都在 tomcat 下的webapps目录下。
我们在 tomcat 的 webapps 下直接新建一个文件夹(其实就是新建一个项目),起名叫 'myweb' , 把我们写的 a.html文件放进这个文件夹中,启动tomcat。
.bat文件是Windows的启动。
启动之后再访问a.html,此时的访问是http的访问形式。
总结:
tomcat:是服务器---->能让其中配置的项目接受http请求。
2. 计算机网络最基本的流程
1> 操作系统做网络的问答。

2> 应用程序在操作系统之上。
3> 应用程序通过Socket与操作系统通讯。

4> 操作系统之下是物理硬件--网卡。
网卡通过导线相连(即网线),两个网卡通过大型的计算机网络相连。
网卡就是 接收 和 发送 0101这样信号的。
这就是计算机网络最基本的流程。

总结:
Socket就是两个软件之间的通讯保证。
2.1 信息是怎么来的?
Tomcat本身就是一个应用软件,如果我们现在去掉操作系统。

如果一个信息发送过来,肯定是先打到网卡,然后通过Socket,最后把 当前信息 给到 应用程序Tomcat中。
2.2 端口是干什么的?
网卡上设置有端口。
网卡:什么样的信息都可以发送到网卡。

操作系统之上运行有各种各样的软件(WX,QQ,Tomcat...),那么,怎么把当前信息准确地发到对应的软件?
答:通过端口。
比如:
与微信上的女朋友说:I love you.
与QQ上的女朋友说“今晚一起吃饭。”
如何发送到对应的软件?
要想被识别,信息必须带上端口号,才能对应上。
3. 简单的Socket案例
打开IDEA,新建项目,选择java项目,SDK默认即可,其余都不选,下一步取个名字 ’javaDemo‘。

过程:
首先,新建一个客户端,起名’SocketClient‘
客户端是发送信息的。可以理解为浏览器。
再新建一个类,’SocketServer‘
服务器端,类比于tomcat,接收信息。
服务端
在服务端:
写个run()方法
1.创建Socket:
监听4747端口(我们所能监听的端口,0--65535,因为端口只有这些)
public static void run() throws IOException {ServerSocket serverSocket=new ServerSocket(4747);//端口的范围:0--65535}
2. 写一个循环等待客户的连接
while(true){}
while(true)本身是一个死循环,为了不让程序卡死,我们调用一个 serverSocket.accept() 方法,阻塞监听:只有监听到客户端的信息后才会向下执行。
Socket socket = serverSocket.accept();//阻塞监听,只有监听到客户端的信息后才会向下执行
3.下一步输出客户端给我们发来的程序。
socket.getInputStream() 打开当前的输入流,接收输入的信息。
InputStream inputStream = socket.getInputStream();//打开输入流:接收输入的信息
输入的字节流信息按字节流读取:read()阻塞
从Socket上读取对端发过来的数据一般有两种方法:
1)按照字节流读取BufferedInputStream in = new BufferedInputStream(socket.getInputStream()); int r = -1; List<Byte> l = new LinkedList<Byte>();while ((r = in.read()) != -1) {l.add(Byte.valueOf((byte) r));}
2)按照字符流读取BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String s;while ((s = in.readLine()) != null) {System.out.println("Reveived: " + s);}
这两个方法 read() 和 readLine() 都会读取对端发送过来的数据,如果无数据可读,就会阻塞直到有数据可读。或者到达流的末尾,这个时候分别返回-1和null。
这个特性使得编程非常方便也很高效。
信息量是多少,输入流就是0101这样的数据,最后把0101数据转换成String类型的字符串数据。
int count=0;
while(count==0){count= inputStream.available();
}
byte[] bytes=new byte[count];//010101001
inputStream.read(bytes);
String context=new String(bytes);
System.out.println(context);
客户端
1. 创建Socket
Socket socket=new Socket("127.0.0.1",4747);
本地端口号是'127.0.0.1', 向 4747 端口号传信息。
2. 打开输出流,建立Socket连接
getOutputStream方法得到的是一个输出流,客户端的Socket对象上的getOutputStream方法得到的输出流其实就是发送给服务器端的数据。
OutputStream outputStream = socket.getOutputStream();
3. 打印输出流
PrintStream printStream=new PrintStream(outputStream);
System.out.println("hello");
若想输入自己想要的东西
Scanner scanner=new Scanner(System.in);
String context = scanner.nextLine();
printStream.println(context);
4. 关闭输出流
close()方法用于关闭基础输出流。
启动:
先启动服务器端,让他处于随时的监听状态。
再启动客户端。


3.2 在Tomcat发送信息,看能不能接收到
首先,运行服务器。
Tomcat:

4747端口发送aaaaaa.ssss

能够接收到。
就是说,当前服务端能直接接收浏览器传输的信息的。

相关文章:
【Tomcat】第一站:理解tomcat与Socket
目录 1. Tomcat 1.1 Tomcat帮助启动http服务器。 1.2 tomcat理解: 2. 计算机网络最基本的流程 2.1 信息是怎么来的? 2.2 端口是干什么的? 3. 简单的Socket案例 服务端 客户端 启动: 3.2 在Tomcat发送信息,看…...
TQ15EG开发板教程:使用SSH登录petalinux
本例程在上一章“创建运行petalinux2019.1”基础上进行,本例程将实现使用SSH登录petalinux。 将上一章生成的BOOT.BIN与imag.ub文件放入到SD卡中启动。给开发板插入电源与串口,注意串口插入后会识别出两个串口号,都需要打开,查看串…...
Java从入门到工作4 - MySQL
一:检测数据库网络 telnet 127.0.0.1 3306 注意ip和端口后之间是空格,不需要引号 二:SQL语法 1、创建结果集 SELECT 电视机 AS typeUNION SELECT 电冰箱UNION SELECT 洗衣机UNION SELECT 空调UNION SELECT 电脑UNION SELECT 热水器UNION…...
OpenShift 4 - 多云管理(2) - 配置多集群观察功能
《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...
【鸿睿创智开发板试用】RK3568 NPU的人工智能推理测试
目录 引言 驱动移植 例程编译 修改build.sh 执行编译 运行测试 部署libc的库文件 执行测试程序 结语 引言 鸿睿创智的H01开发板是基于RK3568芯片的,瑞芯微芯片的一大特色就是提供了NPU推理的支持。本文将对其NPU推理进行测试。 驱动移植 H01的开发板已经…...
iOS swift开发系列 -- tabbar问题总结
1.单视图如何改为tabbar,以便显示2个标签页 右上角➕,输入tabbar 找到控件,然后选中,把entrypoint移动到tabbar控件 2.改成tabbar,生成两个item,配置各自视图后,启动发现报错 Thread 1: “-[p…...
四、CSS3
一、CSS3简介 1、CSS3概述 CSS3 是 CSS2 的升级版本,他在CSS2的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题。 CSS在未来会按照模块化的方式去发展:https://www.w3.org/Style/CSS/current-work.html …...
Three使用WebGPU的关键TSL
Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…...
ESP32-S3模组上跑通ES8388(30)
接前一篇文章:ESP32-S3模组上跑通ES8388(29) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回终于解析完了es8388_init函数的所有代码。本回回到调用它的地方,继续往下讲解。 我们是从ESP32-S3模组上跑通ES8388(7)-CSDN博客开始进入es8388_init函数,展开对于它的解析的…...
概率论得学习和整理24:EXCEL的各种图形,统计图形
目录 0 EXCEL的各种图形,统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图,一般是只选中1列数据(1个数组) 1.3 如何修改频度图的宽度 1.4 hist图的一个特…...
WPF中依赖属性的底层和普通属性的底层有什么不一样
WPF中依赖属性的底层 在 WPF 中,依赖属性(Dependency Property)是 WPF 属性系统的核心,它支持功能强大的特性(如数据绑定、动画、样式等)。其底层实现是围绕 DependencyObject 类展开的。以下是 WPF 中依赖…...
【Qt】drawText字体大小问题探究
背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...
Mapbox-GL 的源码解读的一般步骤
Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…...
【C++】高级分析 switch 语句的应用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯switch 语句的基本用法语法结构核心要点实例演示正确实现 期望输出错误实现错误输出 💯if 与 switch 语句的实现比较使用 if 语句使用 switch 语句比较分析 &am…...
活动预告 | Surface 来了#11:Windows 11 AI+ PC,释放 AI 办公设备的无限潜能
课程介绍 欢迎来到 Surface 来了第 11 期节目。 今年 5 月底,微软推出了专为 AI 体验而设计的全新 Windows PC 品类:Windows 11 AI PC。 微软通过 Windows 11 AI PC,进一步强调了 NPU 在运行设备端 AI 功能的重要性。并要求符合这一品类的…...
php基础:正则表达式
1.正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。 在PHP中,正则表达式一般是由正规字…...
go语言压缩[]byte数据为zlib格式的时候,耗时较多,应该怎么修改?
在Go语言中使用compress/flate包来实现Zlib格式的压缩时,如果发现压缩耗时较多,可以考虑以下几个优化方向: ### 1. 压缩级别 默认情况下,compress/flate包中的NewWriter函数使用的是默认压缩级别(BestSpeed和BestComp…...
[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)
AdaBoost AdaBoost(Adaptive Boosting)是一种Boosting算法,它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重,使那些被错误分类的样本在后续的训练中得到…...
深入了解Spring
目录 Spring基础 什么是Spring框架? Spring 包含的模块有哪些? Core Container AOP Data Access/Integration Spring Web Messaging Spring Test Spring,Spring MVC,Spring Boot 之间什么关系? Spring基础 什么是Spring框架? Sp…...
jar 包如何下载
maven官网:https://mvnrepository.com/ 点击搜索,找对应搜索结果点击...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...





