千家信息网

JAVA企业级应用TOMCAT实战

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,JAVA企业级应用TOMCAT实战1. Tomcat简介Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apach
千家信息网最后更新 2026年10月31日JAVA企业级应用TOMCAT实战

JAVA企业级应用TOMCAT实战

1. Tomcat简介

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。

Tomcat和Nginx、Apache(httpd)、lighttpd等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Nginx/Apache服务器。

对比php软件,区别?

目前Tomcat最新版本为9.0。Java容器还有resin、weblogic等。

2. Tomcat安装

2.1 软件准备

JDK下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tomcat下载:http://tomcat.apache.org/

因为jdk和Tomcat的版本对运维来说没什么区别,提供本文使用的软件下载地址:http://pan.baidu.com/s/1IpioA

2.2 部署java环境

[root@tomcat ~]# cd /application/tools/

[root@tomcat tools]# rz

rz waiting to receive.

Starting zmodem transfer. Press Ctrl+C to cancel.

Transferring apache-tomcat-8.0.27.tar.gz...

100% 8914 KB 8914 KB/sec 00:00:01 0 Errors

Transferring jdk-8u60-linux-x64.tar.gz...

100% 176990 KB 14749 KB/sec 00:00:12 0 Errors

tar xf jdk-8u60-linux-x64.tar.gz -C /application/

ln -s /application/jdk1.8.0_60 /application/jdk

sed -i.ori '$a export JAVA_HOME=/application/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile

source /etc/profile

#→出现下面结果证明部署成功

[root@tomcat ~]# java -version

java version "1.8.0_60"

Java(TM) SE Runtime Environment (build 1.8.0_60-b27)

Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

上面有一个sed命令的特殊用法,欲知详情→http://edu.51cto.com/course/course_id-5266.html

2.3 安装Tomcat

tar xf apache-tomcat-8.0.27.tar.gz -C /application/

ln -s /application/apache-tomcat-8.0.27 /application/tomcat

echo 'export TOMCAT_HOME=/application/tomcat'>>/etc/profile

source /etc/profile

chown -R root.root /application/jdk/ /application/tomcat/

[root@tomcat ~]# tail -4 /etc/profile

export JAVA_HOME=/application/jdk

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

export TOMCAT_HOME=/application/tomcat

2.4 Tomcat目录介绍

[root@tomcat ~]# cd /application/tomcat/

[root@tomcat tomcat]# tree -L 1

.

├── bin #→用以启动、关闭Tomcat或者其它功能的脚本(.bat文件和.sh文件)

├── conf #→用以配置Tomcat的XML及DTD文件

├── lib #→存放web应用能访问的JAR包

├── LICENSE

├── logs #→Catalina和其它Web应用程序的日志文件

├── NOTICE

├── RELEASE-NOTES

├── RUNNING.txt

├── temp #→临时文件

├── webapps #→Web应用程序根目录

└── work #→用以产生有JSP编译出的Servlet的.java和.class文件

7 directories, 4 files

[root@tomcat tomcat]# cd webapps/

[root@tomcat webapps]# ll

total 20

drwxr-xr-x 14 root root 4096 Oct 5 12:09 docs #→tomcat帮助文档

drwxr-xr-x 6 root root 4096 Oct 5 12:09 examples #→web应用实例

drwxr-xr-x 5 root root 4096 Oct 5 12:09 host-manager #→管理

drwxr-xr-x 5 root root 4096 Oct 5 12:09 manager #→管理

drwxr-xr-x 3 root root 4096 Oct 5 12:09 ROOT #→默认网站根目录

2.5 启动Tomcat

#→启动程序/application/tomcat/bin/startup.sh

#→关闭程序/application/tomcat/bin/shutdown.sh

[root@tomcat ~]# /application/tomcat/bin/startup.sh

Using CATALINA_BASE: /application/tomcat

Using CATALINA_HOME: /application/tomcat

Using CATALINA_TMPDIR: /application/tomcat/temp

Using JRE_HOME: /application/jdk

Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

Tomcat started.

[root@tomcat ~]# netstat -tunlp|grep java

