您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java容器Tomcat等中間價原理、安裝、配置和使用方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java容器Tomcat等中間價原理、安裝、配置和使用方法”吧!
操作系統,中間件,數據庫,并稱軟件系統領域三大高地。中間件是處于操作系統和應用程序之間的軟件,也有人認為它應該屬于操作系統中的一部分。中間件的作用,主要是為復雜的應用程序抽象出通用的公共部分,以降低應用開發的復雜程度。
因此,中間件隨著客戶需求的更新以及技術條件的變革,得到了不斷地發展。 中間件的發展,經歷了TM監控器、交易中間件、消息中間件、ORB中間件、應用服務器等階段。目前用戶的需求已經從純粹追求單方面的功能如事務、交易、消 息逐漸上升到需要一個整合平臺,而技術上,則從基于C、以及CORBA的技術、發展到J2EE。現在,J2EE應用服務器是市場上的主流的中間件。 從整個軟件產業來說,中間件搭建了應用與技術之間的橋梁,成為軟件產業鏈條上不可或缺的一環,其作用巨大。從市場上看,中間件市場每年的增長超過了整個軟件行業的增長。
國內中間件市場主要被兩大國外廠商IBM和BEA壟斷。他們提供以J2EE應用服務器為核心的中間件產品,在銀行、證券、電 信、甚至政府等行業中得到廣泛應用。電子商務的倡導者,IT業界的巨頭IBM在1999推出應用服務器WebSphere,憑借IBM的整體影響力進行銷 售,在金融等行業根基很深。 BEA是一家專門致力于中間件開發的公司。它的應用服務器產品Weblogic發布時間早,在國外電子商務中已經廣泛應用。 該公司主要面向行業和高端市場,目前在國內電信及證券行業占據主要地位。Sun公司本是Unix工作站的硬件廠商,但隨著其倡導的JAVA技術在 Internet應用中的地位越來越重要,并且J2EE已成為業界標準,Sun已經成為Internet技術的領頭人之一。而Sun在近兩年中收購了三家 應用服務器廠商,便是對該技術最大的肯定。
在全球市場,IBM、BEA、Sun、Iona、Oracle、Sybase等大型應用服務器 供應商正暗戰不斷。然而讓人遺憾的是,在這些如火如荼的新技術風暴中,我們卻始終難覓國產中間件廠商的身影。國內企業在應用服務器的選擇上,不僅僅要承受 國外廠商巨額的費用,面臨著本地支持不夠的問題,還涉及到國家信息安全等深層次的考慮。國內軟件廠商和國內企業均處于比較尷尬的境地。
下面我們就對主流Java容器Tomca下詳細說明:
(一)Tomcat簡介
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,它早期的名稱為catalina,后來由Apache、Sun 和其他一些公司及個人共同開發而成,并更名為Tomcat。Tomcat 是一個小型的輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選,因為Tomcat 技術先進、性能穩定,成為目前比較流行的Web 應用服務器。Tomcat是應用(java)服務器,它只是一個servlet容器,是Apache的擴展,但它是獨立運行的。目前最新的版本為Tomcat 8.0.24 Released。
Tomcat不是一個完整意義上的Jave EE服務器,它甚至都沒有提供對哪怕是一個主要Java EE API的實現;但由于遵守apache開源協議,tomcat卻又為眾多的java應用程序服務器嵌入自己的產品中構建商業的java應用程序服務器,如JBoss和JOnAS。盡管Tomcat對Jave EE API的實現并不完整,然而很企業也在漸漸拋棄使用傳統的Java EE技術(如EJB)轉而采用一些開源組件來構建復雜的應用。這些開源組件如Structs、Spring和Hibernate,而Tomcat能夠對這些組件實現完美的支持。
(二)Tomcat的架構:
Tomcat 6支持Servlet 2.5和JSP 2.1的規范,它由一組嵌套的層次和組件組成,一般可分為以下四類:
—頂級組件:位于配置層次的頂級,并且彼此間有著嚴格的對應關系; —連接器:連接客戶端(可以是瀏覽器或Web服務器)請求至Servlet容器, —容器:包含一組其它組件; —被嵌套的組件:位于一個容器當中,但不能包含其它組件;
各常見組件: 1、服務器(server):Tomcat的一個實例,通常一個JVM只能包含一個Tomcat實例;因此,一臺物理服務器上可以在啟動多個JVM的情況下在每一個JVM中啟動一個Tomcat實例,每個實例分屬于一個獨立的管理端口。這是一個頂級組件。 2、服務(service):一個服務組件通常包含一個引擎和與此引擎相關聯的一個或多個連接器。給服務命名可以方便管理員在日志文件中識別不同服務產生的日志。一個server可以包含多個service組件,但通常情下只為一個service指派一個server。
連接器類組件: 3、連接器(connectors):負責連接客戶端(可以是瀏覽器或Web服務器)請求至Servlet容器內的Web應用程序,通常指的是接收客戶發來請求的位置及服務器端分配的端口。默認端口通常是HTTP協議的8080,管理員也可以根據自己的需要改變此端口。一個引擎可以配置多個連接器,但這些連接器必須使用不同的端口。默認的連接器是基于HTTP/1.1的Coyote。同時,Tomcat也支持AJP、JServ和JK2連接器。
容器類組件: 4、引擎(Engine):引擎通是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它檢查每一個請求的HTTP首部信息以辨別此請求應該發往哪個host或context,并將請求處理后的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是只是一個容器。如果Tomcat被配置成為獨立服務器,默認引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web服務器的提供Servlet功能的后端,默認引擎將被忽略,因為Web服務器自身就能確定將用戶請求發往何處。一個引擎可以包含多個host組件。 5、主機(Host):主機組件類似于Apache中的虛擬主機,但在Tomcat中只支持基于FQDN的“虛擬主機”。一個引擎至少要包含一個主機組件。 6、上下文(Context):Context組件是最內層次的組件,它表示Web應用程序本身。配置一個Context最主要的是指定Web應用程序的根目錄,以便Servlet容器能夠將用戶請求發往正確的位置。Context組件也可包含自定義的錯誤頁,以實現在用戶訪問發生錯誤時提供友好的提示信息。
被嵌套類(nested)組件: 這類組件通常包含于容器類組件中以提供具有管理功能的服務,它們不能包含其它組件,但有些卻可以由不同層次的容器各自配置。 7、閥門(Valve):用來攔截請求并在將其轉至目標之前進行某種處理操作,類似于Servlet規范中定義的過濾器。Valve可以定義在任何容器類的組件中。Valve常被用來記錄客戶端請求、客戶端IP地址和服務器等信息,這種處理技術通常被稱作請求轉儲(request dumping)。請求轉儲valve記錄請求客戶端請求數據包中的HTTP首部信息和cookie信息文件中,響應轉儲valve則記錄響應數據包首部信息和cookie信息至文件中。 8、日志記錄器(Logger):用于記錄組件內部的狀態信息,可被用于除Context之外的任何容器中。日志記錄的功能可被繼承,因此,一個引擎級別的Logger將會記錄引擎內部所有組件相關的信息,除非某內部組件定義了自己的Logger組件。 9、領域(Realm):用于用戶的認證和授權;在配置一個應用程序時,管理員可以為每個資源或資源組定義角色及權限,而這些訪問控制功能的生效需要通過Realm來實現。Realm的認證可以基于文本文件、數據庫表、LDAP服務等來實現。Realm的效用會遍及整個引擎或頂級容器,因此,一個容器內的所有應用程序將共享用戶資源。同時,Realm可以被其所在組件的子組件繼承,也可以被子組件中定義的Realm所覆蓋。
引擎(Engine):引擎是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它從HTTPconnector接收請求并響應請求。它檢查每一個請求的HTTP首部信息以辨別此請求應該發往哪個host或context,并將請求處理后的結果返回的相應的客戶端。嚴格意義上來說,容器不必非得通過引擎來實現,它也可以是只是一個容器。如果Tomcat被配置成為獨立服務器,默認引擎就是已經定義好的引擎。而如果Tomcat被配置為Apache Web服務器的提供Servlet功能的后端,默認引擎將被忽略,因為Web服務器自身就能確定將用戶請求發往何處。一個引擎可以包含多個host組件。
Tomcat連接器架構:
基于Apache做為Tomcat前端的架構來講,Apache通過mod_jk、mod_jk2或mod_proxy模塊與后端的Tomcat進行數據交換。而對Tomcat來說,每個Web容器實例都有一個Java語言開發的連接器模塊組件,在Tomcat6中,這個連接器是org.apache.catalina.Connector類。這個類的構造器可以構造兩種類別的連接器:HTTP/1.1負責響應基于HTTP/HTTPS協議的請求,AJP/1.3負責響應基于AJP的請求。但可以簡單地通過在server.xml配置文件中實現連接器的創建,但創建時所使用的類根據系統是支持APR(Apache Portable Runtime)而有所不同。
APR是附加在提供了通用和標準API的操作系統之上一個通訊層的本地庫的集合,它能夠為使用了APR的應用程序在與Apache通信時提供較好伸縮能力時帶去平衡效用。 同時,需要說明的是,mod_jk2模塊目前已經不再被支持了,mod_jk模塊目前還apache被支持,但其項目活躍度已經大大降低。因此,目前更常用 的方式是使用mod_proxy模塊。
如果支持APR: 如果不支持APR:
連接器協議: Tomcat的Web服務器連接器支持兩種協議:AJP和HTTP,它們均定義了以二進制格式在Web服務器和Tomcat之間進行數據傳輸,并提供相應的控制命令。
AJP(Apache JServ Protocol)協議:目前正在使用的AJP協議的版本是通過JK和JK2連接器提供支持的AJP13,它基于二進制的格式在Web服務器和Tomcat之間傳輸數據,而此前的版本AJP10和AJP11則使用文本格式傳輸數據。
HTTP協議:誠如其名稱所表示,其是使用HTTP或HTTPS協議在Web服務器和Tomcat之間建立通信,此時,Tomcat就是一個完全功能的HTTP服務器,它需要監聽在某端口上以接收來自于商前服務器的請求。
[Tomcat的安裝、配置及使用]((https://mp.weixin.qq.com/s/sZ4dBa3E22qMC3JgCVMMeQ)
(一)JDK — JDK是 Java語言的軟件開發工具包,主要用于移動設備、嵌入式設備上的java應用程序。JDK是整個java開發的核心,它包含了JAVA的運行環境 —(JVM+Java系統類庫)和JAVA工具,沒有JDK的話,無法編譯Java程序(指java源碼.java文件)
使用tomcat,首先安裝JDK并配置java環境。
1、JDK版本一 OpenJDK: 開源版本 關閉防火墻和selinux,同步時間
[root@tomcat-77 ~]# yum -y install ntpdate [root@tomcat-77 ~]# ntpdate time2.aliyun.com 安裝jdk,這里選擇java-1.8.0-openjdk,yum本地安裝即可 [root@tomcat-77 ~]# yum -y install java-1.8.0-openjdk [r[root@tomcat-77 ~]# java -version #版本查詢 openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode) #混合模式 注意:安裝完成后,要配置JAVA_HOME環境變量,指向java的安裝路徑; 設定java環境變量 [root@tomcat-77 ~]# echo $JAVA_HOME #查詢是否有路徑 [root@tomcat-77 ~]# vim /etc/profile.d/java.sh #編寫腳本 export JAVA_HOME=/usr [root@tomcat-77 ~]# . /etc/profile.d/java.sh [root@tomcat-77 ~]# echo $JAVA_HOME /usr
2、JDK版本二 Oracle JDK:oracle官方版本 —oracle官方網站下載,安裝相應版本的rpm包;
jdk-VERSION-OS-ARCH.rpm 例如:jdk-1.8.0_25-linux-x64.rpm
3、java環境變量配置 安裝完成后,要配置JAVA_HOME環境變量,指向java的安裝路徑; OpenJDK版本:
JAVA_HOME=/usr
Oracle JDK版本:
JAVA_HOME=/usr/java/jdk_VERSION
二、Servlet容器: servlet容器的主要任務是管理servlet的生命周期。而web容器更準確的說應該叫web服務器,它是來管理和部署 web應用的。 web容器最典型的就是tomcat了,Tomcat是web容 器也是servlet容器。
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的服務器端程序,主要功能在于交互式地瀏覽和修改數據,生成動態Web內容。 狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解為后者。Servlet運行于支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基于HTTP協議的Web服務器。 最早支持Servlet標準的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服務器開始支持標準的Servlet。 三、java在web中的應用JSP技術 1、JSP技術定義 JSP是一種技術,JSP技術是在傳統的網頁HTML文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件(*.jsp)。使JSP開發的Web應用可以跨平臺運行。 JSP屬于Servlet,因為在編譯JSP時,會把JSP先編譯為一個Servlet,然后由容器來提供服務
2、JSP頁面運行過程 .jsp文件 -->jasper--> .java --> javac --> .class類 --> jvm虛擬機 示例:
<html> <title>TITLE</title> <body> <h2>...</h2> <% ... java code... #java代碼 %> </body> </html>
注意:基于jasper將靜態輸出的數據轉為java代碼進行輸出,結果為servlet規范的代碼;
3、JSP Container: jsp容器 JSP技術加Servlet容器就是形成了jsp容器,他就是后來的JWS是Java語言對WebService服務的一種實現,用來開發和發布服務。
商業實現軟件有: WebSphere, WebLogic, Oc4j, Glassfish, Geronimo, JOnAS, JBoss, ... 開源實現軟件有: Tomcat, Jetty, Resin, ... 四、Tomcat安裝 Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML標準通用標記語言下的一個應用頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。 官方網站:http://tomcat.apache.org/ Java 2 EE技術體系的不完整實現;
1、安裝Tomcat: 方法一:Tomcat的Base Repo安裝:
[root@tomcat-77 ~]# yum install -y tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp [root@tomcat-77 ~]# systemctl start tomcat.service
tomcat #核心包 tomcat-lib #庫文件 tomcat-admin-webapp s#基于web頁面管理接口 tomcat-webapps #jsp示例程序 tomcat-docs-webapp #操作文檔頁面
方法二:Tomcat 解壓展開安裝
~]# tar xf apache-tomcat-VERSION.tar.gz -C /usr/local/ #解壓縮到指定目錄 ~]# cd /usr/local local ~]# ln -sv apache-tomcat-VERSION tomcat #設置別名 local ~]# vim /etc/profile.d/tomcat.sh #編輯環境變量shell export CATALINA_BASE=/usr/local/tomcat export PATH=$CATALINA_BASE/bin:$PATH local ~]# . /etc/profile.d/tomcat.sh #執行 local ~]# cd tomcat/bin bin ~]#catalina.sh --help #幫助信息 bin ~]#catalina.sh version #版本信息 bin ~]#catalina.sh start #啟動 tomcat bin ~]#catalina.sh stop #停止tomcat bin ~]#catalina.sh stop 9 #9秒后停止tomcat bin ~]#catalina.sh stop 9 -force#9秒后強制停止tomcat
2、tomcat程序環境: tomcat的目錄結構 bin:腳本,及啟動時用到的類; conf:配置文件目錄; lib:庫文件,Java類庫,jar; logs:日志文件目錄; temp:臨時文件目錄; webapps:webapp的默認目錄; work:工作目錄;
3、tomcat的配置文件構成: server.xml:主配置文件;
web.xml:每個webapp只有“部署”后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置; context.xml:每個webapp都可以專用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中;此文件為所有的>webapps提供默認配置; tomcat-users.xml:用戶認證的賬號和密碼文件; catalina.policy:當使用-security選項啟動tomcat時,用于為tomcat設置安全策略; catalina.properties:Java屬性的定義文件,用于設定類加載器路徑,以及一些與JVM調優相關參數; logging.properties:日志系統相關的配置;
4、Tomcat的核心組件:server.xml
<Server> <Service> <connector/> <connector/> ... <Engine>#引擎 <Host> #主機 <Context/> #程序 <Context/> ... </Host> <Host> ... </Host> ... </Engine> </Service> </Server>
每一個組件都由一個Java“類”實現,這些組件大體可分為以下幾個類型:
頂級組件:Server 服務類組件:Service 連接器組件:http, https, ajp(apache jserv protocol) 容器類:Engine, Host, Context 被嵌套類:valve, logger, realm, loader, manager, ... 集群類組件:listener, cluster, ...
五、JSP WebAPP部署: 1、JSP WebAPP的組織結構:
/: webapps的根目錄 index.jsp:主頁; WEB-INF/:當前webapp的私有資源路徑;通常用于存儲當前webapp的web.xml和context.xml配置文件; META-INF/:類似于WEB-INF/; classes/:類文件,當前webapp所提供的類; lib/:類文件,當前webapp所提供的類,被打包為jar格式;
2、webapp歸檔格式: .war:webapp .jar:EJB的類打包文件; .rar:資源適配器類打包文件; .ear:企業級webapp;
[root@tomcat-77 ~]# ls /var/lib/tomcat webapps
3、部署(deploy)webapp的相關操作: 步驟: deploy:將webapp的源文件放置于目標目錄(網頁程序文件存放目錄),配置tomcat服務器能夠基于web.xml和context.xml文件中定義的路徑來訪問此webapp;將其特有的類和依賴的類通過class loader裝載至JVM; 部署有兩種方式:自動部署和手動部署 操作分為:
冷部署:把webapp復制到指定的位置,而后才啟動tomcat; 熱部署:在不停止tomcat的前提下進行部署; 反部署: undeploy:,停止webapp,并從tomcat實例上卸載webapp;
部署工具: manage:r、ant腳本、tcd(tomcat client deployer)等;
命令: start:啟動處于停止狀態的webapp; stop:停止webapp,不再向用戶提供服務;其類依然在jvm上; redeploy:重新部署;
4、手動提供一測試類應用,并冷部署: 示例:
[root@tomcat-77 ~]# cd /var/cache/tomcat/work [root@tomcat-77 work]# ls Catalina [root@tomcat-77 work]# tree Catalina/ Catalina/ └── localhost ├── _ │ └── org │ └── apache │ └── jsp │ ├── index_jsp.class │ └── index_jsp.java ├── docs ├── examples ├── host-manager #管理虛擬主機 ├── manager │ └── org │ └── apache │ └── jsp │ └── WEB_002dINF │ └── jsp │ ├── _401_jsp.class │ └── _401_jsp.java └── sample # mkidr -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF} 創建文件/usr/local/tomcat/webapps/test/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>Test Page</title> </head> <body> <% out.println("hello world"); %> </body> </html>
六、tomcat的兩個管理應用: 1、啟用manager
[root@tomcat-77 ~]# vim /etc/tomcat/tomcat-users.xml <role rolename="manager-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui"/> [root@tomcat-77 ~]# systemctl restart tomcat
2、host-manager虛擬主機管理
[root@tomcat-77 ~]# vim /etc/tomcat/tomcat-users.xml <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> [root@tomcat-77 ~]# systemctl restart tomcat
通過gui界面,可以熱部署虛擬主機
3、tomcat的常用組件配置: Server:代表tomcat instance,即表現出的一個java進程;監聽在8005端口,只接收“SHUTDOWN”。各server監聽的端口不能相同,因此,在同一物理主機啟動多個實例時,需要修改其監聽端口為不同的端口; Service:用于實現將一個或多個connector組件關聯至一個engine組件;
4、Connector連接器組件: 負責接收請求,常見的有三類http/https/ajp; 進入tomcat的請求可分為兩類: (1) standalone : 請求來自于客戶端瀏覽器; (2) 由其它的web server反代:來自前端的反代服務器; 情況一:nginx反代 --> http connector --> tomcat 情況二: httpd(proxy_http_module)反代 --> http connector --> tomcat httpd(proxy_ajp_module)反代 --> ajp connector --> tomcat 情況三:httpd(mod_jk) --> ajp connector --> tomcat
5、Connector連接器屬性:
port="8080" #監聽的端口 protocol="HTTP/1.1" #協議 connectionTimeout="20000" #超時時間 address:監聽的IP地址;默認為本機所有可用地址; maxThreads:最大并發連接數,默認為200; enableLookups:是否啟用DNS查詢功能,提升性能建議關閉; acceptCount:等待隊列的最大長度; secure:安全 sslProtocol:
6、Engine容器組件: Servlet實例,即servlet引擎,其內部可以一個或多個host組件來定義站點; 通常需要通過defaultHost來定義默認的虛擬主機; Engine容器組件屬性:
name= #名稱 defaultHost="localhost" #默認主機 jvmRoute= :jvm的路由標識
7、Host組件: 位于engine內部用于接收請求并進行相應處理的主機或虛擬主機
示例: <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> #自動部署 </Host>
常用屬性說明: (1) appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基于$CATALINA_BASE變量所定義的路徑的相對路徑; (2) autoDeploy:在Tomcat處于運行狀態時,將某webapp放置于appBase所定義的目錄中時,是否自動將其部署至tomcat;
示例: <Host name="tc1.magedu.com" appBase="/appdata/webapps" #webapps的默認存放目錄 unpackWARs="true" autoDeploy="true">#自動部署 </Host> # mkdir -pv /appdata/webapps #創建存儲目錄 # mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF} #創建目錄,站點部署到root路徑下
提供一個測試頁即可;
8、Context組件:
示例: <Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable="true"/> #訪問url路徑,然后被指定其他路徑上,可以被重新裝載
9、Valve組件:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" #prefix日志前綴,suffix日志為后綴 pattern="%h %l %u %t "%r" %s %b" />#這里"是引號的意思,%r用戶的請求內容
Valve存在多種類型: 定義訪問日志:org.apache.catalina.valves.AccessLogValve 定義訪問控制:org.apache.catalina.valves.RemoteAddrValve tomcat日志路徑:/var/log/tomcat/ <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172.16.100.67"/>
綜合示例: <Host name="node1.magedu.com" appBase="/web/apps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="node1_access" suffix=".log" pattern="%h %l %u %t "%r" %s %b" /> <Context path="/test" docBase="/tmp/test" reloadable="true"> #訪問url為test,文檔路徑為tmp/test,可以被重新裝載 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="node1_test_access_" suffix=".log" #前綴是node1_test_access,后綴是log pattern="%h %l %u %t "%r" %s %b" /> #記錄日志格式 </Context> </Host>
七、tomcat反代配置 1、LNMT架構 Client (http) --> nginx (reverse proxy)(http) --> tomcat (http connector)
nginx連接器
nginx反代設置: vim /etc/nginx/conf.d/ilinux.conf server { listen 80; #監聽端口 server_name www.ilinux.io; #服務名稱 location / { proxy_pass http://192.168.1.15:80; #匹配靜態內容到后端靜態主機的80端口 } location ~* \.(jsp|do)$ { proxy_pass http://192.168.1.16:8080; #匹配動態jsp內容到后端Tomcat主機 }
2、LAMT架構 Linux Apache(httpd) MySQL Tomcat httpd的代理模塊:
proxy_module:反代核心模塊 proxy_http_module:適配http協議客戶端; proxy_ajp_module:適配ajp協議客戶端;
Client (http) --> httpd (proxy_http_module)(http) --> tomcat (http connector) Client (http) --> httpd (proxy_ajp_module)(ajp) --> tomcat (ajp connector) Client (http) --> httpd (mod_jk)(ajp) --> tomcat (ajp connector)
http連接器:使用proxy_http_module模塊反向代理
#proxy_http_module代理配置示例: <VirtualHost *:80> #定義虛擬主機 ServerName tc1.ilinux.io ProxyRequests Off #關閉正向代理 ProxyVia On #在響應報文中加via ProxyPreserveHost On #請求報文轉發到后端 <Proxy *> Require all granted #反代功能可以由那些用戶使用 </Proxy> #如果后端有多個虛擬主機,不能使用ip地址 ProxyPass / http://192.168.1.15:8080/ #后端tomcat主機地址端口 ProxyPassReverse / http://192.168.1.15:8080/ #返回重定向 <Location /> Require all granted #此url可以被誰訪問 </Location> </VirtualHost>
ajp連接器:使用proxy_ajp_module代理
#proxy_ajp_module代理配置示例 <VirtualHost *:80> ServerName tc1.ilinux.io ProxyRequests Off#關閉正向代理 ProxyVia On #在響應報文中加via ProxyPreserveHost On <Proxy *> Require all granted#反代功能可以由那些用戶使用 </Proxy> #如果后端有多個虛擬主機,不能使用ip地址 ProxyPass / ajp://http://192.168.1.15:8009/ 后端tomcat主機地址端口 ProxyPassReverse / ajp://http://192.168.1.15:8009/ <Location /> Require all granted#此url可以被誰訪問 </Location> </VirtualHost>
八、Tomcat的常用優化配置: 1 、內存空間管理: 編輯/etc/sysconfig/tomcat
#重要不能超過32G!!!!!!!!!!! JAVA_OPTS="-server -Xms32g -Xmx32g -XX:NewSize= -XX:MaxNewSize= -XX:PermSize= -XX:MaxPermSize=" #實驗添加: JAVA_OPTS= "-Xmx512m" -Xms"512m"
server:服務器模型 Xms:堆內存初始化大小; Xmx:堆內存空間上限; XX:NewSize=:新生代空間初始化大小; XX:MaxNewSize=:新生代空間最大值; XX:PermSize=:持久代空間初始化大小; XX:MaxPermSize=:持久代空間最大值;
2、線程池設置: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
常用屬性:
maxThreads:最大線程數; minSpareThreads:最小空閑線程數; maxSpareThreads:最大空閑線程數; acceptCount:等待隊列的最大長度; URIEncoding:URI地址編碼格式,建議使用UTF-8; enableLookups:是否啟用dns解析,建議禁用; compression:是否啟用傳輸壓縮機制,建議“on"; compressionMinSize:啟用壓縮傳輸的數據流最小值,單位是字節; compressableMimeType:定義啟用壓縮功能的MIME類型; text/html, text/xml, text/css, text/javascript
3)、禁用8005端口;
<Server port="-1" shutdown="SHUTDOWN">
(4) 隱藏版本信息:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> Server="SOME STRING" #加上自定義字符串
九、JVM常用的分析工具:
JVM的分析工具有: jps:用來查看運行的所有jvm進程; jinfo:查看進程的運行環境參數,主要是jvm命令行參數; jstat:對jvm應用程序的資源和性能進行實時監控; jstack:查看所有線程的運行狀態; jmap:查看jvm占用物理內存的狀態; jconsole:圖形界面,是一個內置 Java 性能分析器,對資源消耗和性能進行監控; jvisualvm:圖形界面,用來監控JVM的運行情況的插件; 1、jps工具 jps:Java虛擬機進程狀態工具, 格式: jps [-q] [-mlvV] [<hostid>] -q:靜默模式; -v:顯示傳遞給jvm的命令行參數; -m:輸出傳入main方法的參數; -l:輸出main類或jar完全限定名稱; -V:顯示通過flag文件傳遞給jvm的參數; [<hostid>]:主機id,默認為localhost;
2、jinfo工具 jinfo:輸出給定的java進程的所有配置信息;
格式: jinfo [option] <pid> -flags:to print VM flags打印標志位 -sysprops:to print Java system properties -flag <name>:to print the value of the named VM flag
3、jstack工具 jstack:查看指定的java進程的線程棧的相關信息;
格式: jstack [-l] <pid> jstack -F [-m] [-l] <pid> -l:long listings,會顯示額外的鎖信息,因此,發生死鎖時常用此選項; -m:混合模式,既輸出java堆棧信息,也輸出C/C++堆棧信息; -F:當使用“jstack -l PID"無響應,可以使用-F強制輸出信息;
感謝各位的閱讀,以上就是“Java容器Tomcat等中間價原理、安裝、配置和使用方法”的內容了,經過本文的學習后,相信大家對Java容器Tomcat等中間價原理、安裝、配置和使用方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。