Servlet, Tomcat, Jetty, Netty分别是什么?

=Start=

缘由:

因为Java属于自学的,不那么系统,所以有时候在碰到一些名词时还不太理解它的含义和作用,以及它和其它概念之间的关系。这里要整理和总结的就是在Java Web中常见的几个概念和它们之间的关系。如果有不对的地方,还请帮忙指出,谢谢。

正文:

参考解答:

# 各自的概念

Servlet

首先,在代码层面,Servlet其实就是一个接口

其次,Servlet这个接口起到的是一个「规范」的作用!Servlet接口定义了一套处理网络请求的规范,所有实现Servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法init()和destroy(),还有一个处理请求的service(),也就是说,所有实现Servlet接口的类,或者说,所有想要(按照这个规范)处理网络请求的类,都需要回答这三个问题:

  1. 你初始化时要做什么?(init())
  2. 你接受到请求时要做什么?(service())
  3. 你销毁时要做什么?(destroy())

J2EE  6文档的介绍:

A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.

Servlet 是运行在Web服务器的Java小程序。Servlet可以获取并针对Web客户端的请求作出响应。一般情况下,通过HTTP,即超文本传输协议,进行传输通信。”

综上,Servlet是J2EE 规范中的一种,主要是为了扩展Java作为Web服务的功能。

Tomcat

Apache Tomcat, often referred to as Tomcat Server, is an open-source Java Servlet Container developed by the Apache Software Foundation (ASF). Tomcat implements several Java EE specifications including Java ServletJavaServer Pages (JSP), Java EL, and WebSocket, and provides a “pure Java” HTTP web server environment in which Java code can run.

Tomcat是一个由Apache软件基金会(ASF)开源的Java Servlet容器。Tomcat实现了一些Java EE规范,包括Servlet,JSP,Java EL和WebSocket;同时提供了一个纯Java的HTTP Web服务运行环境。

Tomcat 4.x was released with Catalina (a servlet container), Coyote (an HTTP connector) and Jasper (a JSP engine).

Three new components were added with the release of Tomcat 7:
Cluster / High availability / Web application

Jetty

Eclipse Jetty is a Java HTTP (Web) server and Java Servlet container. While Web Servers are usually associated with serving documents to people, Jetty is now often used for machine to machine communications, usually within larger software frameworks. Jetty is developed as a free and open source project as part of the Eclipse Foundation.

Jetty是一个Java HTTP(Web)服务器和Java Servlet容器。尽管Jetty通常被人们记录成Web服务器,但是Jetty现在主要被用于大型软件架构中机器之间的通讯。Jetty是被作为Eclipse基金会的一部分来开发的开源项目。

Netty

Netty is a non-blocking I/O client-server framework for the development of Java network applications such as protocol servers and clients. The asynchronous event-driven network application framework and tools are used to simplify network programming such as TCPand UDP socket servers.[2] Netty includes an implementation of the reactor pattern of programming. Originally developed by JBoss, Netty is now developed and maintained by the Netty Project Community.

Besides being an asynchronous network application framework, Netty also includes built-in HTTPHTTP2DNS and more protocols support, including the ability to run inside a servlet container, support for WebSockets, integration with Google Protocol BuffersSSL/TLS support, support for SPDY protocol and support for message compression. Netty has been actively developed since 2004.[3]

As of version 4.0.0, Netty also supports the usage of NIO.2 as a backend, along with NIO and blocking Java sockets.

Netty 是一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。

# 各自的适用场景、范围

  • 现在很少有人直接裸写 Servlet ,一般都基于某个 Web 框架(比如:Spring Boot)来开发Web应用,但是加深对 Servlet 的理解对于个人的成长以及一些问题的分析和定位会很有帮助。
  • Tomcat和Jetty一般作为Servlet容器和Web服务器使用,性能也不错(大概几千 QPS的样子)。
  • Netty主要用于对性能要求比较高的通信场景,如果处理的好的话性能会很高(几万、几十万 QPS)。

# Java Web中常见服务、组件所处位置

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4073.html

《Servlet, Tomcat, Jetty, Netty分别是什么?》上有1条评论

  1. netty简介及HTTP实现Demo
    https://www.jianshu.com/p/cfd2c037dd7b

    二、netty的主要功能

    netty的主要功能有三大点:
    1.作为http服务器,处理请求和响应,使用方式和springmvc/strus2类似,但是netty并没有实现servlet标准(实现servlet标准可以实现参数绑定,方便获取参数),也没有实现路由规则 --> 这就使得netty的吞吐量比tomcat这些更高,但开发效率相对低一些
    2.socket开发,rpc方式,支持自定义协议
    3.netty支持类似websocket的长连接开发,http2.0之前都是短连接(过一段时间自动断掉)

    三、netty的开发流程

    无论是基于netty进行HTTP服务器开发,还是进行socket开发,抑或是长连接开发,netty代码的开发流程主要有以下三个步骤:
    1.编写服务器,定义boosGroup和workerGroup,启动ServerBootstrap
    2.在服务器里面使用Handler或childHandler去启动Initailizer,在Initailizer里关联着请求的诸多handler
    3.在handler里面覆写netty提供的特定的事件回调方法

发表评论

电子邮件地址不会被公开。 必填项已用*标注