tomcat

tomcat:
php:
開發語言:腳本語言
運行環境:解釋執行
zend engine:opcode
xcache,APC,eaccelerator

MVC(model-view-controller):模式-試圖-控制器,即把一個應用的輸入、處理、輸出流程按照model、view、controller的方式進行分離,這樣一個應用層被分爲三個層--模型層、試圖層、控制層。
    data:數據
    bussiness:業務
    presentation:展示
smarty
    web:

用c/c++做開發cpu,os
移植困難
維護成本高

用c/c++做開發驅動
高速

c/c++
c:面向過程
c++:面向對象

c:API(application programming interface)應用編程接口:包含多個系統調用
os,system call:

windows,API
POSIX(protabl operating system):可移植操作系統

Linux,API,Linux(compiling:Linux,running:windows)
.dll
.so

ABI(application binary interface):應用程序二進制接口

oak:橡樹,智能
Java包含四個獨立的又彼此相關的技術:
Java程序設計語言
Java API
Java class文件格式
jvm(Java virtual machine)

java程序語言+java API = *.java

.java通過java編譯器編譯 ---》.class通過class load在jvm(需要依賴公共類庫)上面運行

Java語言寫完後經過Java編譯器編譯完成後就變成了class
once for all:一次編譯,到處運行:write once,run anywhere

bytecode:字節碼

.java--》.class(bytecode)

jvm的實現方式:
1.一次解釋器,解釋字節碼並執行,就是把字節碼解釋成計算機能識別的二進制語言;
2.即時編譯器(just-in-time compliter),依賴於更多內存緩存解釋後的結果
3.自適應編譯器,緩存20%左右代碼,提高80%左右的速度;

Java設計語言:sun
Java API:

jvm:hotspot jvm
jre:Java 運行時環境(運行)
jdk:Java 開發環境(開發(編譯)+運行)

jvm:openjdk(開發+運行)

Java API類庫
第三方類庫

jdk=Java+API+jvm:用於實現Java程序開發的最小環境
jre=jvm+Java se API
java SE=JDK + 額外類庫,面向桌面級類庫
java EE=java SE+企業級類庫(servlet,jps,jmx)

Java應用領域的不同,java可分爲三類:
Java se:standard edtion,j2se標準版
Java ee:enterprise 企業版edition,j2ee
Java me:mobile edtion,j2me移動版,j2me

1995年,Java 1.0面世,James gosling,green project

applet:小程序
動態網站

CGI(common gateway interface):通用網關接口
CGI:協議

html:
mime,a.cgi

html
<html>
    <title></title>
    <body></body>
</html>

servlet(只是相當於增加了類似於http協議的CGI):CGI,html必須硬編碼在java代碼中,所以產生了jsp
JSP(是屬於servlet一個子類,嵌入到html網頁的一個類,主要用於動態的網頁開發):java server page
jasper:將存在着嵌入在html文檔的程序整的個兒轉換爲servlet

<%language="java">
SSH:structs spring hebernate

JSP----》serviet
Jasper

applet,servlet,jsp:用來開發運行在不用場景的應用程序

JSP:
.jsp--》.Java--》(jvm).class

jdk:javac(java的編譯器),.Java--》.class

CGI,servlet,.Java

web
servlet container:servlet容器(包含了jdk和監控jdk運行的容器)
web container:web容器(包含了servlet和jsp的以及連接器的容器)

jvm instance

jvm 運行時數據區域:
程序計數器
java虛擬機棧

線程私有內存區(運行時數據區域):
程序計數器
Java虛擬機棧(用來保存本地變量)

線程共享內存區:
方法區
堆:Java自動內存回收gc(garbage collector)

類:操作
對象:方法

溢出:

本地方法棧
java方法棧

垃圾回收算法:
1.標記+清除
2.複製
二分之一
3.標記整理算法

垃圾回收器:
serial
parnew
parallel scavenge
serial old
parallel old

