[关闭]
@cdmonkey 2016-03-04T04:49:52.000000Z 字数 9375 阅读 1144

Tomcat(1)

JVM-Tomcat


一、简介

它是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。可以这样简单的认为,当在一台机器上配置好Apache后,可利用它响应静态页面(HTML)的访问请求。实际上“Tomcat”部分是Apache服务器的扩展,作为动态语言解释器,但它是独立运行的,所以当你运行它时,其实际上是作为一个与Apache独立的进程单独运行的。

基于以上原因,一个现实的网站使用一个Apache作为Web服务器,为网站的静态页面请求提供服务。并使用Tomcat服务器作为一个Servlet/JSP插件,显示网站的动态页面。如果想让服务器也能处理动态页面,那么就需要Tomcat。而当处理静态页面时,Tomcat不如Apache迅速、不象Apache一样可配置、也不象Apache一样强壮。

采用Apache+Tomcat这样的结构才具有更特出的优点,主要体现在具有更好的可扩展性和安全性。这种类型的站点的主要特点是每一个页面都可能是动态生成的,但这些数据中主要部分还是静态的(比如,各类图像GIF、JPG、PNG,流式媒体等),这种结构的优点是兼有可扩展性和安全性。

二、安装

1. 单实例

Install JDK

  1. [root@SITAPP ~]# cd tools/
  2. [root@SITAPP tools]# wget http://www.reucon.com/cdn/java/jdk-7u67-linux-x64.tar.gz
  3. [root@SITAPP tools]# tar -zxf jdk-7u67-linux-x64.tar.gz
  4. [root@SITAPP tools]# mv jdk1.7.0_67/ /usr/local/jdk1.7
  5. #接下来需要配置环境变量:
  6. [root@SITAPP tools]# cat <<EOF>> /etc/profile
  7. JAVA_HOME="/usr/local/jdk1.7"
  8. CLASSPATH="$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"
  9. PATH="$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin"
  10. EOF
  11. [root@SITAPP tools]# source /etc/profile
  12. #最后验证是否成功:
  13. [root@SITAPP tools]# java -version
  14. java version "1.7.0_67"
  15. Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
  16. Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
  17. #为什么还要JDK呢?因为JSP需要连接数据库的话,就要JDK来提供连接数据库的驱程。
  18. #而需要JDK的另一个原因是它是通过JAVA语言实现的。

Install Tomcat

Download:http://archive.apache.org/dist/tomcat/

  1. [root@SITAPP tools]# wget http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.47/bin/apache-tomcat-7.0.47.tar.gz
  2. [root@SITAPP tools]# tar -zxf apache-tomcat-7.0.47.tar.gz
  3. [root@SITAPP tools]# mv apache-tomcat-7.0.47/ /usr/local/tomcat
  4. #拷贝并配置启动脚本:
  5. [root@SITAPP tools]# cp -p /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat
  6. [root@SITAPP tools]# chmod +x /etc/init.d/tomcat
  7. [root@SITAPP tools]# vi /etc/init.d/tomcat
  8. #可以在第二行添加下面的内容:
  9. JAVA_HOME=/usr/local/jdk1.7
  10. CATALINA_HOME=/usr/local/tomcat
  11. -------------------
  12. #启动服务:
  13. [root@SITAPP tools]# /etc/init.d/tomcat start
  14. Using CATALINA_BASE: /usr/local/tomcat
  15. Using CATALINA_HOME: /usr/local/tomcat
  16. Using CATALINA_TMPDIR: /usr/local/tomcat/temp
  17. Using JRE_HOME: /usr/local/jdk1.7
  18. Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  19. #检查服务是否启动成功:
  20. [root@SITAPP tools]# ps -ef|grep tomcat
  21. #如果有进程的话,请在浏览器中输入http://IP:8080,你会看到相应的主界面。

