天天看點

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之間使用

<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>

上一篇: DNS
下一篇: haproxy