tcp 0 0 :::8009 :::* LISTEN 4743/java

tcp 0 0 :::8080 :::* LISTEN 4743/java

[root@tomcat ~]# ps -ef|grep [j]ava

root 4743 1 17 06:10 pts/0 00:00:03 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat/endorsed -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start

2.6 访问网站

网址:http://10.0.0.3:8080/

2.7 Tomcat日志

[root@tomcat ~]# cd /application/tomcat/logs/

[root@tomcat logs]# ls

catalina.2016-01-26.log localhost.2016-01-26.log

catalina.out localhost_access_log.2016-01-26.txt

host-manager.2016-01-26.log manager.2016-01-26.log

#→tomcat实时日志

[root@tomcat logs]# tailf catalina.out

26-Jan-2016 06:10:24.006 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /application/apache-tomcat-8.0.27/webapps/examples has finished in 666 ms

10. 26-Jan-2016 06:10:24.007 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /application/apache-tomcat-8.0.27/webapps/docs

11. 26-Jan-2016 06:10:24.054 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /application/apache-tomcat-8.0.27/webapps/docs has finished in 47 ms

12. 26-Jan-2016 06:10:24.055 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /application/apache-tomcat-8.0.27/webapps/manager

13. 26-Jan-2016 06:10:24.134 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /application/apache-tomcat-8.0.27/webapps/manager has finished in 80 ms

14. 26-Jan-2016 06:10:24.139 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /application/apache-tomcat-8.0.27/webapps/host-manager

15. 26-Jan-2016 06:10:24.188 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /application/apache-tomcat-8.0.27/webapps/host-manager has finished in 50 ms

16. 26-Jan-2016 06:10:24.195 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]

17. 26-Jan-2016 06:10:24.206 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]

18. 26-Jan-2016 06:10:24.211 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1560 ms

3. Tomcat配置文件

3.1 Tomcat配置文件

[root@tomcat conf]# pwd

/application/tomcat/conf

[root@tomcat conf]# ll -h

total 216K

drwxr-xr-x 3 root root 4.0K Jan 26 06:10 Catalina

-rw------- 1 root root 13K Sep 28 16:19 catalina.policy

-rw------- 1 root root 7.0K Sep 28 16:19 catalina.properties

-rw------- 1 root root 1.6K Sep 28 16:19 context.xml

-rw------- 1 root root 3.4K Sep 28 16:19 logging.properties

-rw------- 1 root root 6.4K Sep 28 16:19 server.xml #→主配置文件

-rw------- 1 root root 1.8K Sep 28 16:19 tomcat-users.xml #→Tomcat管理用户配置文件

-rw------- 1 root root 1.9K Sep 28 16:19 tomcat-users.xsd

-rw------- 1 root root 164K Sep 28 16:19 web.xml

3.2 Tomcat管理

测试功能,生产环境不要用。

Tomcat管理功能用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。在默认情况下是处于禁用状态的。如果需要开启这个功能,就需要配置管理用户,即配置前面说过的tomcat-users.xml。

[root@tomcat ~]# vim /application/tomcat/conf/tomcat-users.xml

…………

#→在此行前加入上面三行

[root@tomcat ~]# /application/tomcat/bin/shutdown.sh

[root@tomcat ~]# /application/tomcat/bin/startup.sh

3.3 Tomcat主配置文件Server.xml详解

3.3.1 server.xml组件类别

· 顶级组件:位于整个配置的顶层,如server。

· 容器类组件:可以包含其它组件的组件,如service、engine、host、context。

· 连接器组件:连接用户请求至tomcat,如connector。

· 被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve、logger。

3.3.2 组件详解

· engine:核心容器组件,catalina引擎,负责通过connector接收用户请求,并处理请求,将请求转至对应的虚拟主机host。

· host:类似于httpd中的虚拟主机,一般而言支持基于FQDN的虚拟主机。

· context:定义一个应用程序,是一个最内层的容器类组件(不能再嵌套)。配置context的主要目的指定对应对的webapp的根目录,类似于httpd的alias,其还能为webapp指定额外的属性,如部署方式等。

