Tomcat是由Apache軟件基金會下屬的Jakarta項目開發(fā)的一個servelet容器,按照Sun microsystems提供的技術(shù)
規(guī)范開發(fā)出來,Tomcat 8實現(xiàn)了對servlet 3.1和Javaserver page 2.3(JSP)的支持,并提供了作為web服務(wù)器的
一些特有功能,如Tomcat管理和控制平臺、安全域管理和Tomcat附加組件等
創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的曲周網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
安裝jdk和apache
export JAVA_H0ME=/usr/local/jdk1.8.0_211
export JRE_HOME=/usr/local/jdk1.8.0_211
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_H0ME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
刷新一下 source /etc/profile
查看一下 java -version
多實例(一個主機運行多個Tomcat)
查看
JPS命令功能描述:jps是用于查有權(quán)限訪問的hotspot虛擬機(jdk中帶的虛擬機)的進程
命令語法: jps [options] [hostid]
options:命令選項,用來對輸出格式進行控制
-p 僅僅顯示vm標識,不顯示jar,class,main參數(shù)等信息
-m 輸出主函數(shù)傳入的參數(shù)
-l 輸出應(yīng)用程序主類完整package名稱或jar完整名稱
-v 列出jvm參數(shù),-Xms20m -Xmx50m是啟動程序指定的jvm參數(shù)與
-V 輸出通過.hotsportrc或者-XX:Flags=<filename>指定的jvm參數(shù)
hostid:指定特定主機,可以使IP地址或域名,也可以指定具體協(xié)議,端口 [protocol:][//hostname][:port]
[servername]
配置
目錄結(jié)構(gòu)
程序目錄
——Tomcat執(zhí)行腳本目錄 conf ——Tomcat配置文件 lib ——Tomcat運行需要的庫文件(JARS) logs ——
Tomcat執(zhí)行時的LOG文件 temp ——Tomcat臨時文件存放目錄 webapps ——Tomcat的主要Web發(fā)布目錄(存
放我們自己的JSP,SERVLET,類) work ——Tomcat的工作目錄,Tomcat將翻譯JSP文件到的Java文件和class文件
放在這里
web工程發(fā)布目錄結(jié)構(gòu) webapps是
Tomcat的主要Web發(fā)布目錄,默認情況下把Web應(yīng)用文件放于此目錄 項目名: 項目名下面有WEB-INF ,
META-INF,兩個文件夾,和一些給瀏覽器訪問的資源,如html文件;
WEB-INF:可以稱為是安全目錄,因為在這下面的文件,瀏覽器是訪問不到的,
默認webapps目錄結(jié)構(gòu)
docs:Tomcat幫助文檔 examples:web應(yīng)用實例 host-manager:主機管理 manager:應(yīng)用管理 ROOT:默認站點根
目錄
配置文件
conf目錄主要是用來存放tomcat的一些配置文件。
server.xml 主配置文件 web.xml 與其他適用于整個web應(yīng)用程序設(shè)置的配置文件 context.xml 默認的context設(shè)
置,應(yīng)用于安裝了Tomcat的所有主機的所有部署內(nèi)容 tomcat-users.xml用來配置管理tomcat的用戶與權(quán)限
catalina.xml Tomcat的安全防護策略文件
組件
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener"
SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
/>
<Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"
/>
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
engine是核心組件,負責通過connector接收用戶請求,并處理請求,將請求轉(zhuǎn)發(fā)至對應(yīng)的虛擬主機host上,
defaulthost指定缺省的處理請求的主機名,它至少與其中呢一個host元素的name屬性值是一樣的 realm表示存
放用戶名、密碼及role的數(shù)據(jù)庫
Tomcat Server處理一個http請求的過程 假設(shè)來自客戶的請求為: http://localhost:8080/wsota/wsota_index.jsp
請求被發(fā)送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得 Connector把該請求交給它所在
的Service的Engine來處理,并等待來自Engine的回應(yīng) Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它
所擁有的所有虛擬主機Host Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為
該Host被定義為該Engine的默認主機) localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有
Context Host匹配到路徑為/wsota的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
path="/wsota"的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應(yīng)的servlet Context匹配到
URL PATTERN為*.jsp的servlet,對應(yīng)于JspServlet類 構(gòu)造HttpServletRequest對象和HttpServletResponse對象,
作為參數(shù)調(diào)用JspServlet的doGet或doPost方法 Context把執(zhí)行完了之后的HttpServletResponse對象返回給Host
Host把HttpServletResponse對象返回給Engine Engine把HttpServletResponse對象返回給Connector Connector
把HttpServletResponse對象返回給客戶browser
自定義目錄
修改server.xml文件中的host元素 #appBase 定義站點目錄 #docBase 定義應(yīng)用目錄 #Context path 指出你的訪
問路徑(虛擬應(yīng)用名,可為空) #Context docBase 指定你的存放路徑 #debug 為設(shè)定dedug的登記,0提供最
少的信息,9提供最多的信息 #reloadable=true 當web.xml或者class有改動的是后續(xù)都會自動更新加載,不需要
從新啟動服務(wù) #crosscontext="true" 表示配置的不同context共享一個session #unpackWARs 是否自動解壓war
包 #autoDeploy 是否自動部署(熱部署)
appBase 這個目錄表示: 這個目錄下面的子目錄將自動被部署為應(yīng)用(autoDeploy="true") 這個目錄下的war
文件將被自動解壓縮并部署為應(yīng)用(unpackWARs="true") 這個目錄下的子目錄,會當做單獨的虛擬目錄,或
者叫應(yīng)用 如果不想使用Tomcat下的webapp目錄路,則appBase下面加一行docBase,把路徑配置到docBase
中,把appBase為空就可以了
自定義目錄
[root@bogon ~]# mkdir -p /data/project
[root@bogon ~]# vim /data/project/index1.jsp
[root@bogon ~]# vim /data/project/index2.jsp
自定義一個監(jiān)控頁面,通過web查看運行性能(類似phpinfo) server.xml如下設(shè)置
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;
out.println("JVM memory detail info :<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Total memory: "+tm+"MB"+"<br>");
out.println("Free memory: "+fm+"MB"+"<br>");
out.println("Available memmory can be used is :"+(mm+fm-tm)+"MB"+"<br>");
%>
遠程監(jiān)控
Tomcat開啟JMX遠程調(diào)試功能
查看端口
6.測試
后臺
app manager
做這個的時候要把catalina.sh里邊寫入的東西刪除掉,否則Tomcat無法訪問到頁面
查看端口
測試
測試
(1)
(2)
熱部署
tomcat的熱部署實現(xiàn)原理:tomcat啟動的時候會有啟動一個線程每隔一段時間會去判斷應(yīng)用中加載的類是否發(fā)生
變法(類總數(shù)的變化,類的修改),如果發(fā)生了變化就會把應(yīng)用的啟動線程停止掉,清除引用,并且把加載該應(yīng)
10-Tomcat.md 5/12/2019
18 / 23
用的WebappClassLoader設(shè)為null,然后創(chuàng)建一個新的WebappClassLoader來重新加載應(yīng)用。
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
reloadable的作用是當你修改了jsp之后會自動編譯class文件,等于即時生效,但是代價不低,適合本地
開發(fā)調(diào)試,一般在開發(fā)階段將reloadable的屬性設(shè)置為true,有助于調(diào)試servlet和其他的class文件,但是
由于這樣會增加服務(wù)器的運行負載,損耗系統(tǒng)性能,在項目運行階段將它設(shè)置為false
war包部署
直接將web項目文件(一般是復(fù)制生成的war包)復(fù)制到Tomcat的webapps目錄
如果Tomcat沒有開啟自解壓,則將war包解壓到webapps目錄
解壓命令jar(解壓到當前目錄) jar -xf bdqnweb.war war包也可以使用unzip解壓,使用unzip命令的時候,可
以指定解壓目錄
安全
端口防護
修改目標端口為不易猜測的端口,降低自動掃描軟件發(fā)現(xiàn)到的幾率
后臺管理
刪除默認的管理后臺(如果不需要使用),降低被爆破和提權(quán)的風險
刪除webapp下的host-manager和manager目錄
禁用目錄瀏覽
修改 conf/web.xml文件,將listings改為false
隱藏信息
盡量避免暴露服務(wù)器的版本信息,隱藏錯誤頁面。在配置中對一些常見的錯誤進行重定向,避免出現(xiàn)錯誤時
Tomcat默認顯示的錯誤頁面暴露服務(wù)器和版本信息;必須確保程序根目錄下的錯誤頁面已經(jīng)存在;
vim conf/web.xml
添加內(nèi)容
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
重啟Tomcat,測試一下
firefox 192.168.43.249:8088/aaaaaaaaaaaaaaa
注意:這里的意思是說,如果是404的錯誤就找/目錄下的notfound.jsp,所以一定要知道自己的網(wǎng)頁根目錄在哪,并在這個目錄下創(chuàng)建notfound.jsp頁面,頁面內(nèi)容自己編輯 網(wǎng)頁根目錄是server.xml文件中 host 標簽下的context標簽里的docBase
上邊web.xml中只寫了404報錯的,其他常見報錯也可以寫,比如
<error-page>
<error-code>403</error-code>
<location>/forbidden.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/systembusy.jsp</location>
</error-page>
腳本權(quán)限收回
去除其他用戶對Tomcat的bin目錄下的 shutdown.sh、startup.sh、catalina.sh的可執(zhí)行權(quán)限,防止其他用戶有
Tomcat的權(quán)限 chmod -R 744 /usr/local/apache-tomcat-8.5.35/bin/
日志規(guī)范
開啟Tomcat默認訪問日志中的referer和user-agent記錄,開啟這兩個是為了一旦出現(xiàn)安全問題,能夠更好的根
據(jù)日志進行問題排查
[root@localhost apache-tomcat-8.5.35]# vim conf/server.xml
原來是這樣:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
10-Tomcat.md 5/12/2019
20 / 23
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
修改后的樣子:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" />
主機管理器的使用 (末尾添加)
<role rolename="admin-gui"/>
<user username="xgp" password="123.com" roles="admin-gui"/>
瀏覽器測試
日志切割使用cronolog
重啟tomcat
定義錯誤頁面
線程池優(yōu)化
2.重啟tomcat
Tomcat優(yōu)化
1 /usr/local/tomcat/bin/catalina.sh 開頭添加
JAVA_OPTS="-Dfile.encoding=UTF-8
-server
-Xms1024M
-Xmx1024M
-XX:NewSize=512M
-XX:MaxNewSize=1024M
-XX:PermSize=256M
-XX:MaxPermSize=356M
-XX:NewRatio=2
-XX:ParallelGCThreads=15
-XX:+DisableExplicitGC"
-Xms:表示 JVM初始內(nèi)存大小,也可以說是Java 初始化堆的大小,-Xms 與-Xmx 設(shè)成一樣的值,避免 JVM 反復(fù)重新申請內(nèi)存,導(dǎo)致性能大起大落,默認值為物理內(nèi)存的 1/64
-Xmx:表示最大 Java 堆大小,當應(yīng)用程序需要的內(nèi)存超出堆的最大值時虛擬機就會提示內(nèi)存溢出,并且導(dǎo)致應(yīng)用服務(wù)崩潰,因此一般建議堆的最大值設(shè)置為可用內(nèi)存的最大值的80%。
-Xmn:設(shè)置JVM最小內(nèi)存(128-256就夠了,一般不設(shè)置)
-XX:NewSize:設(shè)置新生代內(nèi)存大小。 新生代,對象新創(chuàng)建的時候分配的內(nèi)存空間,老生代在垃圾回收器回收過后該對象依然沒有被回收,該對象就會移動到老生代
-XX:PermSize:設(shè)置持久代內(nèi)存大小,用于存放靜態(tài)文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應(yīng)
用可能動態(tài)生成或者調(diào)用一些class,持久帶也稱為方法區(qū),方法區(qū)存儲每一個java類的結(jié)構(gòu)信息:比如運行時常量池,字段和方法數(shù)據(jù),構(gòu)造函數(shù)和普通方法的字節(jié)碼內(nèi)容以及類、實例、接口初始化時需要使用到的特殊方法等數(shù)據(jù),JDK8中已經(jīng)把持久代(PermGen Space) 干掉了,取而代之的元空間(Metaspace)。Metaspace占用的是本地內(nèi)存,不再占用虛擬機內(nèi)存。
-XX:MaxPermSize:設(shè)置最大值持久代內(nèi)存大小,永久代不屬于堆內(nèi)存,堆內(nèi)存只包含新生代和老年代
-XX:NewRatio:改變新舊空間的比例,意思是新空間的尺寸是舊空間的1/8(默認為8)
-XX:ParallelGCThreads 可用來增加并行度,需要多cpu
-XX:+DisableExplicitGC:關(guān)閉System.gc(),簡單理解就是關(guān)閉java中的內(nèi)存回收機制
2.重啟tomcat
Tomcat的請求方式
Tomcat支持三種接收請求的方式:BIO NIO APR
1、BIO:每個請求都要創(chuàng)建一個線程來處理,線程開銷比較大,不適用高并發(fā)的場景,性能也最低
2、NIO:基于緩沖區(qū),能提供非阻塞I/O操作,和傳統(tǒng)的BIO相比,具備更好的并發(fā)性能
3、APR(Apache portable run-time libraries):簡單理解,就是從操作系統(tǒng)級別解決異步IO問題,大幅度的提高服務(wù)器的處理和相應(yīng)性能,也是Tomcat運行高并發(fā)的首選模式
APR提供的主要功能模塊包括:內(nèi)存分配及內(nèi)存池、原子操作、文件I/O、鎖、內(nèi)存映射、哈希表、網(wǎng)絡(luò)I/O、輪詢、進程及線程操作等等,通過采用APR,Tomcat可以獲得高度可擴展性以及優(yōu)越的性能,并且可以更好的與本地服務(wù)器技術(shù)集成,從而可以使Tomcat作為一款通用的Web服務(wù)器使用,而不僅僅作為輕量級應(yīng)用服務(wù)器。在這種情況下,Java將不再是一門側(cè)重于后端的編程語言,也可以更多的用于成熟的Web服務(wù)器平臺。
Excutor重要參數(shù)說明:
分享題目:tomcat簡單操作
本文網(wǎng)址:http://www.rwnh.cn/article18/jiphgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站策劃、網(wǎng)站內(nèi)鏈、電子商務(wù)、微信公眾號、網(wǎng)站維護
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)