一、什麼是Tomcat
Tomcat 服務器是從Apache開發而來的一個免費的、開源的、輕量級的Web 應用服務器,在中小型系統和併發訪問用戶不多的場合下被普遍使用,是開發和調試JSP 程序的首選。當配置正確時,Apache 爲HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。
在我看來,tomcat是一箇中間件,在B/S架構中,瀏覽器發出的http請求經過tpmcat中間件,轉發到最終的目的服務器上,響應消息再通過tomcat返回給瀏覽器。tomcat在此過程中開啓監聽端口監聽用戶的請求,解析用戶發來的http請求然後訪問到你指定的應用系統,然後你返回的頁面經過tomcat返回給用戶。
1.1 Apache,Nginx和Tomcat的區別
1)Apache
Apache支持模塊多,性能穩定,Apache本身是靜態解析,適合靜態HTML、圖片等,但可以通過擴展腳本、模塊等支持動態頁面等。
缺點:配置相對複雜,自身不支持動態頁面。
優點:相對於Tomcat服務器來說處理靜態文件是它的優勢,速度快。Apache是靜態解析,適合靜態HTML、圖片等。
(Apche可以支持PHPcgiperl,但是要使用Java的話,你需要Tomcat在Apache後臺支撐,將Java請求由Apache轉發給Tomcat處理。)
2)Tomcat:
Tomcat是應用(Java)服務器,它只是一個Servlet(JSP也翻譯成Servlet)容器,可以認爲是Apache的擴展,但是可以獨立於Apache運行。
缺點:可以說Tomcat 只能用做java服務器,tomcat接受的最大併發數有限,連接數過多,會導致tomcat處於"殭屍"狀態,對後續的連接失去響應,需要結合nginx一起使用。
優點:動態解析容器,處理動態請求,是編譯JSP/Servlet的容器。
三個端口:
8005:關閉tomcat通信接口
8009:與其他http服務器通信接口,用於http服務器集合
8080:建立http連接 用,如瀏覽器訪問
3)Nginx
缺點:Nginx 只適合靜態和反向代理。
優點:負載均衡、反向代理、處理靜態文件優勢。Nginx 處理靜態請求的速度高於Apache。
Nginx有動態分離機制,靜態請求直接就可以通過Nginx處理,動態請求才轉發請求到後臺交由Tomcat進行處理。
Apache和 Nginx用於處理靜態資源, tomcat用來處理動態資源。Apache和Nginx相比,Nginx適合做前端服務器,適合做負載均衡。 一般情況下,使用的時候,都是 Apache+Tomcat
一起使用或者 Nginx+tomcat
一起使用。
1.2 爲什麼要動靜態資源分離
靜態資源:指存儲在硬盤內的數據,固定的數據,不需要計算的數據。
- 如:圖片、字體、js文件、css文件等等。在用戶訪問靜態資源時,服務器會直接將這些資源返回到用戶的計算機內。
動態資源:指需要服務器根據用戶的操作所返回的數據,以及存儲在數據庫的數據,經過一系列邏輯計算後返回的數據。
- 如:請求日期,時間,明天的天氣等等會變動的數據。
Tomcat應用服務器是用來處理Servlet容器和JSP的,雖然它也可以處理HTML等等一系列靜態資源,但是效率不如Nginx;而且tomcat對Servlet容器和JSP的運算已經有很大壓力了,如果不分離會導致大量的性能浪費。我認爲在應用服務方面,要遵循一條原則——一個服務只做一件事。要做動態請求就專做動態請求,要做靜態請求就專做靜態請求,這樣才能提高性能。
二、實現訪問動態頁面
實驗環境
主機(版本:ip) | 功用 |
---|---|
虛擬機server1(rhel6.5:172.25.2.1) | lnmp環境主機 |
真機(rhel7.3:172.25.2.250) | 測試機 |
實驗原理
當用戶訪問動態資源時,將訪問轉到Tomcat應用服務器上,Tomcat將數據返回給Nginx,Nginx再返回給用戶。
1、安裝jdk和tomcat將其放至/usr/local
目錄下
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
2、創建軟鏈接
cd /usr/local
ln -s jdk1.7.0_79/ java
ln -s apache-tomcat-7.0.37/ tomcat
java可以tab補齊,java -version
可查看java的版本
3、配置java的環境變量並使其生效
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
驗證環境配置是否正確
echo $PATH
echo $CLASSPATH # 類加載路徑
echo $JAVA_HOME # 命令的路徑,不用寫絕對路徑了)
which javac # 編譯
which java # 運行指令
javac
和 java
我們可以通過一個簡單的腳本區別
4、打開tomcat,並訪問。
cd /usr/local/tomcat
bin/startup.sh
此時去瀏覽器訪問172.25.2.1:8080
此時訪問172.25.2.1/index.jsp
訪問不到,是因爲openresty開啓的80端口
5、編輯openresty的配置文件並重啓服務,這個實驗的配置文件是在上一個實驗的配置文件的基礎上修改的
[root@server1 tomcat]# cd /usr/local/openresty/nginx/conf/
[root@server1 conf]# vim nginx.conf
72 location ~ \.jsp$ {
73 proxy_pass http://127.0.0.1:8080;
74 }
[root@server1 conf]# /usr/local/openresty/nginx/sbin/nginx -s reload
此時再去訪問172.25.2.1/index.jsp
就可以訪問到
但這個頁面的動態的jsp效果不明顯,所以我們重新編輯測試頁。
6、再次編輯測試頁
[root@server1 conf]# cd /usr/local/tomcat/webapps/ROOT/
[root@server1 ROOT]# ls
asf-logo.png bg-nav-item.png favicon.ico tomcat.gif WEB-INF
asf-logo-wide.gif bg-nav.png index.jsp tomcat.png
bg-button.png bg-upper.png RELEASE-NOTES.txt tomcat-power.gif
bg-middle.png build.xml tomcat.css tomcat.svg
[root@server1 ROOT]# vim test.jsp
server1-The time is: <%=new java.util.Date() %>
當我們再次訪問時,時間會一直變化,實現了訪問動態頁面