web服務
nginx: 輕量級、web 反向代理、簡單的負載均衡,處理靜態資料的能力比較好;并發量2.5萬
apache: 重量級,處理動態資料的能力比較好
tomcat: java的web服務,手機app大部分都使用的tomcat
lamp和lnmp 架構 index.html index.php,php作為中間件,php是能夠加載index.php頁面
tomcat
是基于java開發的,它只支持index.html和index.jsp頁面,java能夠決議index.jsp的檔案;
Tomcat服務器是一個免費的開放源代碼的Web應用服務器,Tomcat是Apache軟體基金會(Apache Software Foundation)的Jakarta專案中的一個核心專案,由Apache、Sun和其他一些公司及個人共同開發而成,由于有了Sun的參與和支持,最新的Servlet(java撰寫的一個web程式) 和JSP規范總是能在Tomcat中得到體現,Tomcat 5支持最新的Servlet 2.4和JSP 2.0規范,因為Tomcat技術先進、性能穩定,而且免費,因而深受Java愛好者的喜愛并得到了部分軟體開發商的認可,是目前比較流行的Web應用服務器,
對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它回應HTML(標準通用標記語言下的一個應用)頁面的訪問請求,實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的行程單獨運行的,訣竅是,當配置正確時,Apache 為HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet,另外,Tomcat和IIS等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式,

