什麼是TOMCAT?html
Tomcat和其餘web服務器同樣,能夠響應HTML的請求,實際上Tomcat是Apache的服務器的擴展,可是運行時他是獨立運行的。另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式,可是它的靜態頁面處理能力比較差。可使用動靜分離來提升站點性能。前端
JAVAjava
Java的技術體系有三個分類:java2SE,java2EE,jave2ME(移動開發)。jdk其實至關於java2SE。java2EE至關因而在jdk中添加了一些企業級類庫,像jsp,servlet,javamail...。servlet是爲java開發提供便捷的構建web server接口,可以在前端爲咱們所寫的web應用程序提供支持http protocol的解析功能。能接受客戶端請求,把請求轉換成本地某個代碼的執行,並把代碼執行的結果經過響應報文的方式響應給客戶端。Tomcat就是java2EE規範的不完整實現,爲啥叫不完整呢?由於Tomcat只是實現了一部分重要經常使用的類庫,不是全部的類庫。nginx
JSP處理流程程序員
程序員寫的Jsp代碼經過jasper這個中間引擎轉換成純java代碼,java代碼須要先編譯成字節碼才能運行,經過javac compiler編譯成class類文件。類文件是servlet格式,須要調用servlet類庫到JVM中,class文件才能在JVM中運行。運行java代碼依賴不少類庫,運行前必需要加載到jvm中。因此要構建一個jsp網站,須要jdk+servlet類庫,jsp類庫。Tomcat就是企業中經常使用來實現web
具體流程:vim
.jsp----->jasper(屬於jsp類庫)----->.java----->java compiler(屬於servlet類庫)----->.class----->jvm(Java虛擬機)centos
Tomcat的安裝tomcat
]#yum install -y java-1.8.0-openjdk-devel <===前提 ]#java -version <===查看環境準備 openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode) ]#yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps tomcat-lib <===後面不是必須裝,建議裝上
冷部署應用測試bash
]#mkdir -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF} ]#cd /usr/share/tomcat/webapps/test ]#vim index.jsp <===測試頁面 <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world"); %> </body> </html> ]#systemctl start tomcat
測試
在實際應用中,Tomcat是不直接接受前端客戶端的請求,前端會有調度器來調度jsp請求至tomcat server。下面咱們來簡單實現tomcat的調度。
第一種:經過http反向代理至tomcat(http和tomcat在同一臺主機上),使用proxy_http_module。
]#yum install httpd -y ]#cd /etc/httpd/conf.d ]#vim http-tomcat.conf <VirtualHost *:80> servername www.a.com documentroot /usr/share/tomcat/webapps/ROOT proxyrequests off <===關閉正向代理 proxyvia on <===響應報文中添加via首部 proxypreservehost on <proxy *> require all granted <===包括下面,這兩個受權僅在centos7以上版本中使用。以前的版本不須要 </proxy> proxypass / http://127.0.0.1:8080/ <===默認tomcat是在8080端口 proxypa***everse / http:127.0.0.1:8080/ <location /> require all granted </location> </virtualhost>
第二種:經過http的proxy_ajp_module反向代理至tomcat
]#vim ajp-tomcat.conf <VirtualHost *:80> servername www.a.com documentroot /usr/share/tomcat/webapps/ROOT proxyrequests off proxyvia on proxypreservehost on <proxy *> require all granted </proxy> proxypass / ajp://127.0.0.1:8009/ <===ajp默認經過8009監聽 proxypa***everse / ajp:127.0.0.1:8009/ <location /> require all granted </location> </virtualhost>
第三種:經過nginx反向代理
]#vim nginx.conf server { root /usr/share/tomcat/webapps/ROOT; index index.jsp index.html location ~* \.(jsp|do)$ { proxy_pass } ...... }
上面三種方法能夠根據本身需求和生產環境選擇,除了nginx和http有處理能力差距以外,其他並無差異。這樣經過上面的代理後,動態jsp文件轉發到tomcat處理,靜態文件代理本身處理,這樣能夠實現動靜分離,固然還能夠分的再細一點,這裏就再也不贅述了。