计算机网络的类比_数字公民某杨的博客-CSDN博客

上次聊了计算机网络,好比你去外地去做一件什么事,网络就是你到达那个地方的方式和过程。而到了目的地之后,又怎么办呢。

叫做进入到目的地场所“办事儿”。

这个场所有很多种类,但基本都提供一些基本功能。比如当饭店的人看到你过来,会问你打尖还是住店,这就好比从tcp或者udp这里把二进制的数据搞成文本,可以阅读了。

饭店早已经在那里,饭店里面应该有行李部,餐饮部,客房部,后勤部等等,其实每个部都代表一个Servlet。当启动一个tomcat,部署一个饭店应用,好比在虚拟世界建造了一个饭店。然后就创建了各个部门的servlet对象,就是每个部,每个部里面都有服务员,就是service,service是线程方式的,而tomcat和servlet就是进程方式。

java作为一门更高级的语言,相比C语言来说,确实有很多工作已经提前做了。如果要在C语言那里做一个服务器,需要编程一段,里面有很多低阶的函数,例如socket,read,write等,这些都是操作系统内核提供的,也就是比硬件接口高那么一两个等级。。而不是tomcat那样拿来即用的代码。但是tomcat,包括java的底层实现,都是C语言或者c++,或者编译语言的。例如下面这段代码,里面到底是ipv4还是ipv6,端口号多少,客户说哪国语言,所有细节都需要敲定。

int main (int argc, char *argv[])
{int fd = -1;int port = SERV_PORT;port = atoi (argv[2]);if (port < 0 || (port > 0 && port <= 5000)) {usage (argv[0]);exit (1);}struct sockaddr_in sin;if (argc != 3) {usage (argv[0]);exit (1);}/* 1. 创建socket fd */if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) { //UDP编程perror ("socket");exit (1);}/*2.1 填充struct sockaddr_in结构体变量 */bzero (&sin, sizeof (sin));sin.sin_family = AF_INET;sin.sin_port = htons (SERV_PORT);  //网络字节序的端口号
#if 0sin.sin_addr.s_addr = inet_addr (argv[1]);
#elseif (inet_pton (AF_INET, argv[1], (void *) &sin.sin_addr) != 1) {perror ("inet_pton");exit (1);}
#endifprintf ("multicast started!\n");char buf[BUFSIZ];while (1) {fprintf (stderr, "pls input string:");bzero (buf, BUFSIZ);if (fgets (buf, BUFSIZ - 1, stdin) == NULL) {perror ("fgets");continue;}sendto (fd, buf, strlen (buf), 0, (struct sockaddr *) &sin, sizeof (sin));if (!strncasecmp (buf, QUIT_STR, strlen (QUIT_STR))) {    //用户输入了quit字符printf ("Client is exited!\n");break;}}close (fd);return 0;
}

java语言就是屏蔽了很多这些和底层打交道的工作,直接面向应用本身了,专注的是我怎么给你打尖,怎么服务你的住店,而不是说做很多前台基本工作了。比较一下下面这段java代码:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloWorld extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter pw = resp.getWriter();
        pw.println("<!DOCTYPE html>");
        pw.println("<html lang=en>");
        pw.println("<head>");
        pw.println("<meta charset=UTF-8>");
        pw.println("<title>Document</title>");
        pw.println("</head>");
        pw.println("<body>");
        pw.println("<font color=blue>HelloWorld</font>");
        pw.println("</body>");
        pw.println("</html>;
        pw.flush();
        pw.close();
    }
}

一切复杂的细节都给你包装到两个对象,一个叫做HttpServletRequest req,另一个叫作HttpServletResponse resp,用白话解释,就是客户的req,请求是怎么打尖,怎么住店,吃几个碟,要几个洗脚的,要几个搓背的,都在resp里面已经规定好了,team work。