· connector:接收用户请求,类似于httpd的listen配置监听端口的。

· service(服务):将connector关联至engine,因此一个service内部可以有多个connector,但只能有一个引擎engine。service内部有两个connector,一个engine。因此,一般情况下一个server内部只有一个service,一个service内部只有一个engine,但一个service内部可以有多个connector。

· server:表示一个运行于JVM中的tomcat实例。

· Valve:阀门,拦截请求并在将其转至对应的webapp前进行某种处理操作,可以用于任何容器中,比如记录日志(access log valve)、基于IP做访问控制(remote address filter valve)。

· logger:日志记录器,用于记录组件内部的状态信息,可以用于除context外的任何容器中。

· realm:可以用于任意容器类的组件中,关联一个用户认证库,实现认证和授权。可以关联的认证库有两种:UserDatabaseRealm、MemoryRealm和JDBCRealm。

· UserDatabaseRealm:使用JNDI自定义的用户认证库。

· MemoryRealm:认证信息定义在tomcat-users.xml中。

· JDBCRealm:认证信息定义在数据库中,并通过JDBC连接至数据库中查找认证用户。

3.3.3 配置文件注释

1.

2.

7.

8.

9.

10.

11.

12.

13.

14.

15. type="org.apache.catalina.UserDatabase"

16. description="User database that can be updated and saved"

17. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

18. pathname="conf/tomcat-users.xml" />

19.

20.

21.

22.

34.

35. connectionTimeout="20000"

36. redirectPort="8443" />

37.

38.

39.

42.

43.

44.

45.

46. resourceName="UserDatabase"/>

47.

48.

57.

58. unpackWARs="true" autoDeploy="true">

59.

65.

66.

67.

68. prefix="localhost_access_log" suffix=".txt"

69. pattern="%h %l %u %t "%r" %s %b" />

70.

71.

72.

73.

4. WEB站点部署

上线的代码有两种方式,第一种方式是直接将程序目录放在webapps目录下面,这种方式大家已经明白了,就不多说了。第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面。下面让我们见识一下这种方式。

4.1 使用war包部署web站点

1. [root@tomcat webapps]# pwd

2. /application/tomcat/webapps

3. [root@tomcat webapps]# rz #→上传memtest.war,此文件也在上面的百度网盘里

4. [root@tomcat webapps]# ls

5. docs examples host-manager manager memtest memtest.war ROOT

浏览器访问:http://10.0.0.3:8080/memtest/meminfo.jsp

4.2 自定义默认网站目录

上面访问的网址为http://10.0.0.3:8080/memtest/meminfo.jsp
现在我想访问格式为http://10.0.0.3:8080/meminfo.jsp
怎么破?

方法一

将meminfo.jsp或其他程序放在tomcat/webapps/ROOT目录下即可。因为默认网站根目录为tomcat/webapps/ROOT

方法二

1. [root@tomcat ~]# vim /application/tomcat/conf/server.xml

2.

3. unpackWARs="true" autoDeploy="true">

4.

5. [root@tomcat ~]# /application/tomcat/bin/shutdown.sh

6. [root@tomcat ~]# /application/tomcat/bin/startup.sh

5. Tomcat多实例及集群架构

5.1 Tomcat多实例

5.1.1 复制Tomcat目录

1. [root@tomcat ~]# cd /application/

2. [root@tomcat application]# cp -a apache-tomcat-8.0.27 tomcat8_1

3. [root@tomcat application]# cp -a apache-tomcat-8.0.27 tomcat8_2

5.1.2 修改配置文件

1. [root@tomcat application]# mkdir -p /data/www/www/ROOT

2. [root@tomcat application]# cp /application/tomcat/webapps/memtest/meminfo.jsp /data/www/www/ROOT/

3. [root@tomcat ~]# sed -i '22s#8005#8011#;69s#8080#8081#;123s#appBase=".*"# appBase="/data/www/www"#' /application/tomcat8_1/conf/server.xml

4. [root@tomcat ~]# sed -i '22s#8005#8012#;69s#8080#8082#;123s#appBase=".*"# appBase="/data/www/www"#' /application/tomcat8_2/conf/server.xml