启动服务,其启动脚本是其实就是安装目录下bin目录下的脚本文件:/usr/local/tomcat/bin/startup.sh

  1. #查看启动的进程和端口:
  2. [root@SITAPP tools]# ss -tulanp |grep java
  3. tcp LISTEN 0 0 127.0.0.1:8005 *:* users:(("java",5771,56))
  4. tcp LISTEN 0 0 *:8009 *:* users:(("java",5771,43))
  5. tcp LISTEN 0 0 *:8080 *:* users:(("java",5771,42))
  6. #其中8080为服务启动端口,8005为服务关闭端口,8009为管理端口。

检查版本:

  1. [root@Node-A1 ~]# /usr/local/tomcat/bin/version.sh
  2. # OR:
  3. [root@Node-A1 ~]# /usr/local/tomcat/bin/catalina.sh version
  4. #通常建议采用该方式来执行相关指令,包括检查版本,启动或停止应用程序。
  5. Using CATALINA_BASE: /usr/local/tomcat
  6. Using CATALINA_HOME: /usr/local/tomcat
  7. Using CATALINA_TMPDIR: /usr/local/tomcat/temp
  8. Using JRE_HOME: /usr/local/jdk1.8
  9. Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  10. Server version: Apache Tomcat/8.0.9
  11. Server built: Jun 19 2014 01:54:25
  12. Server number: 8.0.9.0
  13. OS Name: Linux
  14. OS Version: 2.6.32-504.el6.x86_64
  15. Architecture: amd64
  16. JVM Version: 1.8.0_25-b17
  17. JVM Vendor: Oracle Corporation

如何让普通用户也能够运行服务:

  1. [root@SITAPP ~]# chown app.app /etc/init.d/tomcat
  2. [root@SITAPP ~]# chown -R app.app /usr/local/tomcat
  3. ----------------------
  4. #去除其他用户对服务启停脚本的可执行权限:
  5. [root@SITAPP ~]# chmod 744 -R /usr/local/tomcat/bin/*

