需要安裝JDK JAVA Development Kit //JAVA 2 SE 的接口
?
?
TOMCAT 的安裝:
-
yum 安裝
#yum install -y java-1.8.0-openjdk-devel
如下界面出現的話就是安裝OK
注意:安裝完成后,要配置JAVA_HOME環境變量,指向java的安裝路徑;
OpenJDK:
JAVA_HOME=/usr
Oracle JDK:
JAVA_HOME=/usr/java/jdk_VERSION
?
?設定JAVAHOME 變量
cat /etc/profile.d/java.sh
export JAVA_HOME=/usr
-
java 2 EE
servlet :web app 類庫
JSP:JAVA Server Page //將JAVA代碼嵌入到html文件中
?
?.jsp –>jasper–> .java –> javac –> .class –> jvm
注意:基于jasper將靜態輸出的數據轉為java代碼進行輸出,結果為servlet規范的代碼;
JSP Container:
JSP + Servlet Container
?
?Java Web Server:JWS
ASF:JServ
?
?Tomcat 3.x
Tomcat 4.x
Catalina
TOMCAT 就是java 2 EE 的一種
能解析的協議:
http、jsp
?
?
-
-
TOMCAT 的應用:
安裝tomcat
-
#yum install tomcat tomcat-webapps tomcat-admin-webapps
systemctl start tomcat
綠色安裝
#wget ftp://172.18.0.1/pub/Sources/6.x86_64/tomcat/apache-tomcat-8.0.23.tar.gz
#tar xf apache-tomcat-8.0.23.tar.gz -C /usr/local/
#ln apache-tomcat-8.0.23 tomcat -s
#useradd -r tomcat
#chown -R :tomcat * //為填加tomcat的可讀權限;權限不能設置太大
#chown -R tomcat logs work temp conf //某些特定的文件夾
[48.62root@localhost tomcat]35#cat > /etc/profile.d/tomcat.sh << EOF
> export CATALINA_HOME=/usr/local/tomcat
> export PATH=$catalina_HOME/bin:$PATH
> EOF
# su – tomcat -c ‘/usr/local/tomcat/bin/catalina.sh start’ //注意要以tomcat用戶啟動
?
??
?配置tomcat : /etc/tomcat
server.xml : 主配置文件
web.xml:每個webapp只有”部署”后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認配置;
context.xml:每個web都可以專用的配置文件,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認配置;
tomcat-users.xml:用戶認證的賬號和密碼文件;
catalina.policy:當使用-security選項啟動tomcat時,用于為tomcat設置安全策略;
catalina.properties:Java屬性的定義文件,用于設定類加載器路徑,以及一些與JVM調優相關參數;
logging.properties:日志系統相關的配置
?
?主配基本內容:
示例:
<Server port=”8005″ shutdown=”SHUTDOWN”> // 關閉tomcat的控制端口和命令,注意修改
?
?
defaulthost 默認的虛擬主機
host 相當于之前虛擬主機
<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” />
?
?組件大概構成:
每一個組件都由一個Java”類“實現,這些組件大體可分為以下幾個類型:
頂級組件:Server
服務類組件:Service
連接器組件:http, https, ajp
容器類:Engine, Host, Context
被嵌套類:valve, logger, realm, loader, manager, …
集群類組件:listener, cluster, …
tomcat的目錄結構 //
bin:腳本,及啟動時用到的類;
conf:配置文件目錄;
lib:庫文件,Java類庫,jar;
logs:日志文件目錄;
temp:臨時文件目錄;
webapps:webapp的默認目錄;
work:工作目錄;//
ROOT:相當于主頁根目錄;主頁根目錄的映射
?
??
?JSP WebAPP的組織結構:應用程序基本都遵循這個目錄結構
/: webapps的根目錄;每個應用程序都有一個該目錄
index.jsp:主頁;
WEB-INF/:當前webapp的私有資源路徑;通常用于存儲當前webapp的web.xml和context.xml配置文件;
META-INF/:類似于WEB-INF/;不會被用戶訪問到
classes/:類文件,當前webapp所提供的類;
lib/:類文件,當前webapp所提供的類,被打包為jar格式;
webapp歸檔格式:
.war:webapp
.jar:EJB的類打包文件;
.rar:資源適配器類打包文件;
.ear:企業級webapp;
部署 //:應用程序依賴到的類必須被加載到JVM(JAVA虛擬機)中才能運行
deploy:將webapp的源文件放置于目標目錄(網頁程序文件存放目錄),配置tomcat服務器能夠基于web.xml和context.xml文件中定義的路徑來訪問此webapp;將其特有的類和依賴的類通過class loader裝載至JVM
自動部署://不建議用,通過測試可以
hi6u&%Xw6FL0^)^Hv#
部署有兩種方式:
自動部署:auto deploy
手動部署:
冷部署:把webapp復制到指定的位置,而后才啟動tomcat;
熱部署:在不停止tomcat的前提下進行部署;
部署工具:manager、ant腳本、tcd(tomcat client deployer)等;????????????????????????????????????????
undeploy:反部署,停止webapp,并從tomcat實例上卸載webapp;
start:啟動處于停止狀態的webapp;
stop:停止webapp,不再向用戶提供服務;其類依然在jvm上;
redeploy:重新部署;
實驗一 部署簡單網頁
[48.62root@localhost test]16#mkdir ./{lib,classes,WEB-INF,META-INF} -v
[48.62root@localhost test]19#vim index.jsp
?
??
?
tomcat管理界面用戶認證:// 以Yum安裝的為例
cd /etc/tomcat/
# vim tomcat-user.xml
?
?重啟服務 并鏈接實驗
?
?配置用于管理hostmanager //參照配置文件底層示例
?
??
?常用配置:
Server:代表tomcat instance,即表現出的一個java進程;監聽在8005端口,只接收”SHUTDOWN”。各server監聽的端口不能相同,因此,在同一物理主機啟動多個實例時,需要修改其監聽端口為不同的端口;
?
?Service:用于實現將一個或多個connector組件關聯至一個engine組件;
·
Connector組件:
負責接收請求,常見的有三類http/https/ajp
tomcat的請求分類:
1.直接來自客戶端
2.來自前端反代:
nginx –> http connector –> tomcat
httpd(proxy_http_module) –> http connector –> tomcat
httpd(proxy_ajp_module) –> ajp connector –> tomcat
屬性:
port=”8080″
protocol=”HTTP/1.1″
connectionTimeout=”20000″
?
?address:監聽的IP地址;默認為本機所有可用地址;
maxThreads:最大并發連接數,默認為200;
enableLookups:是否啟用DNS查詢功能;
acceptCount:等待隊列的最大長度; //相當于backlog
secure:
sslProtocol:
實驗示例://定義connector
/etc/tomcat/server.xml內容
鏈接實驗:
?
?engine :
jvmRoute=”jvm1″ //用于集群中會話綁定
<Engine name=”Catalina” defaultHost=”localhost”>
?
?host :// 相當于虛擬主機
Host組件:位于engine內部用于接收請求并進行相應處理的主機或虛擬主機,示例:
<Host name=”localhost” appBase=”webapps”
unpackWARs=”true” autoDeploy=”true”>
</Host>
?
?常用屬性說明:
(1) appBase:此Host的webapps的默認存放目錄,指存放非歸檔的web應用程序的目錄或歸檔的WAR文件目錄路徑;可以使用基于$CATALINA_BASE變量所定義的路徑的相對路徑;
(2) autoDeploy:在Tomcat處于運行狀態時,將某webapp放置于appBase所定義的目錄中時,是否自動將其部署至tomcat;
實驗示例:
?
?
?
?Context組件: //內嵌到虛擬主機host中
示例:
<Context path=”/PATH” docBase=”/PATH/TO/SOMEDIR” reloadable=””/>
context path : uri 路徑
實驗示例:
?
?#cp -a /usr/share/tomcat/webapps/ROOT /app/tomcat/test
重啟鏈接實驗:
-
?
?
?
?
?
?
VALVE : 控制模塊
Valve組件:
<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”
prefix=”localhost_access_log” suffix=”.txt”
pattern=”%h %l %u %t "%r" %s %b” />
?
?
Valve存在多種類型:
定義訪問日志:org.apache.catalina.valves.AccessLogValve
定義訪問控制:org.apache.catalina.valves.RemoteAddrValve
訪問控制也可以用iptables 管控
?
?
TOMCAT 的集群組合實驗:
nginx+tomcat // 本機實驗;centos7
?
?
?
?
開啟服務并鏈接:
?
?
nginx+tomcat //本機實驗;代理虛擬主機名
重新啟動并鏈接實驗
?
?
nginx+tomcat // 實習那動靜分離;這里僅僅實驗。
?
?
重啟鏈接測試
?
?
額外參考: rewrite 規則:
?
?
apache+tomcat:// 利用proxy_http_module
在/etc/httpd/conf.d/ 新建 tomcat.conf
啟動服務并測試鏈接
?
?
apache+tomcat:// 利用proxy_ajp_module;重點是ajp
重啟并鏈接測驗:
?
?
負載均衡時的session的保持:
session sticky:
nginx: Ip_hash
haproxy:source
lvs:sh
cookie:
nginx:hash
haproxy:cookie
session cluster:delta session manager
session server:redis(store)
memcached(cache)
?
?
實驗負載均衡 :nginx+tomcat+memcached
?
?
在tomcat 48.71 創建目錄:
修改index.html內容
?
?
啟動tomcat服務并測試:
?
?
48.72 同樣配置
?
?
ip 48.64 安裝 并配置 nginx /etc/nginx/nginx.conf
?
?
在 http 字段中填加 如下字段
在/etc/nginx/conf.d/default.conf 填加轉發規則
重啟服務并測試鏈接
?
?
現在填加會話保持: // memcached server 來實現
安裝memcached 并開啟服務
# yum install memcached -y
systemctl start memcached
?
?
額外: //配置文件的內容。
配置tomcat文件設定
a.首先架起tomcat與memcached 的橋梁;放置到下圖目錄中
b.配置tomcat server.xml 文件 ;填加如下內容到指定 Host 配置段中//注意類文件目錄和IP地址
<Context path=”/test” docBase=”/usr/share/tomcat/webapps/test” reloadable=”true”>
<Manager className=”de.javakaffee.web.msm.MemcachedBackupSessionManager”
memcachedNodes=”n1:172.18.48.71:11211,n2:172.18.48.72:11211″
failoverNodes=”n1″
requestUriIgnorePattern=”.*.(ico|png|gif|jpg|css|js)$”
transcoderFactoryClass=”de.javakaffee.web.msm.serializer.javolution.JavolutionTranscod erFactory” />
</Context>
重啟tomcat 服務并測驗//多次刷新 session ID 保持不變
?
?
?
?
?
?
tomcat 調優相關: //依據JVM 特性進行設置
JVM 內存區的結構
公共區
方法區(method area) //加載class 常量 靜態變量和編譯后的代碼
堆內存 (JAVA heap) //所有的對象和數組、
私有區
線程棧 (JAVA Stack) //私有數據,線程調用進入和返回棧的操作。
PC寄存器 (program covnter register) //每個線程自己的計數寄存器,用來存儲當前線程存儲字節碼的地址。
本地方法棧 (native stack ) //為調用本地方法服務(類似與JAVA STACK)
JAVA 代碼運行:
創建對象–>運行對象–>銷毀對象
?
?
內存中的結構
eden –>from–>to–>old–>perm (每一次篩選,計數非0 的對象狀態流程)
?
?
調優相關
?
?
?
?
?
?
原創文章,作者:zhoulz,如若轉載,請注明出處:http://www.www58058.com/79614