=Start=
缘由:
因为Java属于自学的,不那么系统,所以有时候在碰到一些名词时还不太理解它的含义和作用,以及它和其它概念之间的关系。这里要整理和总结的就是在Java Web中常见的几个概念和它们之间的关系。如果有不对的地方,还请帮忙指出,谢谢。
正文:
参考解答:
# 各自的概念
Servlet
首先,在代码层面,Servlet其实就是一个接口:
public interface Servlet { public void init(ServletConfig config) throws ServletException; public ServletConfig getServletConfig(); public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; public String getServletInfo(); public void destroy(); }
其次,Servlet这个接口起到的是一个「规范」的作用!Servlet接口定义了一套处理网络请求的规范,所有实现Servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法init()和destroy(),还有一个处理请求的service(),也就是说,所有实现Servlet接口的类,或者说,所有想要(按照这个规范)处理网络请求的类,都需要回答这三个问题:
- 你初始化时要做什么?(init())
- 你接受到请求时要做什么?(service())
- 你销毁时要做什么?(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,即超文本传输协议,进行传输通信。”
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 Servlet, JavaServer 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 HTTP, HTTP2, DNS and more protocols support, including the ability to run inside a servlet container, support for WebSockets, integration with Google Protocol Buffers, SSL/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中常见服务、组件所处位置
参考链接:
- servlet的本质是什么,它是如何工作的?
- 图解 & 深入浅出 JavaWeb:Servlet必会必知
- Jsp和Servlet有什么区别?
- Java Servlet简介
- Java – Servlet究竟是什么
- Servlet话题
- An Introduction to Tomcat Servlet Interactions
- ==
- https://en.wikipedia.org/wiki/Apache_Tomcat
- ==
- https://en.wikipedia.org/wiki/Jetty_(web_server)
- ==
- https://en.wikipedia.org/wiki/Netty_(software)
- https://en.wikipedia.org/wiki/Apache_MINA
- Netty 系列之 Netty 高性能之道
- ==
- Servlet, Tomcat, Jetty, Netty, Mina 它们都是什么?
=END=
《 “Servlet, Tomcat, Jetty, Netty分别是什么?” 》 有 4 条评论
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提供的特定的事件回调方法
`
各种Java应用服务器对比
https://blog.csdn.net/zollty/article/details/86136182
`
Apache Tomcat
1、免费的开源代码 ,且被广泛使用,市场占有率40%以上,且作为很多企业的生产服务器使用。
2、轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用。
3、占用的系统资源小,启动快。
Jetty
优点:
1、免费的开源代码 ,市场占有率达到30%,特别是在一些微小型项目中当中嵌入式服务器使用。
2、轻量级,运行速度快。
3、易用-默认配置可以满足大部分的需求;将 Jetty 嵌入到应用程序当中只需要非常少的代码。
4、易嵌入-Jetty 设计之初就是作为一个优秀的组件来设计的,这也就意味着 Jetty 可以非常容易的嵌入到应用程序当中。从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。
5、可扩展-Jetty 设计了非常良好的接口,用户可以非常方便地对 Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。
JBoss
1、开源代码 ,标准的开源J2EE容器
2、性能好,执行效率高
3、支持集群,可伸缩性强。
4、支持热部署
另外,JBOSS还提供EAP版本,即企业版,支持收费服务(提供官方的支持维护,我司曾经就是JBOSS的一个大企业客户,使用效果还是很不错的)。
BEA WebLogic (收费)
优点:
1、功能强,支持的标准多,使Web应用系统的实施更为简单。
2、支持集群,可扩展性强
3、可靠性-其容错、系统管理和安全性能,已经在全球数以千记的关键任务环境中得以验证。
IBM WebSphere (收费)
和WebLogic类似。两者不相上下,价格也差不多。
区别是:
WebLogic是BEA公司推出的,后面被Oracle收购。
WebSphere 是IBM的。两者生态圈略有不同。比如IBM还有IBM MQ,IBM BUS等,Oracle也有类似的方案。
`
servlet的本质是什么,它是如何工作的?
https://www.zhihu.com/question/21416727
`
这个提问的最大一个bug,就是以为servlet是很复杂的东西,事实上,servlet就是一个Java接口,interface! 打开idea,ctrl + shift + n,搜索servlet,就可以看到是一个只有5个方法的interface!
所以,提问中说的网络协议、http什么的,servlet根本不管!也管不着!
那servlet是干嘛的?很简单,接口的作用是什么?规范呗!
servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:
你初始化时要做什么?
你销毁时要做什么?
你接受到请求时要做什么?
这是Java给的一种规范!
`
详解http报文(2)-web容器是如何解析http报文的
https://mp.weixin.qq.com/s/3wLGxfaGxx–e97RtXR8Qg