Servlet是Java提供的用于開發Web服務器應用程式的一個組件,運行在服務器端,由Servlet容器所管理,用于生成動態的內容,Servlet是平臺獨立的Java類,撰寫一個Servlet,實際上就是按照Servlet規范撰寫一個Java類,
JSP是servlet的擴展,可以認為JSP = HTML + Java代碼 + JSP標簽
Servlet獲取請求資料和處理資料非常方便,但是向頁面輸出并顯示資料(html標簽)非常麻煩,毫無格式
jsp顯示資料非常方便,像html格式一樣,但是封裝資料和處理資料比較麻煩
tomcat的作用:
用來對服務器上的web提供訪問權限控制,并且具有處理HTML頁面的功能
tomcat的優點:
兼有可擴展性和安全性,性能穩定
1、兼有可擴展性和安全性,假如單位時間內訪問請求數急劇增加,可以用相對較低的費用增加前端的能力,
2、比較容易擴展,由于是通過在這臺功能強大的服務器上運行的單個servlet容器,實際上也就不需要考慮session狀態在分布式環境下的維護這類復雜的問題,
3、臺后端服務器在外界不可以訪問,網上的黑客只能訪問前端的web服務器,不能直接訪問后端的應用服務器,這就提高了安全性,但這并不意味著黑客們不能通過網路瀏覽器進行其它形式的攻擊,
這種型別的站點的主要特點是每一個頁面都可能是動態生成的,但這些資料中主要部分還是靜態的(比如,各類影像GIF、JPG、PNG,流式媒體等),想象以下某個站點采用了多個用于負載均衡的硬體設備,這些設備后端連結一組服務器,這些服務器可能是一組相對廉價的運行apache的linux服務器簇,這組位于前端的服務器簇將僅占總訪問請求的10%的真正需要呼叫servlet的訪問請求發送給后段的系統,后鍛系統可以是一臺Sun的E3500,或是IBM的AS/400,在這個后端的系統上運行著Tomcat,可能還包括企業級資料庫,
tomcat的應用:
web應用服務器,可以作為中間件處理index.jsp的檔案
jdk介紹
jdk(java development kit) 是java語言的軟體開發工具包
其中基本組件包括:
javac – 編譯器,將源程式轉成位元組碼
jar – 打包工具,將相關的類檔案打包成一個檔案
javadoc – 檔案生成器,從原始碼注釋中提取檔案
jdb – debugger,查錯工具
java – 運行編譯后的java程式(.class后綴的)
appletviewer:小程式瀏覽器,一種執行HTML檔案上的Java小程式的Java瀏覽器,
Javah:產生可以呼叫Java程序的C程序,或建立能被Java程式呼叫的C程序的頭檔案,
Javap:Java反匯編器,顯示編譯類檔案中的可訪問功能和資料,同時顯示位元組代碼含義,
Jconsole: Java進行系統除錯和監控的工具
xtcheck:一個檢測jar包沖突的工具
apt:注釋處理工具
jhat:java堆分析工具
jstack:堆疊跟蹤程式
jstat:JVM檢測統計工具
jstatd:jstat守護行程
jinfo:獲取正在運行或崩潰的java程式配置資訊
jmap:獲取java行程記憶體映射資訊
idlj:idl-to-java編譯器,將IDL語言轉化為java檔案
policytool:一個GUI的策略穩健和管理工具
jrunscript:命令列腳本運行
安裝tomcat前要先安裝jdk環境
因為版本的原因 需要重新安裝一個新的jdk工具包 也就是java環境
準備一臺虛擬機,拖入相關的軟體包
[root@localhost ~]# 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)
[root@localhost ~]# rm -rf /usr/bin/java #洗掉原本主機上的Java程式
[root@localhost ~]# java -version
-bash: /usr/bin/java: 沒有那個檔案或目錄
[root@localhost ~]# tar -zxf jdk-8u201-linux-x64.tar.gz
[root@localhost ~]# mv jdk1.8.0_201/ /usr/local/java
能夠讓命令全域使用的方法:
1、制作軟鏈接
ln -s /usr/local/java/bin/* /usr/bin/
2、添加環境變數(通常情況我們使用第二種方法)
[root@localhost bin]# vim /etc/profile
#末尾添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
#釋義:
#export:宣告一個變數
#jre java runtime environment : java的運行環境
#class java 依賴庫檔案
#path 環境變數
[root@localhost bin]# source /etc/profile
[root@localhost bin]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/jre/bin
[root@localhost bin]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
注:
自己添加的環境變數,只能針對當前的shell和其子shell,如果另打開一個shell環境則需要重新生效
安裝tomcat
[root@localhost ~]# tar -zxf apache-tomcat-8.5.35.tar.gz
[root@localhost ~]# mv apache-tomcat-8.5.35 /usr/local/tomcat
[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# cd bin/
[root@localhost bin]# ./startup.sh #啟動
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost bin]# netstat -anput | grep java
tcp6 0 0 :::8080 :::* LISTEN 58093/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 58093/java
tcp6 0 0 :::8009 :::* LISTEN 58093/java
訪問192.168.10.30:8080(本機ip)

tomcat軟體目錄的結構和功能:
bin: 服務相關的腳本檔案,可執行的檔案,例如:關閉、開啟腳本
conf:里面存放的是組態檔,xml結尾
lib:tomcat運行需要的依賴庫檔案
logs:運行的日志檔案
webapps:web應用程式部署的目錄,也就是站點根目錄,頁面是jsp或html結尾
work:存放著jsp編譯后的class檔案;class類檔案也就是java程式編譯后生成的檔案
tomcat的多主機實體
虛擬主機,讓一臺主機可以運行多個tomcat
[root@localhost ~]# cp -r /usr/local/tomcat/ /usr/local/tomcat1
[root@localhost ~]# ls /usr/local/
bin etc games include java lib lib64 libexec sbin share src tomcat tomcat1
[root@localhost ~]# cd /usr/local/tomcat1/conf/
[root@localhost conf]# vim server.xml
22 <Server port="8006" shutdown="SHUTDOWN">
69 <Connector port="8081" protocol="HTTP/1.1"
71 redirectPort="8444" />
116 <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
[root@localhost conf]# cd ..
[root@localhost tomcat1]# ./bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@localhost tomcat1]# netstat -anput | grep 8081
tcp6 0 0 :::8081 :::* LISTEN 58441/java
訪問8081埠進行驗證

Tomcat架構
1 server
提供一個介面讓其他程式能夠訪問到service集合、同時要維護它所包含的所有service的生命周期,包括如何初始化、如何結束服務、如何找到別人要訪問的service
2 service
Service是server下一個集合,service包含多個接收請求的connector并有一個處理所有連接的容器container
3 connector
Connector作用是監聽客戶端請求,并將請求封裝提交container處理,然后將處理結果回傳客戶端,
Tomcat有兩個典型的connector,一個用來監聽瀏覽器的http請求,另一個是用來監聽來自其他服務器的請求coyote http/1.1 connector 在埠8080處偵聽來自客戶browser的http請求,
Coyote AJP/1.3 connector 在埠8009處偵聽來自其他webserver(apache)的servlet/jsp代理請求
4 container
1 engine
Engine下可以配置多個虛擬主機virtual host,每個虛擬主機都有一個域名,當engine獲得一個請求時,它把該請求匹配到某個host上,然后把該請求交給host來處理,
Engine 有一個默認虛擬主機,當請求無法匹配到任何一個host上的時候,將交給該默認host來處理localhost
2 host
代表一個virtual host ,虛擬主機,每個虛擬主機和某個網路域名domain name相匹配,
每個虛擬主機下都可以部署(deploy)一個或者多個web app,每個web app對應一個context,有一個context path,
當host獲得一個請求時,將把該請求匹配到某個context上,然后把該請求交給該context來處理,
所有無法和其他context的路徑名匹配的請求都將最終和該默認context匹配,
3 context
一個context對應于一個web application
一個web application 由一個或者多個servlet組成,
tomcat的工作原理:

server:最頂層元素,也就是tomcat服務,一個server可以包含至少一個service,用于具體提供服務
8005:負責關閉tomcat的埠
service分為兩個部分:
1、connector:負責接收請求,并提供Socket與Request和Response相關的轉化
2、container:用于封裝和管理servlet,以及具體處理Request請求
connector分為兩個部分:
1、監聽埠8080 http1.1:監聽來自客戶端的請求
2、監聽埠8009 ajp:接收其他服務的請求
3、監聽埠8443:監聽https
例:
http://localhost:8080/kgc/index.jsp
connector的8080埠接收–container----engine處理引擎----虛擬主機----context
context可以有多個,相當于多個目錄,多個頁面
一個Tomcat中只有一個Server,一個Server可以包含多個Service,一個Service只有一個Container,但是可以有多個Connectors,這是因為一個服務可以有多個連接,如同時提供Http和Https鏈接,也可以提供向相同協議不同埠的連接,示意圖如下(Engine、Host、Context下邊會說到):

多個 Connector 和一個 Container 就形成了一個 Service,有了 Service 就可以對外提供服務了,但是 Service 還要一個生存的環境,必須要有人能夠給她生命、掌握其生死大權,那就非 Server 莫屬了!所以整個 Tomcat 的生命周期由 Server 控制,
另外,上述的包含關系或者說是父子關系,都可以在tomcat的conf目錄下的server.xml組態檔中看出
撰寫一個自定義的頁面
[root@localhost tomcat1]# ./bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat1
Using CATALINA_HOME: /usr/local/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat1/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar
[root@localhost tomcat1]# cd
[root@localhost ~]# rm -rf /usr/local/tomcat1
[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# vim conf/server.xml
148 <Host name="localhost" appBase="webapps"
149 unpackWARs="true" autoDeploy="true">
#添加
150 <Context path="/kgc" docBase="/usr/local/tomcat/webapps/hello"
151 reloadable="false" crossContext="true"/>
#釋義:
host name:域名
appbase:站點根目錄, java開發的一個web專案 war
unpackwars:是否解壓war包,這里開發寫好的頁面會打成war包
autodeploy:是否自動部署
<Context path="/kgc": #訪問的具體路徑
docBase="/usr/local/tomcat/webapps/hello" : #具體的目錄
reloadeable="false": #是否自動重啟
crossContext="true"/> : #是否共享會話
[root@localhost tomcat]# mkdir webapps/hello
[root@localhost tomcat]# echo "1111" > webapps/hello/index.jsp
[root@localhost tomcat]# ./bin/shutdown.sh #先關閉
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost tomcat]# ./bin/startup.sh #再啟用
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost tomcat]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 59324/java
tcp6 0 0 ::1:44070 ::1:8080 TIME_WAIT -
[root@localhost tomcat]# curl 192.168.10.30:8080/kgc/index.jsp #訪問驗證
1111
tomcat的默認索引頁 index.jsp
[root@localhost tomcat]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# mv index.jsp index1.jsp
[root@localhost hello]# curl 192.168.10.30:8080/kgc/ #這兒會訪問不到,會出現404
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">h1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} h2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} h3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} body {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} b {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} p {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} a {color:black;} a.name {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> /kgc/</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/8.5.35</h3></body></html>
[root@localhost hello]# curl 192.168.10.30:8080/kgc/index1.jsp
1111
目錄瀏覽功能
當訪問一個目錄,沒有默認索引頁,會展示出這個目錄中所有的頁面,前提需要開啟目錄瀏覽的功能
必須當前目錄下沒有默認索引頁
[root@localhost ~]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# touch index{2..10}.jsp
[root@localhost hello]# ls
index10.jsp index2.jsp index4.jsp index6.jsp index8.jsp
index1.jsp index3.jsp index5.jsp index7.jsp index9.jsp
[root@localhost hello]# vim /usr/local/tomcat/conf/web.xml
111 <param-name>listings</param-name>
112 <param-value>true</param-value> #開啟目錄瀏覽功能
[root@localhost hello]# /usr/local/tomcat/bin/shutdown.sh #先關閉
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost hello]# /usr/local/tomcat/bin/startup.sh #再啟用
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost hello]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 59567/java
tcp6 0 0 192.168.10.30:8080 192.168.10.1:60129 ESTABLISHED 59567/java
tcp6 0 0 192.168.10.30:8080 192.168.10.1:60128 FIN_WAIT2
訪問http://192.168.10.30:8080/kgc/進行驗證查看

修改默認索引頁
[root@localhost hello]# vim /usr/local/tomcat/conf/web.xml
4696 <welcome-file>aa.jsp</welcome-file>
[root@localhost hello]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@localhost hello]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@localhost hello]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 59873/java
tcp6 0 0 ::1:44088 ::1:8080 TIME_WAIT -
[root@localhost hello]# echo aa > aa.jsp
[root@localhost hello]# ls
aa.jsp index1.jsp index3.jsp index5.jsp index7.jsp index9.jsp
index10.jsp index2.jsp index4.jsp index6.jsp index8.jsp
[root@localhost hello]# curl 192.168.10.30:8080/kgc/
aa
這個實驗做完之后再把剛剛改的配置更改回來,以便于后面接著使用
jvm記憶體監控頁面
jvm(java vritual machine)java的虛擬主機
[root@localhost hello]# vim meminfo.jsp
#添加
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024;
long fm = rtm.freeMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
out.println("JVM memory info:<br>");
out.println("Max memory:"+mm+"MB"+"<br>");
out.println("Free memory:"+fm+"MB"+"<br>");
out.println("Total memory:"+tm+"MB"+"<br>");
out.println("Available memory can be used:"+(mm+fm-tm)+"MB"+"<br>");
%>
訪問http://192.168.10.30:8080/kgc/meminfo.jsp進行驗證

jvm的記憶體分配方式:
堆記憶體和堆疊記憶體
堆記憶體的方式: jvm最大占用235M,但是tomcat不會使用全部,會先申請一塊空間25M,然后使用了21M,剩余4M,所以tomcat還可以使用
mm-(tm-fm)也就是mm+fm-tm所得到的214M
jvm的堆記憶體分配是先分配一小塊,然后在使用
堆記憶體是現在的jvm的分配方式
堆疊記憶體: 使用多少占用多少,現在不常用
JVM遠程呼叫(jvm遠程監控)
JMX是Java Management Extensions 的簡寫,即Java管理擴展,這門技術是對Java應用程式和JVM進行監控和管理的,在企業實際開發程序中,所有的程式都是需要進行監控的,沒有監控,程式就相當于是裸奔,
在一些小公司可能沒有監控,只注重于功能,但是在大公司中,沒有監控是絕對不可能的,JMX是Java官方提供的一套用于監控Java程式和JVM運行時狀態的標準API,
通過JMX,我們可以監控的內容包括:
1、服務器中各種資源的使用情況:如CPU、記憶體等
2、JVM記憶體使用情況
3、JVM中的執行緒情況
4、JVM中加載的類
…
很多開源軟體都是用JMX來實作性能監控的,比如大名鼎鼎的Kafka:
Kafka 的每個監控指標都是以 JMX MBean 的形式定義的,具體來說,Kafka 使用基于 Metrics 的監控指標體系在方法呼叫的程序中設定埋點來統計 broke 端和 clients 端的各種監控指標,然后將采集的指標通過Metrics的JmxReporter送往JMX中,
實驗:
| 主機 | ip |
|---|---|
| tomcat | 192.168.10.30 |
| 遠程監控 | 192.168.10.40 |
tomcat主機:
[root@localhost ~]# cd /usr/local/tomcat/
[root@localhost tomcat]# vim bin/catalina.sh
307 CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.10.30 #jmx監控的主機(本機)
308 -Dcom.sun.management.jmxremote #開啟遠程監控
309 -Dcom.sun.management.jmxremote.port=8080 #監控的埠
310 -Dcom.sun.management.jmxremote.ssl=false #不使用https
311 -Dcom.sun.management.jmxremote.authenticate" #認證登錄
[root@localhost tomcat]# cd /usr/local/java/jre/lib/management/
[root@localhost management]# cp jmxremote.password.template jmxremote.password
[root@localhost management]# vim jmxremote.password
62 monitorRole 123456
63 controlRole 123456
[root@localhost management]# chmod 600 jmxremote.*
[root@localhost management]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost management]# /usr/local/tomcat/bin/startup.sh
[root@localhost management]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 61598/java
tcp6 0 0 ::1:44102 ::1:8080 TIME_WAIT -
[root@localhost bin]# systemctl stop firewalld
[root@localhost bin]# setenforce 0
遠程主機:驗證
[root@localhost ~]# jconsole #執行完后會彈出以下視窗


看到這兒就證明監控部署成功

tomcat的管理平臺
tomcat的應用管理平臺:
用于部署頁面,tomcat本身自帶的一個管理平臺
[root@localhost management]# cd /usr/local/tomcat/
[root@localhost tomcat]# cd webapps/
[root@localhost webapps]# ls
docs examples hello host-manager manager ROOT
[root@localhost webapps]# cd manager/
[root@localhost manager]# vim /usr/local/tomcat/bin/catalina.sh
#將307-311注釋
307 #CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.10.30
308 #-Dcom.sun.management.jmxremote
309 #-Dcom.sun.management.jmxremote.port=8080
310 #-Dcom.sun.management.jmxremote.ssl=false
311 #-Dcom.sun.management.jmxremote.authenticate"
[root@localhost manager]# cd /usr/local/tomcat/
[root@localhost tomcat]# vim webapps/manager/META-INF/context.xml
#修改
20 allow="192.168.10.*" /> #允許這個網段的ip能查看應用管理平臺
[root@localhost tomcat]# vim conf/tomcat-users.xml
#在倒數第二行添加以下內容
44 <role rolename="manager-gui"/>
45 <role rolename="manager-script"/>
46 <user username="manager" password="123456" roles="manager-gui"/>
47 <user username="managerscript" password="123456" roles="manager-script"/>
#引數釋義
manager-gui:可以去訪問html介面
manager-script:可以去訪問純文本的介面
Manager-remote jmx代理的介面
manager-status:可以查看tomcat的狀態
[root@localhost tomcat]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost tomcat]# /usr/local/tomcat/bin/startup.sh
[root@localhost tomcat]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 62671/java
tcp6 0 0 ::1:44118 ::1:8080 TIME_WAIT -
訪問192.168.10.30:8080/manager/html驗證


第一種:部署使用圖形界面 部署web專案,也就是war包

訪問驗證

把這個使用圖形界面部署的web專案洗掉掉

第二種:使用命令部署war包
[root@localhost ~]# cp bdqnweb.war /usr/local/tomcat/webapps/
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
[root@localhost ~]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 63351/java
[root@localhost ~]# curl 192.168.10.30:8080/bdqnweb/
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
第三種:命令來部署war專案
[root@localhost ~]# rm -rf /usr/local/tomcat/webapps/bdqnweb*
[root@localhost ~]# unzip bdqnweb.war -d /usr/local/tomcat/webapps/bdqnweb
Archive: bdqnweb.war
creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/
inflating: /usr/local/tomcat/webapps/bdqnweb/META-INF/MANIFEST.MF
creating: /usr/local/tomcat/webapps/bdqnweb/WEB-INF/
creating: /usr/local/tomcat/webapps/bdqnweb/WEB-INF/classes/
inflating: /usr/local/tomcat/webapps/bdqnweb/WEB-INF/web.xml
inflating: /usr/local/tomcat/webapps/bdqnweb/index.jsp
creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/
creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/
creating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/bdqnweb/
inflating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/bdqnweb/pom.xml
inflating: /usr/local/tomcat/webapps/bdqnweb/META-INF/maven/cn.bdqn.bdqnweb/bdqnweb/pom.properties
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
bdqnweb docs examples hello host-manager manager ROOT
[root@localhost webapps]# curl 192.168.10.30:8080/bdqnweb/
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
java寫的web界面 web專案 打包之后 會變成war包
bdqnweb/
├── index.jsp #頁面
├── META-INF 應用程式的配置目錄 加載的程式 資料 擴展的包
│ ├── MANIFEST.MF
│ └── maven
└── WEB-INF 頁面的配置
├── classes 類檔案 index.jsp編譯后生成的檔案
└── web.xml 組態檔
java web專案 web(程式) war包(jar包 )

1.jar包的介紹
JAR(Java Archive,Java 歸檔檔案)是與平臺無關的檔案格式,它允許將許多檔案組合成一個壓縮檔案,JavaSE程式可以打包成Jar包(J其實可以理解為Java了),
JAR 檔案格式以流行的 ZIP 檔案格式為基礎,與 ZIP 檔案不同的是,JAR 檔案不僅用于壓縮和發布,而且還用于部署和封裝庫、組件和插件程式,并可被像編譯器和 JVM 這樣的工具直接使用,在 JAR 中包含特殊的檔案,如 manifests 和部署描述符,用來指示工具如何處理特定的 JAR,
簡單來說,Java編譯好之后生成class檔案,但如果直接發布這些class檔案的話會很不方便,所以就把許多的class檔案打包成一個jar,jar中除了class檔案還可以包括一些資源和組態檔,通常一個jar包就是一個java程式或者一個java庫,可以將這些jar包引入到你的專案中,可以直接使用這些jar包中的類和屬性,這些jar包一般放在lib目錄下,
2.war包的介紹
war(Web application Archive),與jar基本相同,它通常表示這是一個Java的Web應用程式的包,是一個可以直接運行的web模塊,通常用于網站,打成包部署到容器中,以Tomcat來說,將war包放置在其\webapps\目錄下,然后啟動Tomcat,這個包就會自動解壓,就相當于發布了,tomcat這種Servlet容器會認出war包并自動部署,
war包中的檔案按照一定目錄結構來組織,其根目錄下包含有html和jsp檔案,或者包含有這兩種檔案的目錄,另外還有WEB-INF目錄,通常在WEB-INF目錄下含有一個web.xml檔案和一個classes目錄,web.xml是這個應用的組態檔,而classes目錄下則包含編譯好的servlet類和jsp,或者servlet所依賴的其他類(如JavaBean),通常這些所依賴的類也可以打包成jar包放在WEB-INF下的lib目錄下,
簡單來說,war包是JavaWeb程式打的包,war包里面包括寫的代碼編譯成的class檔案,依賴的包,組態檔,所有的網站頁面,包括html,jsp等等,一個war包可以理解為是一個web專案,里面是專案的所有東西,
3.區別
WAR檔案代表了一個Web應用程式,JAR是類的歸檔
所有的包都是jar打的,只不過目標檔案的擴展名不一樣
tomcat的主機管理平臺: 可以制作虛擬主機
[root@localhost ~]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
20 allow="192.168.10.*" />
[root@localhost ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
#添加
49 <role rolename="admin-gui"/>
50 <role rolename="admin-script"/>
51 <user username="admin" password="123456" roles="admin-gui"/>
52 <user username="adminscript" password="123456" roles="admin-script"/>
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
訪問http://192.168.10.30:8080/host-manager/html驗證
輸入的用戶名和密碼也就是組態檔中的設定


創建虛擬主機


[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
aaa bdqnweb docs examples hello host-manager manager ROOT
[root@localhost webapps]# cd aaa/
[root@localhost aaa]# echo AAAAAA > index.jsp
[root@localhost aaa]# vim /etc/hosts
#添加
192.168.10.30 www.kgc.com
[root@localhost aaa]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost aaa]# /usr/local/tomcat/bin/startup.sh
[root@localhost aaa]# curl www.kgc.com:8080/aaa/index.jsp
AAAAAA
tomcat的優化
tomcat的一個加固,用于安全方面
1、服務器的埠改為非8080埠
主組態檔中修改
[root@localhost ~]# cd /usr/local/tomcat1/conf/
[root@localhost conf]# vim server.xml
69 <Connector port="8081" protocol="HTTP/1.1"
2、禁用目錄瀏覽功能
[root@localhost ~]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# vim /usr/local/tomcat/conf/web.xml
111 <param-name>listings</param-name>
112 <param-value>false</param-value> #開啟目錄瀏覽功能
3、在生產環境中,要禁用應用管理平臺和主機管理平臺
[root@localhost ~]# rm -rf /usr/local/tomcat/webapps/manager/
[root@localhost ~]# rm -rf /usr/local/tomcat/webapps/host-manager/
4、隱藏服務版本的資訊

沒有找到對應的頁面時,會顯示版本的資訊,可以隱藏版本資訊
[root@localhost ~]# vim /usr/local/tomcat/conf/web.xml
23 <error-page>
24 <error-code>404</error-code>
25 <location>/notfound.jsp</location>
26 </error-page>
[root@localhost ~]# cd /usr/local/tomcat/webapps/hello/
[root@localhost hello]# echo "page no found" > notfound.jsp
[root@localhost hello]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost hello]# /usr/local/tomcat/bin/startup.sh
當再次訪問不存在的頁面時,將不會出現版本資訊

5、腳本權限識訓,防止爆破
chmod -R 700 /usr/local/tomcat/bin/*
tomcat引數的優化
1、內核的優化,調整內核的引數
[root@www ~]# cd /usr/local/tomcat/webapps/hello/
[root@www hello]# vim /etc/sysctl.conf
#末尾添加
net.ipv4.ip_local_port_range = 2048 65535 #65535個連接 32768-65535
net.ipv4.tcp_syn_retries = 3 #請求三次連接不上 就斷開
net.ipv4.tcp_synack_retries = 2 回應連接建立2次 沒有應答 就斷開
net.ipv4.tcp_fin_timeout = 15 第三次 超時連接15s
net.ipv4.tcp_keepalive_time = 1500 tcp長連接斷開的時間
net.ipv4.tcp_max_syn_backlog = 1000 網卡的請求大于cpu的請求的處理 設定佇列中的最大數量
[root@www hello]# sysctl -p
2、jvm記憶體的優化
[root@www hello]# vim /usr/local/tomcat/bin/catalina.sh
307 CATALINA_OPTS="-server -Xms512m -Xmx1024m"
#引數釋義:
-server:對記憶體的優化
-Xms512m:初始記憶體的大小
-Xms1024m:最大記憶體的大小
[root@www hello]# /usr/local/tomcat/bin/shutdown.sh
[root@www hello]# /usr/local/tomcat/bin/startup.sh
[root@www hello]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 67550/java
tcp6 0 0 ::1:31644 ::1:8080 TIME_WAIT -
3、模型優化
tomcat有3個模型
[root@locathost apr-1.7.0]# vim /etc/profile
#末尾添加
export LD_LIBRARY_PATH=$LD_LIBARB_PATH:/usr/local/apr/lib
[root@locathost apr-1.7.0]# source /etc/profile
[root@locathost ~]# cd /usr/local/tomcat/bin/
[root@locathost bin]# tar -zxf tomcat-native.tar.gz -C /usr/src/
[root@locathost bin]# cd /usr/src/tomcat-native-1.2.18-src/native/
[root@locathost native]# ./configure --prefix=/usr/local/apr --with-java-home=/usr/local/java && make && make install
[root@locathost native]# vim /usr/local/tomcat/conf/server.xml
69 <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
[root@locathost native]# cat /usr/local/tomcat/logs/catalina.out | grep http-apr-8080
12-Jan-2021 10:04:26.918 資訊 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-apr-8080"]
12-Jan-2021 10:04:27.397 資訊 [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
2、
[root@localhost native]# vim /usr/local/tomcat/conf/server.xml
69 <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
70 connectionTimeout="20000" #連接超時時間
71 maxThreads="1000" #并發量
72 maxProcessors="1000" #最大行程數量
73 minProcessors="500" #最小行程數量
74 maxSpareThreads="500" #最大空閑行程數
75 minSpareThreads="200" #最小空閑行程數
76 acceptCount="1000" #tomcat處理速度沒有請求速度快 最大排隊量
77 UIREncoding="utf-8" #編碼型別
78 enableLookups="false" #不允許反向域名決議
79 disableUploadTimeout="true" #不對上傳頁面進行超時設定
80 redirectPort="8443" /> #重定向埠 https的連接
[root@localhost native]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost native]# /usr/local/tomcat/bin/startup.sh
[root@localhost native]# netstat -anput | grep 8080
日志
[root@locathost native]# vim /usr/local/tomcat/conf/server.xml
164 pattern="%h %l %u %t %r %s %b %{Referer} i %{User-Agent} i %D" />
[root@locathost native]# /usr/local/tomcat/bin/shutdown.sh
[root@locathost native]# /usr/local/tomcat/bin/startup.sh
[root@locathost native]# netstat -anput | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 79341/java
日志切割:
[root@locathost ~]# tar -zxf cronolog-1.6.2.tar.gz
[root@locathost ~]# cd cronolog-1.6.2/
[root@locathost cronolog-1.6.2]# ./configure && make && make install
[root@locathost cronolog-1.6.2]# which cronolog
/usr/local/sbin/cronolog
[root@locathost cronolog-1.6.2]# cd /usr/local/tomcat/
[root@locathost tomcat]# vim bin/catalina.sh
#注釋掉451
451 #touch "$CATALINA_OUT"
#洗掉這行原本的內容,然后再添加
466 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.log" &
[root@locathost tomcat]# /usr/local/tomcat/bin/shutdown.sh
[root@locathost tomcat]# /usr/local/tomcat/bin/startup.sh
[root@locathost tomcat]# cd /usr/local/tomcat/logs/
[root@locathost logs]# ls
catalina.2021-01-10.log host-manager.2021-01-12.log localhost_access_log.2021-01-12.txt
catalina.2021-01-11.log localhost.2021-01-10.log manager.2021-01-10.log
catalina.2021-01-12.log localhost.2021-01-11.log manager.2021-01-11.log
catalina.out localhost.2021-01-12.log manager.2021-01-12.log
host-manager.2021-01-10.log localhost_access_log.2021-01-10.txt
host-manager.2021-01-11.log localhost_access_log.2021-01-11.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247757.html
標籤:其他