CMS:concurrent mark sweep並行標記清除
    特點:併發收集、低停頓
    缺點:無法收集浮動垃圾,由於基於標記+清除算法會產生碎片

G1

溢出:

sun:
jre
jdk

open:
openjdk

jdk 1.6
jdk 1.7

安裝:
rpm
通用二進制格式: .bin
源碼

yum list all | grep java

./jdk-6u21-linux-i586-rpm.bin

cd /usr/local/java

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.6.0_21
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile.d/java.sh
java -version

jvm:java

java配置參數:
-xx:+<option>:開啓此參數指定的功能;
-xx:-<option>:關閉功能
-xx:<option>=<value>:給option指定的選項功能
java -xx:+printflagsfinal

-D<name>=<value>:set a system property

vim Test.java
public class Test{
public static void main(String[] args){
System.out.println("Hello Welcome to MageEdu Linux Learning Center!");
}
}

javac Test.java
java Test.class

類加載器:把程序(也叫一個類)加載到java環境中來運行
一個類的生命週期
loading(加載)
verification(驗證)
preparation(準備)
resolution(解析)
initialization(初始化)
using(使用)
unloading(卸載)

sun jdk監控和故障處理工具:
jps,jvm process status tool:顯示指定系統內所有的Hotspot虛擬機進程的列表信息
jstat,jvm statistics monitoring tool:收集並顯示Hotspot虛擬機各方面的運行數據
jinfo:顯示正在運行的某Hotspot虛擬機配置信息
jmap:生成某Hotspot虛擬機的內存存儲快照

可視化工具:
jconsole:java的監控與管理控制檯
jvisualvm:

servlet:CGI,java
硬編碼,html

jsp:<% %>,html
jasper, .jsp-->.java

將jsp編碼還要轉換成servlet編碼格式的才能使用

java ee apis:
eib
jmx
jta
javamail

java se apis:
jnai
jaxp

java ee application servers:
WebSphere
weblogic
oc4j
jboss
Jonas
geronimo
glassfish

risen

sun --》tws
RI:reference implimentation
參考實現

ASF:Apache software foundation
jserv

o'reilly(是一個出版社):tomcat
男貓

Tomcat:JDK+servlet,jps
java ee: 不完整實現

/web/htdocs/discuz
DocumentRoot

alias /phpwind
/web/bbs/phpwind

http://www.magedu.com/phpwind

安裝配置tomcat:
tar -zxvf apache-tomcat-7.0.42.tar.gz -C /usr/local/
cd /usr/local/
ln -sv apache-tomcat-7.0.42 tomcat
cd tomcat
bin/catalina.sh --help
vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH

catalina.sh version
catalina.sh configtest
catalina.sh start
ss tunlp
jps

Tomcat的配置文件:
server.xml
context.xml:爲部署於此tomcat實例上的所有web應用程序提供的默認配置文件,每個webapp都可以使用獨有的context.xml,通常放置於webapp目錄的META-INF子目錄中,常用於定義會話管理器,Realm以及JDBC等
web.xml:爲部署於此Tomcat實例上的所有web應用程序提供默認部署描述符:通常用於爲webapp提供基本的servlet定義和MIME映射表等
tomcat-users.xml:
catalina.policy:當基於security選項啓動tomcat實例時會讀取此配置文件;此文件是JAVA的安全策略配置文件,配置訪問codebase或某次java類的權限。
catalina.properties:java屬性定義文件,設定類加載器路徑、安全包列表和一些調整性能的參數信息
logging.properties:定義日誌相關的配置信息,如日誌級別、文件路徑等

webapp體系結構:
webapp有特定的組織格式,是一種層次性目錄結構,通常包含了servlet代碼文件、jsp頁面文件,類文件,部署描述符文件等等,一般會打包成歸檔格式。
/:web應用程序的根目錄
/WEB-INF:此webapp的私有資源目錄,通常web.xml和context.xml均放置於此目錄
/WEB-INF/classes:此webapp自有的類
/WEB-INF/lib:此webapp自有能夠被打包爲jar格式的類