清空默认站点目录及清除管理账户文件:

  1. rm -rf tomcat/conf/tomcat-users.xml
  2. rm -rf tomcat/webapps/*

Webapps start

  1. # Webapps Start:
  2. [root@Node-A2 ~]# tomcat8/bin/catalina.sh start
  3. Using CATALINA_BASE: /root/tomcat8
  4. Using CATALINA_HOME: /root/tomcat8
  5. Using CATALINA_TMPDIR: /root/tomcat8/temp
  6. Using JRE_HOME: /root/jdk1.8.0_25
  7. Using CLASSPATH: /root/tomcat8/bin/bootstrap.jar:/root/tomcat8/bin/tomcat-juli.jar
  8. Tomcat started.
  9. # Webapps Stop:
  10. [root@Node-A2 ~]# tomcat8/bin/catalina.sh stop

Service Script

  1. [root@Node-A2 ~]# vim /etc/init.d/tomcat
  2. #!/bin/bash
  3. # Tomcat init script for Linux.
  4. #
  5. # chkconfig: 2345 96 14
  6. # description: The Apache Tomcat servlet/JSP container.
  7. JAVA_HOME=/root/jdk1.8.0_25
  8. CATALINA_HOME=/root/tomcat8
  9. export JAVA_HOME CATALINA_HOME
  10. # export CATALINA_OPTS="-Xms128m -Xmx256m"
  11. exec $CATALINA_HOME/bin/catalina.sh $*
  12. -------------
  13. [root@Node-A2 ~]# chmod +x /etc/init.d/tomcat
  14. [root@Node-A2 ~]# chkconfig --add tomcat
  15. [root@Node-A2 ~]# chkconfig --list tomcat
  16. tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  17. # Tomcat Start:
  18. [root@Node-A2 ~]# /etc/init.d/tomcat start
  19. # Tomcat Stop:
  20. [root@Node-A2 ~]# /etc/init.d/tomcat stop

http://blog.csdn.net/symgdwyh/article/details/5866747

  1. [root@Node-A2 ~]# vim tomcat8/bin/catalina.sh
  2. #增加如下内容:
  3. CATALINA_OPTS="$CATALINA_OPTS
  4. -Dcom.sun.management.jmxremote
  5. -Dcom.sun.management.jmxremote.port=12345
  6. -Dcom.sun.management.jmxremote.authenticate=false
  7. -Dcom.sun.management.jmxremote.ssl=false
  8. -Djava.rmi.server.hostname=172.16.1.22" #

2. 多实例(暂略)

二、目录结构

1. Site directory

  1. #进入默认的工作目录:
  2. [root@Node-A1 ~]# ll /usr/local/tomcat/webapps/
  3. total 20
  4. drwxr-xr-x 3 root root 4096 Jul 30 20:05 ROOT #默认的站点根目录,将代码放到该目录即可。
  5. drwxr-xr-x 14 root root 4096 Jul 30 20:05 docs #文档目录
  6. drwxr-xr-x 6 root root 4096 Jul 30 20:05 examples #模板目录
  7. drwxr-xr-x 5 root root 4096 Jul 30 20:05 host-manager
  8. drwxr-xr-x 5 root root 4096 Jul 30 20:05 manager #站点管理目录

注意:以上每个目录中都会包含一个WEB-INF,有时还会有一个META-INF,这类目录中存放的为对应的应用程序自身的私有的设置信息或资源。

2. Log directory

其日志信息分为两类:

  1. [root@Node-A1 ~]# ll /usr/local/tomcat/logs/
  2. total 56
  3. -rw-r--r-- 1 root root 22830 Aug 2 15:58 catalina.2015-08-02.log
  4. #基本日志,包括启动信息等系统日志。随着时间的推移,会出现许多带日期的历史日志。
  5. -rw-r--r-- 1 root root 23748 Aug 2 15:58 catalina.out
  6. #当前正在使用的catalina的基本日志,其内容与最新的带日期的日志相同。
  7. -rw-r--r-- 1 root root 0 Aug 2 15:57 host-manager.2015-08-02.log #与主机管理器相关的日志。
  8. -rw-r--r-- 1 root root 836 Aug 2 15:58 localhost.2015-08-02.log #默认主机的日志文件。
  9. -rw-r--r-- 1 root root 1860 Aug 2 16:08 localhost_access_log.2015-08-02.txt
  10. #默认主机的外部访问日志。
  11. -rw-r--r-- 1 root root 0 Aug 2 15:57 manager.2015-08-02.log

如果前端还有代理服务器,例如“Nginx”,那么这里也可以不记录访问日志,因为记录访问日志也会消耗系统资源。

3. Configuration File directory

  1. [root@Node-A2 conf]# ll
  2. total 208
  3. drwxr-xr-x 3 root root 4096 Nov 18 13:46 Catalina
  4. -rw------- 1 root root 12374 Sep 25 2014 catalina.policy #定义tomcat自身的安全策略。
  5. -rw------- 1 root root 6427 Sep 25 2014 catalina.properties #定义tomcat自身应用程序的属性。
  6. -rw------- 1 root root 1577 Sep 25 2014 context.xml #为上下文提供的配置文件。
  7. -rw------- 1 root root 3387 Sep 25 2014 logging.properties #和日志相关的配置内容。
  8. -rw------- 1 root root 6598 Nov 19 14:09 server.xml #核心配置文件。
  9. -rw------- 1 root root 1530 Sep 25 2014 tomcat-users.xml #安全域的用户角色配置文件。
  10. -rw------- 1 root root 163468 Sep 25 2014 web.xml #默认的应用程序部署描述符。

context.xml

  1. <!-- 可以在该设置文件中将上下文中共有的属性写入到这里:-->
  2. <?xml version='1.0' encoding='utf-8'?>
  3. <Context>
  4. <WatchedResource>WEB-INF/web.xml</WatchedResource>
  5. <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
  6. </Context>

需要说明的是其默认的测试页面是放在webapps/ROOT目录(该目录主要用于应用程序的部署,比如你可以把你发布的应用程序包,如“war”文件拷到该目录下,容器会自动部署)下面,这个其实是server.xml文件中配置的,如下所示:

关于配置文件的详细说明,请参见:配置文件详解。文件中各组件间的关系如下:

  1. <Server>
  2. <Service>
  3. <Connector />
  4. <Engin>
  5. <Host>
  6. <Context> </Context>
  7. </Host>
  8. </Engin>
  9. </Service>
  10. </Server>
  1. [root@Jenkins ~]# vim /usr/local/tomcat/conf/server.xml
  2. <?xml version='1.0' encoding='utf-8'?>
  3. <Server port="8005" shutdown="SHUTDOWN">
  4. <!--Server有一个管理接口,能够通过Telnet来进行访问。-->
  5. <!--Server元素代表整个容器,是配置文件的顶层元素。Tomcat监听shutdown命令端口,终止服务器的运行时,必须通过在Tomcat服务器所在的机器上发出shutdown命令,该属性是必须的。-->
  6. <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  7. <Listener className="org.apache.catalina.core.JasperListener" />
  8. <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <!--内存溢出监听器-->
  9. <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  10. <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  11. <!--Listener:监听器,一般用于系统的内部通信。这部分运维工程师基本用不到。-->
  12. <!--下面这部分是关于资源的配置:-->
  13. <GlobalNamingResources>
  14. <!--全局命名资源:-->
  15. <Resource name="UserDatabase" auth="Container"
  16. type="org.apache.catalina.UserDatabase"
  17. description="User database that can be updated and saved"
  18. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
  19. pathname="conf/tomcat-users.xml" /> <!--在该文件中配置管理用户账号。-->
  20. </GlobalNamingResources>
  21. <Service name="Catalina"> <!--引擎设定:这里使用的是Catalina,它是一个服务类引擎。-->
  22. <!--第一个<Service>处理所有直接由服务器接收的Web客户请求。-->
  23. <!--两种连接器的设定:HTTP & AJP-->
  24. <Connector port="8080" protocol="HTTP/1.1"
  25. connectionTimeout="20000"
  26. redirectPort="8443" />
  27. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  28. <Engine name="Catalina" defaultHost="localhost">
  29. <!--这里有一个安全问题:你要用哪个连接器就把另外不使用的连接器关闭。-->
  30. <!--每个<Service>元素只能有一个<Engine>元素,元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求。-->
  31. <Realm className="org.apache.catalina.realm.LockOutRealm">
  32. <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
  33. resourceName="UserDatabase"/>
  34. </Realm>
  35. <!--下面这部分是关于主机的配置,在这里也可以设定虚拟主机,但不推荐在一个实例中跑多个虚拟主机。-->
  36. <Host name="localhost" appBase="webapps"
  37. unpackWARs="true" autoDeploy="true"> <!--War包是否自动解压以及自动部署,即热部署,但是该功能并不稳定,有时会出现不工作的现象,所以建议关闭,而采用重启服务的方式进行。-->
  38. <!--<Engine>元素可以包含多个<Host>元素,每个<Host>的元素定义了一个虚拟主机。-->
  39. <!--下面这部分是有关日志的设定:-->
  40. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
  41. prefix="localhost_access_log." suffix=".txt"
  42. pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  43. </Host>
  44. </Engine>
  45. </Service>
  46. </Server>

注意:连接到Tomcat有两种方法:

管理员账号的设定:
http://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html

  1. #添加管理员账号,完成后需要重启服务:
  2. [root@Node-A1 tomcat]# vim conf/tomcat-users.xml
  3. ...
  4. <role rolename="manager-gui"/>
  5. <role rolename="admin-gui"/>
  6. <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui" />
  7. </tomcat-users>
  8. ----------------------
  9. ### Restart tomcat:
  10. [root@Node-A1 ~]# /usr/local/tomcat/bin/shutdown.sh
  11. [root@Node-A1 ~]# /usr/local/tomcat/bin/startup.sh

添加完管理员账号后就可以从首页登录进行管理了(点击首页右上角的三个按钮进行登录),如图所示:

此处输入图片的描述

注意:该功能在开发及测试场景中可以使用,但是在生产环境中绝对不要使用。

4. Lib directory

所依赖的类库存放于该目录。

  1. [root@Node-A2 ~]# ls tomcat8/lib/

5. Work directory

该目录下,每一个引擎以及每一个虚拟主机以及每一个应用程序都有属于自己的目录。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注