Java由兩個部份組成, Java語言和Java虛擬機器, Java虛擬機器是Java Virtual Machine, JVM. Java網頁程式和Tomcat都是跑在JVM上的用Java語言寫的Java程式. 在JVM上跑的不僅有Java語言, 還有Scala, Kotlin, Clojure, Groovy,JRuby,Jython,...等等. 而JVM也有許多, Oracle的Java, OpenJDK, Icedtea, Android的Dalvik.,...等等. 意思是, Java並非單純的只是Java語言, 而JVM提供一個強大的運行平台.
關於您的問題, 要如何在Apache, IIS, Nginx...等上跑Java網頁程式?
Apache, IIS, Nginx,...等是網站伺服器. 由於這些網站伺服器不是JVM也沒有提供JVM環境, 因此Java網頁程式及其封裝WAR或EAR不能在非JVM的Apache, IIS, Nginx上跑. 而Java網頁程式是由跑在JVM上的Java網站伺服器執行, 例如, Tomcat網站伺服器. 當然, 除了Tomcat之外還有許多跑在JVM上網站伺服器, 如JSE版本的Tomcat, Undertow, Jetty, Resin, JEE版本的Weblogic, Jboss, Glassfish,Wildfly,TomEE, 等. 那麼, Apache, IIS, Nginx可以扮演什麼角色? 當作反向代理伺服器, 將HTTP的請求轉給在跑JVM上的網站伺服器. 當然, 跑在JVM上的網站伺服器也可以直接接受http請求, 不需要Apache, IIS, Nginx的.
直接模式:
HTTP請求-->[Tomcat, Resin, Jetty, 或Undertow...]-->解譯Java網頁程式
HTTP請求-->[JBoss, Wildfly, TomEE, 或Weblogic...]-->解譯Java網頁程式
反向代理模式:
HTTP請求-->[Nginx, Apache]-->[Tomcat, Resin, Jetty, Undertow]-->解譯Java網頁程式
HTTP請求-->[Nginx, Apache]-->[JBoss, Wildfly, TomEE, Weblogic]-->解譯Java網頁程式
果然是大師…回答超清楚
請教前輩
有沒有Tomcat設定要跑哪個網頁程式的資訊可參考呢?因為我將會有2個不同網站服務都會透過tomcat來執行,一個是JAVA網站,另外一個是confluence套裝網頁
謝謝
WAR只是封裝, Tomcat會將之解封裝.
例如:
https://tomcat.apache.org/tomcat-6.0-doc/appdev/sample/
Confluence:
https://confluence.atlassian.com/doc/switching-to-apache-tomcat-217743526.html
建議您找本Tomcat的書.
感謝,想請教我把WAR檔案放置在/var/lib/tomcat7/webapps,為什麼它不會自動解WAR檔呢?
我參考此篇說明:http://stackoverflow.com/questions/5109112/how-to-deploy-a-war-file-in-tomcat-7
謝謝
log是您最好的朋友. 看看發生了什麼事, 例如:
logs/catalina.2017-03-22.log
了解,已經可以執行了,但要如改成由預設8080 PORT 改成80 PORT來執行tomcat網站呢?我有試著使用mod_proxy的方式,但是無法執行,有哪幾個地方需要設定到呢? (因為我的confluence已經可以設定mod_proxy的方式來走80 PORT,我想透過apache的virtual host,來新增tomcat的網站來走80 PORT)
煩請前輩指點 感謝