webapp的歸檔格式:
EJB類歸檔的擴展名爲.jar
web應用程序的歸檔擴展名爲.war
資源適配器的擴展名.rar
企業級應用程序的擴展名.ear
web服務的擴展名爲.ear或.war

tomcat的配置層次:
vim server.xml
<server>
<service>
<connector />
<engine>
<host>
<context>
</context>
</host>
</engine>
</service>
</server>

Tomcat:
頂級組件(位於整個配置的頂層):server
容器組件(可以包含其他組件的組件):engine,host,context
連接器組件(連接用戶請求至tomcat):connector
http,ssl,ajp(apache jserv protocol)
被嵌套類(位於一個容器當中,不能包含其他組件):value,logger,realm

tomcat:server+service(決定哪種connector連接到哪個engine)+engine(相當於servlet container)+connector(連接server和engine)+host+context(上下文)

容器類組件:
engine:核心容器,catalina引擎,負責通過connector接收用戶請求
host:類似於httpd中的虛擬主機支持基於FQDN的虛擬主機
context:最內層的容器類組件,一個context代表一個web應用程序,配置context的主要目錄,指定對應的webapp的根目錄,還能爲webapps指定額外的屬性,如部署方式等

頂級組件:
server:表示一個運行於jvm中的tomcat實例

服務組件:
service:將連接器關聯至engine,因此一個service內部可以有多個connector,但只能有一個engine

嵌套類組件
realm(領域):可以用於任何容器類的組件中,關聯一個用戶認證庫,實現認證和授權
UserDatebaseRealm:使用JNDI自定義的用戶認證庫,tomcat-users.xml中
JDBCRealm:基於JDBC連接至數據庫中查找用戶
valve(閥門):攔截請求並在將其轉至對應的webapp之前進行某種處理操作,可用於任何容器中
access log value
remote address filter value:基於ip做訪問控制
logger:日誌記錄器,用於記錄組件內部的狀態信息;可用於除context之外的任何容器中

Tomcat 應用程序“部署”
部署是指將webapp及其所依賴類庫等裝載進tomcat實例上,一邊接受用戶請求
部署方式:
靜態方式:在tomcat啓動之前進行的webapp部署
動態方式:在不打斷tomcat運行的前提下,通過tomcat manager或其它的命令行工具進行部署
TCD:Tomcat Client Deployer

 部署由一類"操作"組成:
    Deploy:將webapp的源文件放置於目標目錄、配置tomcat服務器能夠基於某contcxt路徑訪問此webapp,並將其特有的類由類加載器進行裝載等
    Redeploy:重新部署,主要用於升級時
    Undeploy:取消部署,停止應用程序並從tomcat實例上移除其部分文件和部署名
    stop:停止
    start:將停止的webapp啓動起來

部署方式:
    tomcat manager
    ANT 腳本
    war類歸檔程序的部署:將歸檔文件複製到$CATALINA_BASE/webapps/目錄中,並重啓tomcat即可:tomcat會自動展開war歸檔
    manager進行熱部署

apache jserv protocal:二進制協議,使用httpd反向代理用戶請求至tomcat時,在httpd和tomcat之間使用

vim server.xml
<Connector port="80" ...>
<Connector port="8080" address="127.0.0.1" maxThread="1024" enableLookups="false" ...>
<Host name="www.a.com" appBase="/www/webapps" unpackWARS="true" autoDeploy="true">
<Context path="" docBase="ROOT" reloadable="true" />
<Context path="/test" docBase="testapp" reloadable="true" />
<Value className="org.apache.catalina.valves,AccessLogVale" directory="logs">
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r"%s %b"/>
</Host>

mkdir -pv /www/webapps/ROOT/
vim /www/webapps/ROOT/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title> JSP test page.</title>
</head>
<body>
<%out.println("Hello,world!");%>
</body>
</html>

