【问题背景】服务端程序可以简单地看做web服务器(用于处理静态资源)和引擎容器两大部分。在java web开发中,常用的容器Tomcat、Jetty(当然,两者都是Web服务器+引擎容器)中的web服务器部分都是基于java语言开发。通常,web服务器用于处理静态资源,遇到动态资源请求时则把请求转发出去给Servlet容器。【问题描述】可以用非java语言开发的web服务器和servlet容器组合来做web开发吗?如果原则上是可以的话,现实企业用这样的“组合方式”多吗?麻烦举例。
认证0级讲师
很显然目前没有这样的 servlet 容器,当然硬要吹毛求疵的讲我认为实现也是可能的。但是有哪个企业会去干这种事情呢,费时费力还不讨好。
servlet
应该来说,目前大部分Web服务器支持的都是CGI协议去调用动态处理程序,而Servlet本身不是支持CGI的程序,所以让其他Web程序调用Servlet,必经转发的过程。像 Apache、Nginx 等都支持CGI转Servlet的扩展库。
楼主是要实现像 Nginx + PHP-FPM 那样的动静分离吧:Nginx处理全部静态资源,PHP-FPM只处理PHP请求.Java也可以的,配置如下:
upstream appserver { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081; } server{ location ~ \.(jsp|do)$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://appserver; proxy_next_upstream error timeout invalid_header http_500 http_502 http_504; } }
一个Tomcat监听8080端口,另一个Tomcat监听8081端口, Nginx监听80端口,jsp或do等动态请求由Nginx proxy_pass到一个upstream集群,集群里配置两台Tomcat应用服务器,其中Nginx和两个Tomcat都指向同样的网站根目录。
也可以直接location / {...}把所有内容都反向代理proxy_pass给后端的两个Tomcat以满足REST需求,然后匹配css/js/jpg/png等静态文件交由Nginx处理,同样能达到动静分离的目的。
IIS跑java?有点闲得蛋疼Hosting a Java Application in IIS using HttpPlatformHandler
很显然目前没有这样的
servlet
容器,当然硬要吹毛求疵的讲我认为实现也是可能的。但是有哪个企业会去干这种事情呢,费时费力还不讨好。
应该来说,目前大部分Web服务器支持的都是CGI协议去调用动态处理程序,
而Servlet本身不是支持CGI的程序,所以让其他Web程序调用Servlet,必经转发的过程。
像 Apache、Nginx 等都支持CGI转Servlet的扩展库。
楼主是要实现像 Nginx + PHP-FPM 那样的动静分离吧:
Nginx处理全部静态资源,PHP-FPM只处理PHP请求.
Java也可以的,配置如下:
一个Tomcat监听8080端口,另一个Tomcat监听8081端口, Nginx监听80端口,
jsp或do等动态请求由Nginx proxy_pass到一个upstream集群,集群里配置两台Tomcat应用服务器,
其中Nginx和两个Tomcat都指向同样的网站根目录。
也可以直接location / {...}把所有内容都反向代理proxy_pass给后端的两个Tomcat以满足REST需求,
然后匹配css/js/jpg/png等静态文件交由Nginx处理,同样能达到动静分离的目的。
IIS跑java?有点闲得蛋疼
Hosting a Java Application in IIS using HttpPlatformHandler