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之間使用
<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
<%out.println("Hello,magedu!");%>
配置檔案中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類來實作
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
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
代理一台tomcat:
采用http協定
cd /etc/http/conf.d/
vim mode_proxy.conf
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
ProxyPass / http://192.168.10.6:8080/
ProxyPassReverse / http://192.168.10.6:8080/
<Location />
Order Allow,Deny
Allow from all
</Location>
采用ajp:
ProxyPass / ajp://192.168.10.6:8009/
ProxyPassReverse / ajp://192.168.10.6:8009/
代理多台tomcat:
<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
ProxyPass /lbmanager !(表示通路lbmanager時不向後面代理)
ProxyPass / balancer://lb/ stickysession=JSESSIONID
ProxyPassReverse / balancer://lb/
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
tar -zxvf apache-tomcat-7.0.040.tar.gz -C /usr/local
<Engine name="Catalina" defaultHost="locahost" jvmRoute=TomcatB>
cd /usr/local/tomcat/webapps/ROOT/
内容見文檔
采用mod_jk做反向代理:
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
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
JkWorkersFile /etc/httpd/conf.d/workers.properties
JkMount /* lbcA
worker.list=lbcA,statA
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
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>