您的位置:首页 > 运维架构 > Tomcat

Tomcat的安装和配置文件详解(一)

2017-01-02 16:05 429 查看
下载安装JDK(Tomcat在启动前必须安装JDK及Java的运行与开发环境,因为Tomcat本身就是有Java编写的,JDK中有Java的API,JVM等Java运行和开发的最小环境)
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
[root@node1 tool]# tar -zxf jdk-8u111-linux-x64.tar.gz -C /usr/local/java/
输出相关的环境变量
[root@node1 jdk1.8.0_111]# vim /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_111
export JRE_HOME=/usr/local/java/jdk1.8.0_111/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
source(读)以下这个文件
[root@node1 java]# source /etc/profile
可以看到JDK1.8已经安装
[root@node1 java]# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

下载安装Tomcat
http://tomcat.apache.org/download-90.cgi

[root@node1 tool]# tar -zxf apache-tomcat-7.0.73.tar.gz -C /usr/local/
[root@node1 tool]# cd /usr/local/
drwxr-xr-x. 2 mysql mysql 4096 Sep 23 2011 src
[root@node1 local]# ln -sv apache-tomcat-7.0.73/ tomcat
[root@node1 local]# cd tomcat/
root@node1 tomcat]# ls bin/
bootstrap.jar commons-daemon-native.tar.gz digest.sh startup.battool-wrapper.s catalina.bat configtest.bat setclasspath.bat startup.sh version.bat
catalina.sh configtest.sh setclasspath.sh tomcat-juli.jar version.sh

#里面全部是一些.sh的脚本和.jar的Java归档文件;Tomcat就是 用Java写的所以启动时会调用一些Java库,.bat为Windows的批处理脚本,用于windows启动时调用,其中catalina.sh为核心脚本
[root@node1 tomcat]# ls conf
Catalina catalina.properties logging.properties tomcat-users.xml
catalina.policy context.xml server.xml web.xml
#其中server.xml为主配置文件;
#tomcat-users.xml为用户认证文件,Tomcat启动后会将这个文件读进内存中完成账号和密码的检测认证,所以这个文件的安全性很重要;#web.xml为Tomcat默认的应用程序部署描述符,一个web应用程序所谓的部署就是将它放在Tomcat某一个context某一个host能够访问到的路 径下,及将web应用程序所依赖的类装载进JVM的过程;
#context.html默认为上下文提供的配置文件
#catalina.pro[erties 用来定义应用程序自身属性的(启动JVM要定义许多属性),如所使用的内存大小,所使用的字符串缓冲池的大小,你的server loader加载器是什么,等等
#Catalina.policy用来定义Tomcat自身的安全和资源授权策略,如定义通过互联网访问时,哪些资源用户可以访问哪些资源用户不能访问;哪些资源能被装载,哪些资源不能被装载等等
#logging.pro[erties 用来定义你的日志级别,日志文件的路径等等

一般来说如果你不定义服务器自身的属性的话,只需修改.xml的文件

[root@node1 conf]# vim server.xml
<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">
#在Telnet的8005端口发一个shutdown就可以把Tomcat停掉,建议关掉(危险)

Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

#listener为一大堆的侦听器,是程序员或者应用程序在调试时关闭或者启动某个容器时用的组件
<GlobalNamingResources>

<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

#全局命名资源,这里定义了一个全局命名资源,用来实现用户的认证

<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">

#service 定义服务,这里定义的第一个服务就是Catalina,这个服务中定义了一个连接器,其端口为8080,所以他可以从8080端口接受用户的请求,其协议为HTTP/1.1

#而Catalina服务中的另一个连接器的端口为8009,所以也可以从8009端口接受用户的请求,但其协议为AJP/1.3(这是一种以二进制格式从前端Apache传输用户请求至8009端口的协议,比用http协议效率要高)

<Engine name="Catalina" defaultHost="localhost">
#定义了一个叫做Catalina的引擎,其默认主机为本机

<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
#定义了一个Realm(领域)用于用户的认证和授权,但默认为允许所有用户访问

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
#定义了有个Value(阀门),用来记录客户端请求、客户端IP地址和服务器等信息,说明日志放在logs目录下(安装目录),其中每个日志都以localhost_access_log.开头中间为日期,以.txt结尾,pattern定义了日志的格式
</Host>
</Engine>
</Service>
</Server>

输出环境变量,明确说明Catalina在什么位置(即Tomcat实例运行所在的目录),用来定义你的Catalina工作的路径。需要注意的是在同一个物理服务器上可以同时启用多个Tomcat实例(但需要使用不同的端口)
[root@node1 tomcat]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
source(读)一下这个文件
[root@node1 tomcat]# . /etc/profile.d/tomcat.sh

测试一下,为Catalina传递一个参数version,其实就是执行了/usr/locar/tomcat/bin/version.sh脚本
[root@node1 tomcat]# 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/local/java/jdk1.8.0_111/jre #你安装的jre目录(jdk装后生成的)
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.73
Server built: Nov 7 2016 21:27:23 UTC
Server number: 7.0.73.0
OS Name: Linux
OS Version: 2.6.32-573.el6.x86_64 #Linux内核版本
Architecture: amd64
JVM Version: 1.8.0_111-b14 #JVM的版本
JVM Vendor: Oracle Corporation

启动Tomcat
[root@node1 tomcat]# catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_111/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@node1 tomcat]# jps
2118 Jps
1927 Bootstrap

