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
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:+
-D
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
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
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r"%s %b"/>
mkdir -pv /www/webapps/ROOT/
vim /www/webapps/ROOT/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%out.println("Hello,world!");%>
mkdir /www/webapps/testapp
vim /www/webapps/testapp/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<%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自带两个管理类的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/
Order Allow,Deny
Allow from all
采用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/
Order Allow,Deny
Allow from all
代理多台tomcat:
cd /etc/http/conf.d/
vim mode_proxy.conf
ProxyVia on
ProxyRequests off
ProxyPreserveHost on
BalancerMember http://192.168.10.6:8080 loadfactor=1 route=TomcatA
BalancerMember http://192.168.10.7:8080 loadfactor=1 route=TomcatB
SetHandler balancer-manager
ProxyPass /lbmanager !(表示访问lbmanager时不向后面代理)
ProxyPass / balancer://lb/ stickysession=JSESSIONID
ProxyPa***everse / balancer://lb/
Order Allow,Deny
Allow from all
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
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
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中添加
notifyListenersOnReplication="true"/>
frequency="500" dropTime="3000"/>
selectorTimeout="5000" maxThreads="6"/>
watchDir="/tmp/war-listen/" watchEnabled="false"/>
以上内容定义在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目录下)中添加
各种学习网站
www.sourceforge.org
www.slideshare.net
www.wordpress.com
www.github.com