栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

再看tomcat的体会

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

再看tomcat的体会

计算机网络的类比_数字公民某杨的博客-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);
	}

	
	if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) {	//UDP编程
		perror ("socket");
		exit (1);
	}

	
	bzero (&sin, sizeof (sin));

	sin.sin_family = AF_INET;
	sin.sin_port = htons (SERV_PORT);	//网络字节序的端口号
#if 0
	sin.sin_addr.s_addr = inet_addr (argv[1]);
#else
	if (inet_pton (AF_INET, argv[1], (void *) &sin.sin_addr) != 1) {
		perror ("inet_pton");
		exit (1);
	}
#endif
	printf ("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("");
        pw.println("");
        pw.println("");
        pw.println("");
        pw.println("Document");
        pw.println("");
        pw.println("");
        pw.println("HelloWorld");
        pw.println("");
        pw.println(";
        pw.flush();
        pw.close();
    }
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034510.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号