http://xtony.blog.51cto.com/3964396/988706/ http://blog.sina.com.cn/s/blog_a0e7e34c01015nes.html http://blog.csdn.net/u010066934/article/details/51669043 http://www.cnblogs.com/doit8791/archive/2012/10/27/2742768.html
tomcat是SUN公司的JSWDK(JavaServer Web DEvelopmentKit,是SUN公司推出的小型Servlet/JSP調試工具 )的基礎上發展出來的一個優秀的徹底由Java語言編寫的Servlet容器; Servlet,顧名思義,是一種運行在服務器上的小插件。Servlet最多見的用途就是擴展Web服務器的功能,可做爲很是安全的、可移植的、易於使用的CGI代替品。Servlet具備如下特色: 提供了可被服務器動態加載並執行的程序代碼,爲客服端的請求提供相應服務; Servlet徹底用Java語言編寫,所以要求運行Servlet的服務器必須支持Java語言; Servlet徹底運行在服務器端,所以它不依賴於瀏覽器。無論瀏覽器是否支持Java語言,都能請求訪問服務器端的Servlet;
Tomcat做爲獨立的Web服務器來單獨運行,Servlet容器組件做爲Web服務器中的一部分而存在,這是Tomcat的默認工做模式。在這種模式下,Tomcat是一個獨立運行Java程序,須要啓動一個Java虛擬機(JVM)進程來運行Tomcat;html
在這種模式下,Tomcat分別爲Web服務器插件和Servlet容器組件兩部分。Web服務器插件在其餘的Web服務器進程內部地址空間啓動一個Java虛擬機,Servlet容器組件在此Java虛擬機中運行。若有客戶端發出調用Serlvet請求,Web服務器插件得到對此請求的控制並轉發給Servlet容器組件(使用JNI通信機制,即Java本地調用接口)。前端
在這種模式下,Tomcat分爲Web服務器插件和Serlvet容器組件兩部分。Web服務器插件在其餘的Web服務器進程外部地址空間啓動一個Java虛擬機,Servlet容器組件在此Java虛擬機中運行。若有客戶端發出調用Serlvet請求,Web服務器插件得到對此請求的控制並轉發給Servlet容器組件(採用IPC通信機制,即進程間通訊的一種機制)。java
一、從Base倉庫安裝java開發工具包:OpenJDK;linux
注:tomcat對java1.7的兼容性較好nginx
yum install java-1.7.0-openjdk-devel.x86_64web
二、查看JDK是否正常安裝;apache
java -versionvim
三、查看java的環境配置信息;瀏覽器
type javatomcat
能夠看出/usr/bin/java以及/etc/alternatives/java均爲連接文件; java支持多版本同時運行,能夠經過alternatives命令修改默認版本,或者修改/etc/alternatives/java連接文件指向要設定的默認版本的路徑便可;
一、從官網下載tomcat二進制安裝包(http://tomcat.apache.org/)
wget http://mirrors.tuna.tsinghua....
tar xf apache-tomcat-8.5.11.tar.gz -C /usr/local/
查看解壓後的目錄;
ll /usr/local/ | grep tomcat
二、爲方便管理,建立軟連接;
ln -s /usr/local/apache-tomcat-8.5.11/ /usr/local/tomcat
三、建立環境配置腳本;
vim /etc/profile.d/tomcat.sh
賦予執行權限;
chmod +x /etc/profile.d/tomcat.sh
加載環境配置;
source /etc/profile.d/tomcat.sh
四、啓動tomcat
/usr/local/tomcat/bin/catalina.sh start 或 #catalina.sh start
查看tomcat是否正常啓動
ss –tnl
五、測試本地8080端口是否正常監聽
curl -I 127.0.0.1:8080
六、經過瀏覽器訪問測試(需指定8080端口),注意selinux與iptables策略;
到此tomcat安裝成功;
一、Tomcat組件
Tomcat自己由一系列可配置的組件構成,其核心組件是Servlet容器組件,即運行在服務器上的小插件。每一個tomcat組件在server.xml文件中對應一種配置元素:
每個組件都由一個Java"類"實現,這些組件大致能夠分爲如下幾個類型:
頂級組件:Server;
服務類組件:Service;
鏈接器組件:http,https,ajp;
容器類組件:Engine,Host,Context;
嵌套類組件:valve,logger,realm,loader,manger,. . . ;
集羣類組件:listener,cluster,. . . ;
二、tomcat目錄結構
bin:腳本及啓動時用到的類
conf:配置文件目錄
lib:庫文件,java庫,jar
logs:日誌文件目錄
temp:臨時文件目錄
webapps:webapps的默認目錄
work:工做目錄
若是爲rpm包安裝:
配置文件目錄:/etc/tomcat
webapps存放位置:/var/lib/tomcat/webapps
環境配置文件:/etc/sysconfig/tomcat
三、tomcat的主要配置文件;
serverxml.xml:主要配置文件
web.xml每一個webapp只有"部署"後才能被訪問,它的部署方式一般由web.xml進行定義,其存放位置爲WEB-INF/目錄中,此文件爲全部的webapp提供默認配置;
context.xml:每一個web均可以專用的配置文件,它一般由專用的配置文件context.xml來定義,其存放位置爲WEB-INF/目錄中,此文件爲全部的webapp提供默認配置;
tomcat-users.xml:用戶認證的帳號和密碼文件;
catalina.policy:當使用-security選項啓動tomcat時,會附加加載該安全配置文件,用於爲tomcat設置安全策略;
catalima.properties:Java屬性的定義文件,因爲設定類加載器路徑,以及一些與JVM調優相關參數;
logging.properties:日誌系統相關的配置;
四、catalina.sh腳本參數詳解;
catalina.sh –help
一、JSP WebAPP的組織結構
/:webapps的根目錄 index.jsp:主頁; WEB-INF/:當前webapp的私有資源路徑,一般用於存儲當前的webapp的web.xml和context.xml配置文件; META-INF/:相似於WEB-INF/; classes/:類文件,當前webapp所提供的類; lib/:庫文件,當前webapp所提供的庫文件,被打包爲jar;
二、webapp歸檔格式:
經常使用的歸檔格式有4種:*.war(webapp)、*.jar(EJB的類打包文件)、*.rar(資源適配器類打包文件)、*.ear(企業級webapp);若是使用的是*.war時,默認會自動展開;
三、部署(deploy)webapp的相關操做
eploy:將webapp的源文件放置於目標目錄(網頁程序文件存放目錄),配置tomcat服務器可以基於web.xml和context.xml文件中定義的路徑來訪問此webapp,將其特有的類和依賴的類經過class loader裝載至JVM; 部署方式分爲自動部署(auto deploy)和手動部署兩種方式: 自動部署只需將webapp展開到tomcat/下的webapps/目錄便可; 手動部署又分爲冷部署和熱部署:冷部署,及把webapp複製到指定的位置,然後才啓動tomcat;熱部署,則是在不中止tomcat的前提下進行部署,須要藉助於manager、ant腳本、tcd(tomcat client deployer)等部署工具,tcd可用於遠程部署; undeploy:反部署,中止webapp,並將webapp從tomcat實例上卸載; start:啓動處於中止狀態的webapp; stop:中止webapp,再也不向用戶提供服務,其類依然在jvm上; redeploy:從新部署;
四、簡單冷部署一測試類應用:
mkdir -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>
調試測試頁面:
curl 127.0.0.1:8080/test/index.jsp
能夠看出,響應內容爲編譯後的頁面代碼;
一、頂層組件Server
Server表明tomcat instance(實例),即表現出的一個Java進程;監聽在8005端口上,只接收"SHUTDOWN"。各server監聽的端口不能相同,所以,在一物理主機啓動多個實例時,須要修改其監聽端口爲不一樣的端口; 【經常使用屬性】 Adderss:監聽shutdown命令的地址,默認爲localhost; port:監聽shutdown命令的端口,默認爲8005。設置爲-1,則禁止經過端口關閉Tomcat; shutdown:設置基於端口關閉Tomcat所需的字符串參數,默認爲"SHUTDOWN"
二、服務類組件Service
Service用於建一個或多個Connector(鏈接器組件)關聯至一個Engine組件;
三、鏈接器組件Connector
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
【經常使用屬性】:
port:接收http請求的端口,默認8080; protocol:使用協議,默認HTTP/1.1 redirectPort:接收https請求的端口,默認8443; connectionTimeout:每一個請求最長鏈接時間,單位毫秒,默認20000; address:監聽的IP地址;默認爲本機全部可用地址; maxThreads:最大併發鏈接數,默認爲150; enableLookups:是否啓用DNS查詢功能; acceptCount:等待隊列的最大長度; secure:安全設置 sslProtocol:SSL協議
四、容器類組件Engine
Engine組件:Servlet實例,即servlet引擎,每一個Servlet只能包含一個Engine,其內部能夠一個或多個host組件來定義站點;一般須要經過defaultHost來定義默認的虛擬主機; 【經常使用屬性】: name:Engine名稱 defaultHost:默認Host jvmRoute:Tomcat集羣節點路由標示,用於區分不一樣tomcat;
五、容器類組件Host
Host組件位於engine內部用於接收請求並進行相應處理的主機或虛擬主機,示例: <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> </Host> 【經常使用屬性】: appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可使用基於$CATALINA_BASE變量所定義的路徑的相對路徑; autoDeploy:在Tomcat處於運行狀態時,將某webapp放置於appBase所定義的目錄中時,是否自動將其部署至tomcat; startStopThreads:線程池內的線程數量 示例: <Host name="tc1.magedu.com" appBase="/appdata/webapps" unpackWARs="true" autoDeploy="true"> </Host> 簡單示例:
# mkdir -pv /appdata/webapps # mkdir -pv /appdata/webapps/ROOT/{lib,classes,WEB-INF} # vim /usr/local/tomcat/webapps/ROOT/index.jsp 建立一個測試頁測試便可(參照第四章節,第4小節);
六、容器類組件Context
每一個Context表明一個運行在虛擬主機上的Web應用,一個Host上能夠有多個Context; 【經常使用屬性】 path:該Web項目的URL入口;path設置爲"",輸入http://localhost:8080便可訪問Webapp;path設置爲"/test",輸入http://localhost:8080/test才能訪問Webapp docBas:webapps的路徑,相對或絕對路徑均可以; reloadable:自動部署配置,設置爲true時,當Web項目的/WEB-INF/classes/和/WEB-INF/lib發生變化時,tomcat會自動從新部署Web項目。reloadable默認值爲false。 示例:
<Context path="/PATH" docBase="/PATH/TO/SOMEDIR" reloadable=""/>
七、嵌套類組件Valve
Valve組件經常使用於Tomcat的日誌、權限等控制,可嵌在Engine、Host、Context內; 【經常使用屬性】 className: 定義訪問日誌:org.apache.catalina.valves.AccessLogValve 定義訪問控制:org.apache.catalina.valves.RemoteAddrValve、org.apache.catalina.valves.RemoteHostValve 【日誌配置】 className:必須爲org.apache.catalina.valves.AccessLogValve directory:日誌文件目錄,默認爲logs(相對於$CATALINA_HOME); prefix:日誌前綴,默認爲localhost_access_log; suffix:日誌後綴,默認爲.txt; pattern:日誌記錄格式;具體見後面附表; 示例:
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> 【基於IP訪問控制】 className:必須爲org.apache.catalina.valves.RemoteAddrValve allow:容許名單;匹配模式:能夠基於IP、IP段,IP分隔符"."須要加"\"轉義,可用".*"通配 deny:拒絕名單;匹配模式同allow; 示例:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="172.16.0..*"/>