Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。通过适当的配置,Apache 为HTML页面服务,Tomcat运行JSP 页面和Servlet,从而实现web服务器与应用服务的分离。本文主要描述了在Linux 6下安装Tomcat 8。
1、本文环境介绍:
os版本:centos6.5 64bit
jdk版本:1.7.0_80
tomcat版本:8.0.29
apache版本:2.4.9
apache服务器IP:192.168.21.10/24
所有安装文件可到apache以及oracle官网下载
2、安装java jdk
# cd /usr/local/src
# chmod u+x jdk-7u80-linux-x64.rpm
# rpm -Uvh jdk-7u80-linux-x64.rpm
# java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
# vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
# source /etc/profile.d/java.sh
# env|grep JAVA
JAVA_HOME=/usr/java/latest
# ls -hltr /usr/java/
total 4.0K
drwxr-xr-x. 8 root root 4.0K Nov 30 16:56 jdk1.7.0_80
lrwxrwxrwx. 1 root root 21 Nov 30 16:56 latest -> /usr/java/jdk1.7.0_80
lrwxrwxrwx. 1 root root 16 Nov 30 16:56 default -> /usr/java/latest
3、安装及测试tomcat
# tar -xvf apache-tomcat-8.0.29.tar.gz -C /usr/local
# ln -sv /usr/local/apache-tomcat-8.0.29 /usr/local/tomcat
`/usr/local/tomcat' -> `/usr/local/apache-tomcat-8.0.29'
# vi /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
# source /etc/profile.d/tomcat.sh
# $CATALINA_HOME/bin/startup.sh ###也可以使用catalina.sh脚本启动
Using CATALINA_BASE: /usr/local/tomcat --Auhtor : Leshami
Using CATALINA_HOME: /usr/local/tomcat --Blog : http://blog.csdn.net/leshami
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
# netstat -nltp|grep 80 ###tomcat缺省端口为8080,ajp为8089,shutdown端口为8005
tcp 0 0 :::8080 :::* LISTEN 2150/java
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 2150/java
tcp 0 0 :::8009 :::* LISTEN 2150/java
# catalina.sh version
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.29
Server built: Nov 20 2015 09:18:00 UTC
Server number: 8.0.29.0
OS Name: Linux
OS Version: 2.6.32-431.el6.x86_64
Architecture: amd64
JVM Version: 1.7.0_80-b15
JVM Vendor: Oracle Corporation
# curl http://localhost:8080/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/8.0.29</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
...........
# catalina.sh stop
4、配置tomcat为系统服务
# vi /etc/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
exec $CATALINA_HOME/bin/catalina.sh $*
# service tomcat start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
# service tomcat stop
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/latest
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
# chkconfig --add tomcat
# chkconfig tomcat on
5、tomcat相关配置文件
server.xml:
核心配置文件
context.xml:
每个webapp都有其配置文件,这些配置文件通常位于webapp应用程序目录下的WEB-INF目录中,
用于定义会话管理器、JDBC;此配置文件用于为所有的webapp提供默认配置;
web.xml:
每个webapp部署之后才能被访问; 此文件则用于为所有webapp提供默认部署方式的配置;
tomcat-users.xml:
用户认证账号配置文件;
catalina.policy:
当使用-security启动tomcat实例时会读取此配置文件来其安全运行策略;
catalina.properties:
Java属性的定义文件,用于设定类加载器路径,以及一些JVM性能调整的相关参数;
logging.properties:
日志相关的配置信息;
6、tomcat架构图
tomcat组件由java类实现;有些组件的实现方式不止一种;有些组件还要嵌套别的组件;
每个组件在通过指定的类型实现时需要传递一些属性;
顶级类组件:server(代表一个tomcat实例);位于配置层次的顶级,并且彼此间有着严格的对应关系;
服务类组件:service (将连接器关联至内部的engine)
容器类组件:engine (代表一个web container),host,context
连接器组件:connector http, https, ajp(apache jserv procotol)连接客户端(可以是浏览器或Web服务器)请求至Servlet容器
被嵌套类组件:valve, logger, realm, ...位于一个容器当中,但不能包含其它组件;
主配置文件按以下结构组成:
<Server>
<Service>
<Connector />
...
<Engine>
<Host>
<Context> </Context>
...
</Host>
...
</Engine>
</Service>
...
</server>
context定义示例:
<Host name="www.ycdata.net" appBase="/website"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="webapps" reloadable="true" />
</Host>
7、各常见组件描述:
服务器(server):
Tomcat的一个实例,这是一个顶级组件,通常一个JVM只能包含一个Tomcat实例;
一台物理服务器上可以在启动多个JVM的情况下在每一个JVM中启动一个Tomcat实例,每个实例分属于一个独立的管理端口。
服务(service):
一个服务组件通常包含一个引擎和与此引擎相关联的一个或多个连接器;
给服务命名可以方便管理员在日志文件中识别不同服务产生的日志;
一个server可以包含多个service组件,但通常情下只为一个service指派一个server。
连接器(connectors):
连接器类组件,负责连接客户端(可以是浏览器或Web服务器)请求至Servlet容器内的Web应用程序;
通常指的是接收客户发来请求的位置及服务器端分配的端口;
默认端口通常是HTTP协议的8080,管理员也可以根据自己的需要改变此端口;
一个引擎可以配置多个连接器,但这些连接器必须使用不同的端口。默认的连接器是基于HTTP/1.1的Coyote。
同时,Tomcat也支持AJP、JServ和JK2连接器。
引擎(Engine):
容器类组件,引擎通是指处理请求的Servlet引擎组件,即Catalina Servlet引擎; 它检查每一个请求的HTTP首部信息以辨别此请求应该发往哪个host或context,并将请求处理后的结果返回的相应的客户端。
严格意义上来说,容器不必非得通过引擎来实现,它也可以是只是一个容器。
如果Tomcat被配置成为独立服务器,默认引擎就是已经定义好的引擎。
而如果Tomcat被配置为Apache Web服务器的提供Servlet功能的后端,默认引擎将被忽略,因为Web服务器自身就能确定将用户请求发往何处。
一个引擎可以包含多个host组件。
主机(Host):
主机组件类似于Apache中的虚拟主机,但在Tomcat中只支持基于FQDN的“虚拟主机”。一个引擎至少要包含一个主机组件。
上下文(Context):
Context组件是最内层次的组件,它表示Web应用程序本身。
配置一个Context最主要的是指定Web应用程序的根目录,以便Servlet容器能够将用户请求发往正确的位置。
Context组件也可包含自定义的错误页,以实现在用户访问发生错误时提供友好的提示信息。
被嵌套类(nested)组件:
这类组件通常包含于容器类组件中以提供具有管理功能的服务,它们不能包含其它组件,但有些却可以由不同层次的容器各自配置。
阀门(Valve):
用来拦截请求并在将其转至目标之前进行某种处理操作,类似于Servlet规范中定义的过滤器。
Valve可以定义在任何容器类的组件中。Valve常被用来记录客户端请求、客户端IP地址和服务器等信息,
这种处理技术通常被称作请求转储(requestdumping)。
请求转储valve记录请求客户端请求数据包中的HTTP首部信息和cookie信息文件中,
响应转储valve则记录响应数据包首部信息和cookie信息至文件中。
日志记录器(Logger):
用于记录组件内部的状态信息,可被用于除Context之外的任何容器中。
日志记录的功能可被继承,因此,一个引擎级别的Logger将会记录引擎内部所有组件相关的信息,除非某内部组件定义了自己的Logger组件。
领域(Realm):
用于用户的认证和授权;在配置一个应用程序时,管理员可以为每个资源或资源组定义角色及权限,而这些访问控制功能的生效需要通过Realm来实现。
Realm的认证可以基于文本文件、数据库表、LDAP服务等来实现。
Realm的效用会遍及整个引擎或顶级容器,因此,一个容器内的所有应用程序将共享用户资源。
同时,Realm可以被其所在组件的子组件继承,也可以被子组件中定义的Realm所覆盖。
8、Tomcat目录结构
* bin - Only the following files:
* setenv.sh (*nix) or setenv.bat (Windows),
* tomcat-juli.jar
The setenv scripts were described above. The tomcat-juli library
is documented in the Logging chapter in the User Guide.
* conf - Server configuration files (including server.xml)
* lib - Libraries and classes, as explained below
* logs - Log and output files
* webapps - Automatically loaded web applications
* work - Temporary working directories for web applications
* temp - Directory used by the JVM for temporary files (java.io.tmpdir)