對語言之間優點這個問題,能夠寫幾本書來具體闡述. 我嘗試簡單地說一點。不見得對,也不可能完整,僅供參考。前端
互聯網興起,靜態頁面不能知足複雜的交互需求. 出現了動態技術.
史前時期動態Web 開發多采用CGI 技術來實現.
CGI 將腳本做爲單獨的進程運行, 每一個請求都使用環境變量、標準輸入和標準輸出來與它 "通訊 "。
這是種互對低效的運行方式. 出現了相似isapi, ASP 這樣技術(ASP 1.0 發佈於1996年12月, 做爲 IIS 3.0的一部分). 方便多了,有了session管理, 有了內置對象.
但也有明顯缺點,代碼與頁面混在一塊兒.node
接下來提出Servlet標準,參考實現是Tomcat.
Tomcat的做爲Servlet 規範一個開源的參考實現, 最初是Sun公司在1998年11月發佈的. 核心人物是 James Duncan Davidson.
Tomcat 3.0合併了Sun捐贈的Java Web Server代碼, 這個版本實現了Servlet 2.2和JSP 1.1規範.
目前由Apache軟件基金維護.python
它是一個開放的標準,引起了當時的一些開發熱潮,
產生了大量的中間件,也稱爲應用服務器, 如WebSphere, WebLogic, GlassFish, JBoss, Jetty, Resin,金蝶的Apusic. 這裏面有的是完整實現了J2EE標準.如WebLogic:
標準具體有,Servlet, JSP, EJB, JDBC, Java Message Service, JTA, XML相關, JAAS 等等.
有的只是一小部分實現,如Tomcat:只有Servlet, JSP, Java EL, JNDI等.
對企業開發來講,這樣的標準有諸多的好處,解決了不少須要重複解決的問題,如消息隊列,分佈式事務等等. 應用只需根據接口開發就能夠了,實現由應用服務器來完成.
由於複雜,太重,適合中等以上團隊開發.ajax
Tomcat/Servlet的體系之因此這麼設計,基於幾點考慮:算法
方便擴展
遵循標準化定義
保持版本間的兼容性
好處是穩定,值得依賴,不會爲個別商業機構左右.
很差的是地方是升級相對慢, 與nodejs社區的飛速發展相比, Java顯得沉重而緩慢.
但這何嘗不是好事, 對於開發人員來講, 這是很是好的長效投資. 保證工做經驗的積累是有效的, 而不是忽略業務追逐技術去適應迎接不暇的新版本.
Python 2到Python 3的過渡便是斷堐式的. 而Java最先的代碼仍能夠跑在今天的虛擬機上.
Node.js也存在不少版本間的問題, 但由於是腳本,而不是編譯,出錯時不會告訴你是版本的是問題, 而是報告各類奇怪的異常. 固然,這是題外話了.數據庫
Tomcat 內部的體系結構
Tomcat 有很是優秀的結構定義
核心部分有:
Catalina - 實現Servlet API
Coyote - HTTP協議棧
Jasper - JSP 動態編譯器及加載器, 負責把JSP頁面編譯成Servletjson
能夠看出以上所有的核心是 Servlet 規範.後端
做爲互聯網的基礎設施,Tomcat歷經20年,沒有本質上改動, 可見當初設計才的洞見.api
能夠與其媲美的有估計只有以太網口的設計, HTTP的設計, TCP/IP 的設計,USB接口的設計.tomcat
Tomcat 的配置項與代碼隔離, 我的認爲這是Tomcat設計最精良的地方
你能夠在不改代碼的前提下,對tomcat各個層面環節進行配置,從而實現多種協議多種特性的支持
與Python和Nodejs的Web Server的比較
都遵循HTTP/1.0 and HTTP/1.1 協議
但用Java寫的Web 應用支持更高層的Servlet 接口, 能夠在不一樣應用服務器中運行,不須要對代碼進行調整,
Python和Nodejs都有不少Web Server的實現, 但這些Servers之間顯然沒有更高層次的抽象, 如須要切換,須要作大量改動和測試.
假設在你Server A 上作開發, 突然發現Server B 上有你想的的特性, 你只有大幅改動才行.
Python 下的Web服務器, 核心標準 WSGI
Python 下也有不少Web Server 軟件,如CherryPy WSGI Server, Gunicorn, Tornado, Twisted Web, uWSGI, Waitress WSGI Server等等.
這個服務器都支持[WSGI]2規範.
須要指出的是WSGIv1.0.1出現的時間是: 26-Sep-2010, 比Java相應規範晚了十多年. 出來時已是羣雄混戰,想統一已經很難了,
也使得WSGI 是一個相對簡單,容易實現的規範, 以此來吸引服務器開發者. 在此以前則是 CGI, FastCGI, mod_python三分天下的局面.
Node.js下的Web服務器:light-server, live-server ,lite-server, http-server
基本以輕量級的靜態文件服務器爲主。
總結一下
名稱 Java Python Node.js典型的WebServer Tomcat Tornado http-server標準 Servlet WSGI 無服務器端模板 JSP,Freemarker tornado.template CoffeKup, Swig, Jade典型 Web框架 Spring MVC Flask, Django Express數據庫相關 JDBC, Hibernate SQLAlchemy Moogoose多線程與分佈式 容易 不清楚 不清楚日誌 Log4j, Slf4j 不清楚 不清楚遠程調試 容易 不清楚 不清楚結論:各有優點,如Nodejs配合前端模板技術如Vue.js採用先後端分離的json/ajax做爲數據格式在一些場景下頗有吸引力。Python在作數據分析和人工智能方面也有不少能夠直接使用的算法庫。Java的優點更在於一應俱全。各方面都能找到優秀的組件。但開發起來複雜一些,更適合有必定規模的團隊採用。