再看tomcat的体会相关推荐

  1. 小米note2不上Android9吗,我的第二部小米手机,小米9简单到不能再简单的简单体会...

    我的第二部小米手机,小米9简单到不能再简单的简单体会 2019-03-03 01:15:20 0点赞 0收藏 3评论 在张大妈家一直默默的潜水,撸了不少白菜,也买了不少值友干货,但从未发表过一篇文章, ...

  2. [萌新必看]TomCat的WebAPP经常遇到的问题,诸如servelt404和SysTem.out.print无法在控制台输出等。

    入门学习JAVAWEB,相信会有很多的人会遇到System.out.print无法编译,直接爆红无法编译,乃至Servelt404灵异报错. 本贴不一定能100%解决你的问题,但是这两点你可以看看~ ...

  3. qtdesigner怎么实现菜单栏跳转_3种公众号菜单栏设置类型,手把手教你做,不会的话那就再看一遍...

    常见的菜单栏设置怎么去设置呢?在我们的公众号左侧的菜单栏中,你可以找到我们的自定义菜单,这个功能,点击进去之后,你就可以看到菜单的内容,它可以有三种类型可选:一种叫发送消息,一种叫跳转网页,一种叫跳转 ...

  4. 长得类似铁甲小宝的机器人_铁甲小宝:小时候只顾看机器人忽略重点,长大后再看:是我太天真...

    铁甲小宝:小时候只顾看机器人忽略重点,长大后再看:是我太天真 铁甲小宝相亲大家都是看过的,作为早期的三大人特摄之一,铁甲小宝针对的完全就是儿童,小时候我们也是很喜欢这部作品,只是现在在荧幕上已经很难看 ...

  5. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  6. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升

    android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升 转载于:https://www.cnblogs.com/jeanschen/p/3507512.html

  7. 再看数据库——(2)视图

    概念 *是从用户使用数据库的观点来说的. *从一个或多个表(视图)中导出来的 *一个虚表,或者说查询表 为什么要用视图呢? 一是简单,看到的就是需要的.视图不仅可以简化用户对数据的理解,也可以简化他们 ...

  8. 以前看书时记得一些笔记(二),很早了,现在再看都有些看不懂了

    MFC学习: 1.CObject类为MFC总类,该类下面有一个重要的类CCmdTarget.而CCmdTarget类下面又有四个重要的继承类,分别为:CWinThread.CDocument.CDoc ...

  9. 再看结构体对齐与小端联合问题

    再看结构体对齐与小端联合问题 @(组成原理) 先再次回看一道题目的分析. (2012.15)某计算机存储器按字节编址,采用小端方式存放数据.假定编译器规定int型和short型长度分别为32位和16位 ...

最新文章

  1. c++数据结构队列栈尸体_一本正经的聊数据结构(3):栈和队列
  2. 【英语学习】【Daily English】U11 Work L03 He is a had guy to work for
  3. django 按钮的样式_Python学习第五十六天记录打call:Django视图
  4. 给定字符串,实现大小写之间的转换
  5. 剑指offer面试题[41]-和为s的两个数VS和为s的连续正数序列
  6. 再让大家清爽一下,给加班的oscer们,哈
  7. javaweb图书管理系统源码
  8. 怎样用计算机制作漫画,用电脑绘制漫画需要些什么?步骤是什么?
  9. 机器学习之 kd 树
  10. Neverland Test 2.0
  11. InnoDB---深入理解事务提交--02
  12. linux系统查询服务器型号,Linux系统查看服务器型号
  13. 网站备案后 换服务器,网站备案后更换服务器
  14. 时钟周期是干什么的?底层原理是什么?
  15. ZOJ 3886 Nico Number (线段树)
  16. 2021年中国互联网人才招聘行业发展现状及发展趋势分析[图]
  17. IOS 使用IconFont 图标
  18. websocket的封装和使用
  19. Python调整Excel格式
  20. html不传递权重,【信阳seo】这6种不传递权重的链接你知道吗?

热门文章

  1. bootstrap 选项卡_使Bootstrap选项卡与砌体一起玩
  2. git回滚reset到指定分支
  3. mysql federated 缺点_mysql federated 慢
  4. asp.net mvc源码分析-Controllerl篇 ControllerDescriptor
  5. 高考过后选专业还是学校
  6. 生产车间调度的六大特点
  7. 移动通信核心网需引入NFV
  8. ognl表达式语法(取值,赋值,调用方法,调用静态方法,创建对象List,Map)
  9. Hello 莫队----莫队算法小结
  10. 上传文件转换html异常,JS 文件互转、10 个 HTML 文件上传技巧、Web 用户体验设计提升指南、奇怪的知识——位掩码 | 思否技术周刊...