本書對應Tomcat6.0。
第1章 Tomcat的開幕式
l 先安裝配置好相應版本的Java,安裝配置tomcat。各個操作系統上安裝tomcat的方法介紹,測試安裝成功:瀏覽器輸入http://localhost:8080。
l 執行Tomcat的腳本。
l Catalina腳本的啓動參數。
l Tomcat的環境變量。
l 不同操作系統下Tomcat的啓動與停止與重啓與自動啓動。不同的Tomcat實例需要佔用不同的Http端口。
Ubuntu命令行服務器下的一個Tomcat安裝實踐:
安裝jdk====================================================
sudo tar -zxvf jdk-7u80-linux-x64.tar.gz
/home/vivoadmin/jdk1.7.0_80
環境變量
vim ~/.bashrc
使用vim命令操作i進入編輯,esc退出編輯,:q退出,:wq保存並退出,:w保存,:q!不保存退出
gg:命令將光標移動到文檔開頭
G:命令將光標移動到文檔末尾
搜索:/字符串 或者 ?字符串
文件末尾加入:並保存
#set oracle jdk environment
exportJAVA_HOME=/home/vivoadmin/jdk1.7.0_80
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
使環境變量生效:
source ~/.bashrc
設置系統默認jdk 版本(可不做)
sudo update-alternatives --install/usr/bin/java java /usr/lib/jvm/jdk1.7.0_60/bin/java 300
sudo update-alternatives --install /usr/bin/javacjavac /usr/lib/jvm/jdk1.7.0_60/bin/javac 300
sudo update-alternatives --install/usr/bin/jar jar /usr/lib/jvm/jdk1.7.0_60/bin/jar 300
sudo update-alternatives --install/usr/bin/javah javah /usr/lib/jvm/jdk1.7.0_60/bin/javah 300
sudo update-alternatives --install/usr/bin/javap javap /usr/lib/jvm/jdk1.7.0_60/bin/javap 300
測試jdk:
java -version
安裝tomcat=========================================
tar -zvxf apache-tomcat-7.0.81.tar.gz
vim ~/.bashrc
末尾添加:
#set apache tomcat environment
exportCLASSPATH=$CLASSPATH:%JAVA_HOME/lib/tools.jar
exportTOMCAT_HOME=/home/vivoadmin/apache-tomcat-7.0.81
export CATALINA_HOME=$TOMCAT_HOME
export PATH=$PATH:$TOMCAT_HOME/bin
source ~/.bashrc
配置jdk目錄:
vim apache-tomcat-7.0.81/bin/catalina.sh
在apache-tomcat-7.0.81/bin下啓動tomcat:
./startup.sh
關閉則爲:
./shutdown.sh
檢測tomcat是否在運行:
ps -ef|grep tomcat
查看tomcat控制檯輸出:進入tomcat/logs/文件夾下
tail -f catalina.out
http://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin
http://download.oracle.com/otn/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
第2章 配置Tomcat
l 重定向Web應用程序的目錄。
l 更改8080端口號:server.xml中Connector元素的port。
l 將端口80的TCP連接傳遞給端口8080:linux下iptables –t nat –L查看端口情況。
l Java VM配置。
l 變換JSP編譯器。
l 管理域、角色、用戶:UserDatabaseRealm、JDBCRealm、JNDIRealm、JAASRealm。
l 容器管理的安全防護:基本驗證(http base64用戶口令,web.xml),摘要驗證(http摘要編碼用戶口令,web.xml),表單驗證,Client-cert驗證(數字證書,ssl)。
l 單次簽名。
l 控制會話。StandardManager將會話持續性存儲在文件系統上的內嵌程序代碼。PersistentManager將會話存入session store也可配置成FileStore、JDBCStore的。
第3章 在Tomcat中部署Servlet與JSP Web應用程序
l 三種場合:把解包的webapp目錄部署到同一臺機器的Tomcat實例中;在同一臺機器上將WAR文件部署到Tomcat中;通過連接到Manger webapp的TCP網絡把解包webapp目錄或者WAR文件部署到Tomcat實例(本地或者遠程)中。
l Server.xml Context部署,配置server.xml以辨認、啓動和管理Web應用程序,對每個新增的Web應用程序,這是推薦的設置Tomcat的方法。可配置成8080即可訪問不需要應用名的方式。
l Context Xml片段文件部署,區別於server.xml配置,從而不需要頻繁地修改server.xml,但是Context不包含的元素則還是需要修改server.xml。
l 熱部署:Host設置autoDeploy="true",且deployOnStartup="false",創建<Context>嵌套到可進行熱部署的<Host>中,將war文件複製到可熱部署的Host的appBase中,創建一個contextXML片段文件指向解包目錄或者war文件,並將contextXML片段文件放在CATALINA_HOME/conf/[EngineerName]/[HostName]/目錄中。
l Manager部署以及Ant自動部署。
第4章 Tomcat的性能調校
l 調校服務器是相當複雜的藝術,包括測量、瞭解、改變與再次測量等。基本步驟:1、決定需要測量的對象;2、決定測量的方式;3、測量;4、從測量結果中瞭解其含義;5、以預期會提升測量結果的方式來修補系統設置;6、測量並與之前的測量結果比較;7、回到第4步。
l 測量Web服務器的性能。測試程序應該與tomcat機器通信隔離。需要考慮的很多問題以及選擇。
l 測試負載的工具:http://softwareqatest.com/qatweb1.html,包括Apache Benchmark、Siege、Apache Jakarta的Jmeter。如果要確定服務器每秒最多能成功處理多少請求,那麼使用Apache Benchmark或者Siege,否則使用Jmeter就能滿足很多需求且有圖形界面。ab下載:https://www.apachehaus.com/cgi-bin/download.plx對應的x64版本,官方文檔:http://httpd.apache.org/docs/2.4/programs/ab.html。
l Tomcat連接器和Apache httpd連接器模塊:Tomcat提供了三種不同的服務器設計實現方法:以服務於HTTP,並實現與服務於AJP三種設計方法相同的設計方法:JIO(java.io)、APR(ApachePortable Runtime)、NIO(java.nio)
l 關閉DNS查詢:當Web應用程序想要記錄客戶端的信息時可以記錄其IP地址或者DNS中查詢真正的主機名會產生耗時和延遲,server.xml的Connector中設置enablelookups="false"以關閉DNS查詢。Tomcat外其實可以查到主機名。
l 調整線程數:Connector的minThreads和maxThreads可嘗試不同的值來仿真查看響應時間和內存佔用情況,沒有現成規則只能靠實踐和經驗。
l 預編譯JSP。
l 容量規劃:通過研究及(或)預測網站必須處理的總網絡流量,決定可接受的服務質量與尋找滿足或超越服務器軟件需求,來預測網站所需的計算機硬件、操作系統與帶寬的活動。這裏的計算機軟件包括Tomcat以及在Tomcat前端使用的第三方Web服務器與負載均衡器。可理解爲符合網站預期流量大小的硬件與帶寬。分爲經驗式和學術式(如企業容量規劃)。
l 額外的資源:《Java Performance Tuning》。
第5章 與Apache Web服務器的整合
l 略。
第6章 Tomcat安全防護
l 操作系統安全防護,配置網絡,多臺服務器的安全防護模式,使用SecurityManager,授予文件權限,設置Tomcat chroot Jail。
l 過濾黑客攻擊:XSS、HTML注入、SQL注入、命令注入。
l HTTP請求過濾,BadInputValve,BadInputFilter。
l 使用SSL,Tomcat設置SSL連接器。
第7章 配置
l server.xml:Tomcat主配置文件;web.xml:servlet與其他適用於整個web應用程序設置的配置文件,必須符合servlet規範的標準格式;tomcat-user.xml:Tomcat的UserDatabaseRealm用於認證的默認角色、用戶以及密碼清單;catalina.policy:Tomcat的Java安全防護策略文件;context.xml:默認的context設置,應用於安裝了Tomcat的所有主機的所有部署內容。
l server.xml:元素:Server(根元素代表Tomcat自己),Service,Executor(用於Connector共享線程池),Connector(一個Web服務器),Engine,Cluster(多個tomcat實例之間),Host,Alias,Context(Web應用程序),Realm(用戶與角色),Valve(處理過濾),Manager(管理會話),Listener(處理lifecycle),Resources,Resource,ResourceEnvRef,ResourceLink,WatchedResource,GlobalNamingResources,Environmentsetting,Store,Transactionsetting,Channel,Membership,Sender,Transport,Receiver,Inspector,Member,Deployer,ClusterListener。
l Connector屬性:acceptCount隊列可等待最大連接數,address,algorithm,allowTrace,bufferSize(使用的內存數爲buffersize*maxThread),ciphers,clientAuth,compression,compressableMimeTypes,connectionLinger(Connector關閉了客戶端socket連接後延長一定時間),connectionTimeout,connectionUploadTimeout,disableUploadTimeout,emptySessionPath,executor,keepAliveTimeout,keyAlias,keystoreFile,keystorePass,keystoreType,maxHttpHeaderSize,maxKeepAliveRequests,maxPostSize,maxSavePostSize,maxSpareThreads,maxThreads(併發運行的請求處理線程最大數,太大太小都會延長響應時間),minSpareThreads,noCompressionUserAgents,port,protocol(可爲HTTP/1.1、AJP/1.3、org.apache.coyote.http11.Http11Protocol、org.apache.coyote.http11.Http11AprProtocol、org.apache.jk.server.JkCoyoteHandler、org.apache.coyote.ajp.AjpAprProtocol、org.apache.coyote.http11.Http11NioProtocol),proxyName,proxyPort,redirectPort,restrictedUserAgents,schema(http或https),secure,SSLEnabled,sslProtocol,tcpNoDelay(是否開啓nagle算法),threadPriority,truststoreFile,truststorePass,truststoreType,URIEncode,userBodyEncodingForURI,usePVHost,xpoweredBy。
l Manager:共5種,StandardManager(默認),PersistentManager(空閒會話對象交換到磁盤上),DeltaManager(集羣會話管理),BackupManager(複製會話變化到另一個集羣實例中),SimpleTcpReplicationManager(不推薦)。
l Valve實現:AccessLogValve,ExtendedAccessLogValve,JDBCAccessLogValve,RequestDumperValve,RemoteAddrValve,RemoteHostValve,SemaphoreValve,CometConnectionManagerValve,JvmRouteBinderValve,ReplicationValve,SingleSignOn,ClusterSingleSignOn。
l Cluster:集羣,運行兩個以上的 Tomcat節點並複製節點之間的會話狀態以及潛在的context屬性狀態。可含Channel、Membership、Receiver、Sender、Transport、Interceptor(DomainFilterInterceptor、FragmentationInterceptor、GzipInterceptor、MessageDispatchInterceptor、MessageDispatch15Interceptor、OrderInterceptor、StaticMembershipInterceptor、TcpFailureDetector、ThroughputInterceptor、TwoPhaseCommitInterceptor)、Deployer。
l web.xml:Java servletcontainer都會用到,包括$CATALINA/conf下以及每個Web應用程序內,conf/web.xml會應用於所有Web應用程序。
l web-app:root元素。icon、display-name、description、distributable、context-param、filter(通用過濾機制,含init-param)、filter-mapping(把過濾器調用映射爲servlet名或URL模式)、listener、servlet(短名、類名及servlet的可選項)、servlet-mapping(爲servlet指定非缺省的URL)、session-config(指定session配置,session超時才指定)、mime-mapping(服務器上文件的MIME類型)、welcom-file-list、error-page、jsp-config(所有jsp全局配置、taglib、jsp-property-group)、resource-ref(給對象引用JNDI factory)、resource-env-ref、message-destination、message-destination-ref、security-constraint(要求認證)、login-config(登錄機制)、security-role(與security-constraint配套使用)、service-ref(Web服務的引用)、env-entry(靜態對象的JNDI查詢)、ejb-ref、ejb-local-ref、locale-encoding-mapping-list。
l jsp-property-group子元素:url-pattern、page-encoding、is-xml、el-ignored、scripting-invalid、include-prelude、include-coda、deferred-syntax-allowed-as-literal、trim-derective-whitespaces。
l tomcat-user.xml:用戶名、角色和密碼的清單。根元素爲tomcat-user,role(rolename),user(name、password、roles)。
l catalina.policy:安全防護的配置文件,有JVM讀取,有-security選項調用Tomcat的時候纔會用到。
l catalina.properties:類加載器路徑、安全防護包列表以及一些可調校的性能屬性。可自定義屬性然後再server.xml中用到,如http.port=80,在server.xml中用port="${http.port}"方式引用。
l context.xml:全局context設置。
第8章 調試與疑難排解
l 解讀日誌文件:日誌級別等設置在conf/loggin.properties。
l 獵尋錯誤:catalina.out日誌文件有助於排查故障。
l 用RequestDumperValve來調試:在server.xml中加入<Valve className="org.apache.catalina.valves.RequestDumperValve"/>。
l 無法停止tomcat的疑難排解。
第9章 從源代碼組件Tomcat
l 略。
第10章 Tomcat集羣
l 集羣技術:DNS請求分配(經由Apache httpd和mod_proxy),TCP網絡地址轉換(TCP NAT請求分配),Mod_proxy_balancer負載均衡與故障復原,JDBC請求分佈與故障復原。
l 分佈式Java Servlet Container:會話親和(Session Affinity,相同會話請求由相同Tomcat實例處理),會話複製(Replicated Session,有多種複製方式)。
l 配置和測試IP多播。
l 配置完全複製(All To All)。
l 配置靜態成員關係。
l 配置主/備複製。
l 其他資源:高可靠性軟件,消息定位中間鍵,數據庫集羣,商業HA硬件,IP多播,NFS,多種集羣。
第11章 閉幕式
l 補充資源:Tomcat的聯機文檔,Apache Tomcat網站文檔(http://tomcat.apache.org),Apache Tomcat郵件列表歸檔區(http://tomcat.apache.org/lists.html),本書的網站(http://www.oreilly.com/catalog/9780596101060,http://tomcatbook.drawinsys.com, http://tomcatbook.brittainweb.org),關於Tomcat的第三方網站。