- Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP 程序的首選。對於一個初學者來講,能夠這樣認爲,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,因此當你運行tomcat 時,它實際上做爲一個與Apache 獨立的進程單獨運行的。
- 訣竅是,當配置正確時,Apache 爲HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web服務器同樣,具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache服務器。目前Tomcat最新版本爲9.0。
server:至關於一個tomcat實例。接收並解析請求信息;完成相關動做後把響應結果返回給計算機。
service:每一個server包含多個service,相互獨立,僅共享JVM以及類庫。用於把鏈接器(connector)與引擎(engine)關連起來,且一個service只能有一個engine,可是能夠有多個connector。由於engine沒法直接接受鏈接器發來的數據。
connector:負責開啓socket並監聽客戶端請求、返回響應數據。多個connector監聽多個端口
engine:負責具體的處理請求,connector僅僅負責監聽,收到數據後交給engine運行。
host:在ngine中能夠包含多個host,每一個host定義了虛擬主機
context:每一個context能夠部署一個web應用。一個host能夠存在多個context。若是部署多個應用須要分別對每一個應用裝載所依賴的庫,這個步驟能夠自動能夠手動。html
tomcat其實就是一個JAVA程序,因此要運行在JAVA虛擬機中。要運行虛擬機就要先安裝JDK。前端
1.經過YUM安裝 yum install java-1.8.0-openjdk-devel 2.配置環境變量 vim /etc/profile.d/java.sh export JAVA_HOME=/usr/java/latest # 首先定義JAVA_HOME的環境變量 export PATH=$JAVA_HOME/bin:$PATH # 而後向後追加便可
###2.Tomcat的安裝
首先要從Tomcat的官網下載Tomcat,而後上傳至服務器解壓。 https://tomcat.apache.orgjava
1.將下載的軟件包解壓 tar xf apache-tomcat-VERSION.tar.gz -C /usr/local/ cd /usr/local 2.建立軟鏈接,或者將解壓的tomcat直接更名爲tomcat也能達到一樣的效果 ln -sv apache-tomcat-VERSION tomcat 3.添加環境變量 vim /etc/profile.d/tomcat.sh export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_BASE/bin:$PATH 4.建立tomcat須要的用戶 useradd tomcat 5.將安裝包的路徑下的全部屬組都改成tomcat chown -R root.tomcat /usr/local/tomcat # 設定全部者爲root,所屬組爲tomcat chown -R tomcat /usr/local/tomcat/{logs,temp,work,webapps} # 僅將須要有寫權限文件全部者改成tomcat chmod g+r /usr/local/tomcat/conf # 默認沒有權限,會致使啓動失敗 5.切換到tomcat用戶最後啓動服務便可 su - tomcat catalina.sh start # 啓動tomcat。catalina.sh命令須要先添加環境變量
bin: 腳本、以及Tomcat自身所攜帶的工具包 conf: Tomcat服務的配置文件目錄; lib: 庫文件,Java類庫,jar; logs: 日誌文件目錄; temp: 臨時文件目錄; webapps:webapp的默認目錄;至關於頁面的根目錄。部署的應用都應該在IC目錄下 work: 工做目錄,存放編譯後的字節碼文件;
建立一個測試頁面,將下面的步驟所有作完後,經過瀏覽器訪問http://IP:8080/test 便可訪問到測試的頁面node
1.建立文件夾,classes、lib、WEB-INF爲一個標準應用應該有的目錄,這裏建立僅僅爲了與標準看齊 mkidr -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF} 2.建立一個測試頁面用於檢驗Tomcat服務是否能正常提供服務 vim /usr/local/tomcat/webapps/test/index.jsp # 建立jsp測試頁面 <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> /head> <body> <% out.println("hello world"); %> </body> </html 3.重啓服務 systemctl restart tomcat 4.部署完成後在webapp目錄自動生成一些目錄 cd /usr/share/tomcat/work/Catalina # 部署完成後自動生成的test目錄下的文件 [root@localhost Catalina]# tree . . └── localhost # 默認主機站點 ├── _ ├── docs ├── examples ├── host-manager ├── manager ├── sample └── test # webpp應用名稱。自動生成如下目錄 └── org └── apache └── jsp ├── index_jsp.class └── index_jsp.java
前面講到connecotr負責接收用戶請求,而engine負責接處理用戶請求。可是connecotr並不能與engine直接通訊。因此service就是負責將connector與engine鏈接起來的組件nginx
<Service name="Catalina">
connector負責接收客戶端發來的請求,常見的鏈接有三種:http、https、ajp
進入tomcat的請求可分爲兩類:web
(1) standalone : 請求來自於客戶端瀏覽器;apache
(2) 由其它的web server反代:來自前端的反代服務器,經過反帶服務器發來的又有如下幾種;vim
<Connector port="8080" # 默認有兩個connector一個監聽http一個監聽ajp protocol="HTTP/1.1" # 若是是http能夠無需指明協議。AJP的話Protocol="AJP/1.3" connectionTimeout="20000" # 超時時長,毫秒即20s redirectPort="8443" # 若是請求的爲SSL請求就將請求轉發至8443端口 address: # 監聽的IP地址;默認爲本機全部可用地址;不寫就監聽本地全部IP maxThreads: # 最大併發鏈接數,默認爲200; enableLookups: # 是否啓用DNS查詢功能;將IP地址解析爲域名。關閉提高性能 acceptCount: # 等待隊列的最大長度; secure: # =true的表示使用SSL通訊 sslProtocol: # 設定使用哪一個SSL協議,一般在tomcat上不建議使用SSL,速度太慢 />
Engine組件負責處理髮來的請求。
Engine是Servlet實例,即servlet引擎,其內部能夠一個或多個host組件來定義站點; 一般須要經過defaultHost來定義默認的虛擬主機。
示例瀏覽器
<Engine name="Catalina" defaultHost="localhost"> name=Catalina # 引擎的名稱 defaultHost="localhost" # 默認的響應主機站點。若是找不到合適,或者域名不匹配選擇默認host jvmRoute= # Tomcat作集羣時的調度標誌,相似於HAproxy的會話標識。 # 在基於cookie綁定時會用到 ... <Engine>
Host組件位於engine內部用於接收請求並進行相應處理的主機或虛擬主機tomcat
<Host name="localhost" # 設定爲主機名便可 appBase="webapps" # webapps的默認存放路徑(相對路徑,能夠用絕對路徑)。至關站點根 unpackWARs="true" # true爲自動展開WAR文件 autoDeploy="true"> # 是否開啓自動部署功能。 #unpackWARS、autoDeploy定義了WebAPP爲WAR格式且在根下時自動部署 </Host>
包含在Host標籤裏。
若是在一個主機上部署多個app的話,Context就能夠用來定義不一樣app對應的路徑。
<Context path="/PATH" # 網頁的RUL docBase="/PATH/TO/SOMEDIR" # 真實路徑。 reloadable=""/> # 若是爲true說明能夠從新裝載
Valve存在多種類型:
定義訪問日誌:org.apache.catalina.valves.AccessLogValve
定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
<Valve className="org.apache.catalina.valves.AccessLogValve" # 定義記錄日誌要訪問的類 directory="logs" # 日誌文件的目錄路徑,默認在/var/log/tomcat下 prefix="node1_test_access_" # 日誌文件的前綴 suffix=".log" # 日誌文件的後綴 pattern="%h %l %u %t "%r" %s %b" /> # 記錄日誌的格式 pattern="%h %l %u %t "%r" %s %b" />