mkdir /www/webapps/testapp
vim /www/webapps/testapp/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title> JSP test page.</title>
</head>
<body>
<%out.println("Hello,magedu!");%>
</body>
</html>

配置文件中path相當於在瀏覽器中輸入主機名後面是否要加定義的path目錄,這個目錄不需要存在,例如path=""表示要在瀏覽器中輸入http://www.chenjiao.com/ ,如果path="/test"表示要在瀏覽器中輸入http://www.chenjiao.com/test

catalina start

http://www.a.com
http://www.a.com/test

telnet localhost 8005
shutdown

配置用戶和密碼:
cd /usr/local/tomcat/conf
vim tomcat-users.xml
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui">
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/>
</tomcat-users>

tomcat自帶兩個管理類的app:
server status:
獲取狀態信息
部署應用程序
host manager:
管理虛擬主機

tomcat的部署方式:

ajp:Apache jserv protocol(Apache使用反向代理的協議)

tomcat的安裝
yum install jdk

tar -zxvf apache-tomcat-7.0.33.tar.gz -C /usr/local
cd tomcat

tomcat的主配置文件
cd conf

web.xml:一個默認的應用程序部署描述符
部署:將一個web應用程序所依賴的類裝載進jvm

連接器:
ajp
http(web服務器)
https
proxy
apr(Apache portable runtime):java可運行時環境

每一個連接器都需要java類來實現

vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin

catalinash version
version.sh
catalinash start

TI1:
http:80,ajp:8009

TI2;
http:80

多實例
MySQL:同一物理服務器
運行多個MySQL,3306

Apache代理服務器採用模塊有:
mod_proxy
mod_proxy_http
mod_proxy_ajp
mod_proxy_banlancer
mod_jk
mod_jk2

規劃:Apache+tomcat
用Apache當做代理服務器,tomcat當做後端的真實代理服務器

採用mod_proxy做代理服務器

Apache:192.168.10.7

yum install apr-util-devel apr-devel

tar -jxvf apr-1.4.6tar.bz2 apr-util-1.5.2tar.bz2

cd apr-1.4.6
./configure --prefix=/usr/local/apr --disable-ipv6
make && make install

cd apr-util
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

tar -zxvf httpd-2.4.2
cd httpd-2.4.2
./configure --prefix=/usr/local/apache --enable-proxy --enable-proxy-http --enable-prox
y-ajp
make && make install

代理一臺tomcat:

採用http協議
cd /etc/http/conf.d/
vim mode_proxy.conf
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
ProxyPass / http://192.168.10.6:8080/
ProxyPa***everse / http://192.168.10.6:8080/
<Location />
Order Allow,Deny
Allow from all
</Location>

採用ajp:
cd /etc/http/conf.d/
vim mode_proxy.conf
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
ProxyPass / ajp://192.168.10.6:8009/
ProxyPa***everse / ajp://192.168.10.6:8009/
<Location />
Order Allow,Deny
Allow from all
</Location>

代理多臺tomcat:
cd /etc/http/conf.d/
vim mode_proxy.conf
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
<Proxy balancer://lb>
BalancerMember http://192.168.10.6:8080 loadfactor=1 route=TomcatA
BalancerMember http://192.168.10.7:8080 loadfactor=1 route=TomcatB
</Proxy>

<Location /lbmanager>
SetHandler balancer-manager
</Location>

ProxyPass /lbmanager !(表示訪問lbmanager時不向後面代理)
ProxyPass / balancer://lb/ stickysession=JSESSIONID
ProxyPa***everse / balancer://lb/

<Location />
Order Allow,Deny
Allow from all
</Location>

TC1:192.168.10.6

./jdk-6u21-linux.i586-rpm.bin
tar -zxvf apache-tomcat-7.0.40.tar.gz -C /usr/local

