一.tomcat的运行模式
1.tomcat的连接器有两种:HTTP和AJP,HTTP就不说了只说AJP
AJP(Apache JServ Protocol):AJP是面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用的通信信道。它主要有以下特征:
1) 在快速网络有着较好的性能表现,支持数据压缩传输;
2) 支持SSL,加密及客户端证书;
3) 支持Tomcat实例集群;
4) 支持在apache和tomcat之间的连接的重用;
而Tomcat Connector(连接器)有三种运行模式:bio nio apr;
bio(blocking I/O)即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。
nio(new I/O)是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行只需要在server.xml文件中将对应的
中protocol的属性值改为org.apache.coyote.http11.Http11NioProtocol即可;
apr(Apache Portable Runtime/Apache可移植运行时)是Apache HTTP服务器的支持库。你可以简单地理解为Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。
Tomcat apr的配置需要以下三个组件的支持:
APR library
JNI wrappers for APR used by Tomcat(libtcnative)[简单地说,就是自带的tomcat-native]
OpenSSL libraries
此外,与配置nio运行模式一样,也需要将对应Connector的protocol属性值改为org.apache.coyote.http11.Http11AprProtocol
2.nio的配置很简单,直接将对应的的protocol更改即可,下面只说APR的安装配置
在$CATALINA_HOME/bin下有一个tomcat-native.tar.gz,所以直接解压安装即可,解压后进入jni/native中,运行./configure,出现错误configure: error: APR could not be located. Please use the --with-apr option.这是因为APR和apr-util未安装(其实这时已经安装RPM的了是安装httpd的时候依赖,但是路径找不到),只得安装源码包了。
下载地址:
安装APR
解压apr-1.5.2.tar.gz并进入目录后执行
./configure
make
make install
apr 默认安装在 /usr/local/apr
安装apr-util
解压apr-util-1.5.4.tar.gz并进入目录后执行
./configure --with-apr=/usr/local/apr
make
make install
安装tomcat-native
[root@localhost native]# pwd
/etc/tomcat/bin/tomcat-native-1.1.33-src/jni/native
[root@localhost native]# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/latest
[root@localhost native]# make
[root@localhost native]# make install
设置apr的环境变量:
编辑/etc/profile文件,添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
使profile生效:
source /etc/profile
重启tomcat后查看catalina.out文件,如果有如下行则说明安装成功了
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
如果是如下行则说明没有安装成功:
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
3.编辑server.xml文件将中的protocol改为protocol="org.apache.coyote.http11.Http11AprProtocol",在重启tomcat后
二.tomcat的部署
1.目录结构
在tomcat中所有的应用都是放置在CATALINA_HOME/webapps下,其中CATALINA_HOME对应的是你的tomcat的根目录。
由于Servlet2.2之后的版本规范规定,tomcat中应用的目录结构都要满足固定的格式,这样便于规范一致性。
放置在webapps下的文件通常是两种格式:一种压缩好的项目文件,比如war包!一种是正常的文件夹。
如果是war包这种项目文件,tomcat会在启动后自动的把它解压缩到当前目录,变成可访问的文件夹。
目录结构如下:
/apps
|------/WEB-INF
|------/classes
|------/lib
------web.xml
|------/META-INF
------context.xml
------普通前端页面,jsp等等
classes文件夹下放置的是编译出的.class文件,比如你定义的某个包:com.test.hello.java 经过tomcat的启动发布后,就会在响应的应用下的classes文件夹下找到com/test/hello.class文件。类似的servlet, bean, 普通的java类都会编译到此处。
lib文件夹下放置的是项目应用的jar包。比如使用了SSH,在项目引用了jar包,最后都会放在这里。这个文件夹下的jar文件是不会编译到classes文件夹下的。详细信息参考tomcat的类加载机制。另外,这个文件夹下的jar包是属于应用自己使用的。tomcat根目录下还有一个lib文件夹,这里面存放着基本的servlet和jsp需要的jar包。
web.xml也叫部署描述符,用于配置web应用的相关信息;
context.xml文件常常用语配置一些运行时改变的参数,这样tomcat可以定期扫描该文件,进行相应的操作。因为其他的配置文件比如server.xml都是tomcat在启动时读取的信息,运行时是不能改变的,因此把一些动态的信息在这里设定就可以运行时期动态加载了。常用的就是配置数据源JNDI;
2.部署
部署就是把web应用开发时的文件拷贝到tomcat容器中,并对其进行编译等操作,使用户可以访问到该应用。
在tomcat中有多种部署方式:
静态部署:直接拷贝相应的web展开目录、或者war包。(展开目录的意思就是tomcat可以直接访问的应用目录,是未经过压缩的。相反的就是war包,是一种经过压缩的web应用文件)。
动态部署:通过tomcat管理器或者其他工具(如TCD,tomcat client deployer)执行部署。
2.1静态部署——在tomcat启动时部署
部署时,涉及到一个变量appBase。这个变量标识了一个目录,该目录存放着部署的web应用。一般默认情况下,appBase为CATALINA_HOME/webapps,配置信息位于server.xml中。
其中常用的几个选项:
appBase指定了部署的目录;
autoDeploy设置是否自动部署;
unpackWARs设置了部署的形式,如果为true,则会以展开的形式部署;如果为false,则会以war包的形式部署。
设置了以上的内容后,当启动tomcat时就会自动部署在appBase目录下的应用,并会按照下面的顺序进行部署:
(1)部署上下文描述符。
(2)部署展开的应用。如果部署目录中存在相应的war包,则检查是否比当前的应用更新;如果更新,则删除当前的应用,并解压该war包,得到最新的应用。
(3)部署war包。
2.2动态部署——在tomcat运行时部署
动态部署需要一个配置参数,就是上面提到的autoDeploy为true。当设置了该属性后,tomcat会在其运行时支持如下的操作:
(1)部署新拷贝到appBase下的war文件;
(2)部署拷贝到appBase下的展开的应用(未压缩的);
(3)当提供一个更新的war包时,重新部署应用。会先删除当前存在的应用,再进行解压部署;
(4)当/WEB-INF/web.xml被改写时,自动部署;
(5)当web应用的context.xml上下文描述符被更新时,自动部署;
(6)当CATALINA_HOME/conf下对应的应用的上下文描述符被更新时,自动部署;
(7)当对应的docBase文档被删除时,自动部署;
关于部署的官方文档:
参考文章:
http://www.cnblogs.com/xing901022/p/4463896.html
阅读(1086) | 评论(0) | 转发(0) |