其中8080端口为http,8009为ajp
[root@node1 ~]# netstat -tnlp |grep java
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 1927/java
tcp 0 0 :::8009 :::* LISTEN 1927/java
tcp 0 0 :::8080 :::* LISTEN 1927/java

tomcat的库文件,有一大堆的jar文件。如jasper.jar、servlet-api.jar、jsp-api.jar等。是Tomcat实现许多重要功能必须依赖的类库

[root@node1 tomcat]# ls lib/
annotations-api.jar ecj-4.4.2.jar servlet-api.jar tomcat-i18n-es.jar
catalina-ant.jar el-api.jar tomcat7-websocket.jar tomcat-i18n-fr.jar
catalina-ha.jar jasper-el.jar tomcat-api.jar tomcat-i18n-ja.jar
catalina.jar jasper.jar tomcat-coyote.jar tomcat-jdbc.jar
catalina-tribes.jar jsp-api.jar tomcat-dbcp.jar tomcat-util.jar

[root@node1 tomcat]# ll logs/
1 23:32 catalina.2017-01-01.log
2 11:16 catalina.out #启动时Catalina自己输出的日志
1 23:25 host-manager.2017-01-01.log #主机管理日志
1 23:32 localhost.2017-01-01.log #主机的日志文件
1 23:25 localhost_access_log.2017-01-01.txt #主机的访问日志文件
2 11:15 localhost_access_log.2017-01-02.txt #一般日志每天滚动一次
1 23:25 manager.2017-01-01.log

[root@node1 tomcat]# ll

1 23:23 temp #临时文件的目录
2 11:54 webapps #应用程序目录如:docs、examples、ROOT等
1 23:25 work #工作目录,在这个目录下每一个Engine都有自己的独立目录;而在Engine下, #每一个Host也有自己的独立目录,而在Host下每一个应用程序也有自己的独立 #目录

[root@node1 tomcat]# ls work/
Catalina #Engine
[root@node1 tomcat]# ls work/Catalina/
localhost #Host
[root@node1 tomcat]# ls work/Catalina/localhost/
_ docs examples host-manager manager #应用程序

[root@node1 tomcat]# cd work/Catalina/localhost/
[root@node1 localhost]# cd _
[root@node1 _]# ll #可以看到什么都没有
total 0
浏览器访问一下192.168.139.2:8080
对应/usr/local/apache-tomcat-7.0.73/webapps/ROOT/目录下的应用程序,如图



[root@node1 _]# ll
total 4
drwxr-xr-x. 3 root root 4096 Jan 2 13:29 org
#多了一个org文件。。可以看到你访问了一个应用程序后,会将index.jsp在这里转换为index_jsp.java再转换为index_jsp.class。所以第一个用户访问JSP资源时会很慢,但第二个用户来访问相同资源时(只要资源未修改),会直接使用编译好的.class,所以第二个用户访问会比第一个快的多,这也是JSP编译的页面访问快的原因,只要你的资源未修改JSP就是快
[root@node1 _]# ls org/apache/jsp/
index_jsp.class index_jsp.java

#可以看到有一堆的静态页面(.png图片)只有主页index.jsp为动态的

[root@node1 tomcat]# ls webapps/ROOT/
asf-logo.png bg-middle.png bg-upper.png index.jsp tomcat.gif tomcat.svg
asf-logo-wide.gif bg-nav-item.png build.xml RELEASE-NOTES.txt tomcat.png
bg-button.png bg-nav.png favicon.ico tomcat.css
WEB-INF

注:需要注意的是每个应用程序都有 WEB-INF路径,有时还有META-INF文件,这两个路径下用来放私有资源,是用户通过Web访问URL不能访问到的,除了这两个路径下的资源都可以用web访问URL访问到

为Tomcat提供init脚本

[root@node1 java]# vim /etc/rc.d/init.d/tomcat

#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
export JAVA_OPTS='-Xms64m -Xmx128m' #定义启动时堆内存最小64M,最大128M
JAVA_HOME=/usr/local/java/jdk1.8.0_111 #Java的路径
CATALINA_HOME=/usr/local/apache-tomcat-7.0.73 #Tomcat的路径
export JAVA_HOME CATALINA_HOME #将Java和tomcat的路径输出为环境变量
exec $CATALINA_HOME/bin/catalina.sh $* #执行这个脚本

[root@node1 java]# chkconfig --add tomcat #加执行权限
[root@node1 java]# chkconfig --list tomcat #加入系统服务列表
tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@node1 java]# service tomcat stop
Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.73
Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.73
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.73/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_111
Using CLASSPATH: /usr/local/apache-tomcat-7.0.73/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.73/bin/tomcat-juli.jar
[root@node1 java]# service tomcat start
Using CATALINA_BASE: /usr/local/apache-tomcat-7.0.73
Using CATALINA_HOME: /usr/local/apache-tomcat-7.0.73
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.73/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_111
Using CLASSPATH: /usr/local/apache-tomcat-7.0.73/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.73/bin/tomcat-juli.jar
Tomcat started.

注:这个脚本不支持restart,但还支持以下许多参数(就是执行了catalina.sh脚本)
[root@node1 java]# service tomcat -help
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running?

在下一篇博客中将详细介绍Tomcat的核心配置文件server.xml中各个组件的配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安装 配置 Tomcat