vim /etc/profil.d/java.sh
export JAVA_HOME=/usr/java/jdk
export PATH=$PATH:/JAVA_HOME/bin

vim /etc/profil.d/tomcat.sh
export CATALINA=/usr/local/tomcat
export PATH=$PATH:/CATALINA/bin

vim /usr/local/tomcat/conf/server.xml
<Engine name="Catalina" defaultHost="locahost" jvmRoute=TomcatA>

cd /usr/local/tomcat/webapps/ROOT
vim index.jsp
內容見文檔

scp /etc/profile.d/java.sh tomcat.sh 192.168.10.9:/etc/profile.d

TC2:192.168.10.7

./jdk-6u21-linux.i586-rpm.bin
tar -zxvf apache-tomcat-7.0.040.tar.gz -C /usr/local

vim /usr/local/tomcat/conf/server.xml
<Engine name="Catalina" defaultHost="locahost" jvmRoute=TomcatB>

cd /usr/local/tomcat/webapps/ROOT/
vim index.jsp
內容見文檔

採用mod_jk做反向代理:

代理一臺tomcat:
yum install httpd-devel
tar -zxvf tomcat-connectors-1.2.37-src.tar.gz
cd tomcat-connectors-src
cd native
./configure --with-apxs=/usr/sbin/apxs
make && make install
cd /usr/lib64/httpd/modules
cd /etc/httpd/conf.d
mv mod_proxy.conf mod_proxy.conf_bak(把以前採用mod_proxy模塊進行的代理配置文件刪除掉)

vim mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorksFile /etc/httpd/conf.d/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* TomcatA
JkMount /status/ statA

vim workers.properties
worker.list=TomcatA,statA
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.10.6
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.stat1.type = status

service httpd restart

http://172.16.100.6/status

代理多臺tomcat:
vim mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel debug
JkMount /* lbcA
JkMount /status/ statA

vim workers.properties
worker.list=lbcA,statA
worker.TomcatA.port=8009
worker.TomcatA.host=192.168.10.6
worker.TomcatA.type=ajp13
worker.TomcatA.lbfactor=1
worker.TomcatB.type=ajp13
worker.TomcatB.port=8009
worker.TomcatB.host=192.168.10.7
worker.TomcatB.lbfactor=1
worker.lbcA.type=lb
worker.lbcA.sticky_session=0或者1
wooker.lbcA.balance_workers=TomcatA,TomcatB
worker.stat1.type = status

session複製:
tomcat支持session集羣
session服務器:
tomcat支持將會話保存了memcached

Cluster
LB
4層lb
lvs,haproxy(tcp)
7層lb
apache(mod_jk,mod_proxy):ajp
apache(mod_proxy),haproxy,nginx:http
HA
HP

Tomcat Cluster配置:
在tomcat1和tomcat2上面在配置文件server.xml中添加

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.50.10.1" bind="172.16.100.1"(在另一臺換成它的地址) port="45564"
frequency="500" dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="172.16.100.1"(在另一臺換成它的地址) port="4000" autoBind="100"
selectorTimeout="5000" maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter="..gif;..js;..jpg;..htm;..html;..txt;"/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/" watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

以上內容定義在Engine容器中,則表示對所有主機均啓動用集羣功能。如果定義在某Host中,則表示僅對此主機啓用集羣功能。

總結:構建DeltaManager集羣步驟:
1.在各節點的server.xml的engine或host容器添加如上內容:注意修改MemberShip組件中的多播地址address=“228.0.0.4”,建議修改Receiver中的address爲本機能夠傳遞心跳信息的地址;
2.在各節點爲使用組播地址添加組播路由,格式:route add -net $MCAST_ADDRESS netmask 255.255.255.255 dev eth0
3.在相應應用程序的web.xml(把web.xml拷到部署工程的目錄中的WEB-INF目錄下)中添加<distributable\>

各種學習網站
www.sourceforge.org
www.slideshare.net
www.wordpress.com
www.github.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章