5. [root@tomcat ~]# diff /application/tomcat/conf/server.xml /application/tomcat8_1/conf/server.xml

6. 22c22

7. <

8. ---

9. >

10. 69c69

11. <

12. ---

13. >

14. 123c123

15. <

16. ---

17. >

18. [root@tomcat ~]# diff /application/tomcat/conf/server.xml /application/tomcat8_2/conf/server.xml

19. 22c22

20. <

21. ---

22. >

23. 69c69

24. <

25. ---

26. >

27. 123c123

28. <

29. ---

30. >

5.1.3 启动多实例

1. for i in {1..2};do /application/tomcat8_$i/bin/startup.sh;done

2. netstat -tunlp|grep java

浏览器可以分别访问http://10.0.0.3:8081/meminfo.jsp 和 http://10.0.0.3:8082/meminfo.jsp

5.2 Tomcat集群

使用nginx+Tomcat反向代理集群

1. [root@tomcat ~]# vim /application/nginx/conf/nginx.conf

2. upstream web_pools {

3. server 127.0.0.1:8081;

4. server 127.0.0.1:8082;

5. }

6. server {

7. listen 80;

8. server_name localhost;

9. location / {

10. root html;

11. index index.jsp index.html index.htm;

12. proxy_pass http://web_pools;

13. }

14. }

15. [root@tomcat ~]# /application/nginx/sbin/nginx -t

16. [root@tomcat ~]# /application/nginx/sbin/nginx

浏览器可以访问http://10.0.0.3/meminfo.jsp

6. Tomcat监控

企业案例:Linux下java/http进程高解决案例

生产环境下某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高。请搞定!

7. Tomcat安全优化和性能优化

7.1 安全优化

· 降权启动

· telnet管理端口保护

· ajp连接端口保护

· 禁用管理端

7.2 性能优化

7.2.1 屏蔽dns查询enableLookups="false"

1.

2. connectionTimeout="6000" enableLookups="false" acceptCount="800"

3. redirectPort="8443" />

7.2.2 jvm调优

Tomcat最吃内存,只要内存足够,这只猫就跑的很快。

如果系统资源有限,那就需要进行调优,提高资源使用率。

1. 优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码:

2.

3. JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"

4.

5. server:一定要作为第一个参数,在多个CPU时性能佳

6. -Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些

7. -Xmx:初始堆内存heap最大值,使用的最大内存

8. 上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。

9. -XX:PermSize:设定内存的永久保存区域

10. -XX:MaxPermSize:设定最大内存的永久保存区域

11. -XX:MaxNewSize:

12. -Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.

13. +XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。

14. -Xss:每个线程的Stack大小

15. -verbose:gc 现实垃圾收集信息

16. -Xloggc:gc.log 指定垃圾收集日志文件

17. -Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一

18. -XX:+UseParNewGC :缩短minor收集的时间

19. -XX:+UseConcMarkSweepGC :缩短major收集的时间



文件 应用 程序 配置 组件 服务 内存 服务器 容器 应用程序 用户 处理 目录 管理 主机 端口 认证 元素 功能 实例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海睿民互联网科技有限公司 江苏根荣互联网科技 港股互联网科技股 苏州互联网科技贷款公司 掌上梦互联网科技 互联网科技英文翻译 成都仁贤领冠互联网科技有限公司 山东吉时兔互联网科技有限公司 剑昆互联网络科技有限公司临桂 互联网科技革命什么开始 成都互联网科技公司工作好不好 恒生互联网科技指数跳水 互联网金融科技展 长沙茂晟互联网科技有限公司 小米互联网科技园入驻 广州富喜互联网络科技 科技信息时代互联网发展 美国五大互联网科技公司市值多少 现代互联网科技公司 河南商务圈互联网科技有限公司 互联网与科技 互联网科技大会案例 中正互联网科技招聘 科技大学互联网专业好不好 互联网科技公司招聘 上海钢联属于互联网科技股吗 中国互联网有什么科技 互联网领先科技宣传片 广东鹅鹅鹅互联网科技有限公司 昆明中奇联合互联网科技
0