Tomcat服务的安装配置和使用
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本文在介绍关于Tomcat服务的安装配置和使用的基础上,重点探讨了其具体步骤,步骤简单易上手操作,文章内容步步紧凑,希望大家根据这篇文章可以有所收获。jdk安装jdk下载地址:http://www.o
千家信息网最后更新 2025年02月02日Tomcat服务的安装配置和使用
本文在介绍关于Tomcat服务的安装配置和使用的基础上,重点探讨了其具体步骤,步骤简单易上手操作,文章内容步步紧凑,希望大家根据这篇文章可以有所收获。
jdk安装
jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html1)解压并配置环境变量#cd /usr/local/src/#tar xf jdk-8u231-linux-x64.tar.gz#ln -s jdk1.8.0_231/ jdk#cat > /etc/profile.d/jdk.sh << EOFexport JAVA_HOME=/usr/local/src/jdkexport CLASSPATH=.:\$JAVA_HOME/jre/lib/rt.jar:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jarexport PATH=\$PATH:\$JAVA_HOME/binEOF#source /etc/profile.d/jdk.sh2)查看jdk版本#java -versionjava version "1.8.0_231"Java(TM) SE Runtime Environment (build 1.8.0_231-b11)Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
tomcat安装
安装包下载地址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz1)解压并为Tomcat做软连接#cd /usr/local/src/#tar xf apache-tomcat-8.5.42.tar.gz#ln -s apache-tomcat-8.5.42 tomcat2)启动和查看Tomcat状态#cd tomcat/bin/#./startup.sh Using CATALINA_BASE: /usr/local/src/tomcatUsing CATALINA_HOME: /usr/local/src/tomcatUsing CATALINA_TMPDIR: /usr/local/src/tomcat/tempUsing JRE_HOME: /usr/local/src/jdkUsing CLASSPATH: /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jarTomcat started.#ps -ef |grep tomcat|grep -v greproot 6377 1 2 21:19 pts/0 00:00:05 /usr/local/src/jdk/bin/java -Djava.util.logging.config.file=/usr/local/src/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/src/tomcat -Dcatalina.home=/usr/local/src/tomcat -Djava.io.tmpdir=/usr/local/src/tomcat/temp org.apache.catalina.startup.Bootstrap start上面的操作,启动身份是root,如果要使用普通用户启动可以使用下面的这种方法#useradd -r java#chown -R java.java /usr/local/src/tomcat/#su - java -c '/usr/local/src/tomcat/bin/startup.sh'su: warning: cannot change directory to /home/java: No such file or directoryUsing CATALINA_BASE: /usr/local/src/tomcatUsing CATALINA_HOME: /usr/local/src/tomcatUsing CATALINA_TMPDIR: /usr/local/src/tomcat/tempUsing JRE_HOME: /usr/local/src/jdkUsing CLASSPATH: /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jarTomcat started.#ps aux |grep tomcat|grep -v grepjava 6529 4.5 4.7 2995916 87744 ? Sl 21:25 0:02 /usr/local/src/jdk/bin/java -Djava.util.logging.config.file=/usr/local/src/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/src/tomcat/bin/bootstrap.jar:/usr/local/src/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/src/tomcat -Dcatalina.home=/usr/local/src/tomcat -Djava.io.tmpdir=/usr/local/src/tomcat/temp org.apache.catalina.startup.Bootstrap start
使用systemd管理Tomcat服务
1.首先,需要为tomcat配置pid#sed -i '/[ -z "\$CATALINA_BASE" ] && CATALINA_BASE="\$CATALINA_HOME"/a\CATALINA_PID="$CATALINA_BASE/tomcat.pid"' /usr/local/src/tomcat/bin/catalina.sh配置后结果如下141 # Copy CATALINA_BASE from CATALINA_HOME if not already set142 [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"143 CATALINA_PID="$CATALINA_BASE/tomcat.pid" # 设置pid。一定要加在CATALINA_BASE定义后面,要不然pid会生成到/下面2.创建服务脚本#cat > /usr/lib/systemd/system/tomcat.service << EOF[Unit]Description=Apache Tomcat Web Application ContainerAfter=syslog.target network.target[Service]Type=forkingEnvironment="JAVA_HOME=/usr/local/src/jdk"PIDFile=/usr/local/src/tomcat/tomcat.pidExecStart=/usr/local/src/tomcat/bin/startup.shExecReload=/bin/kill -s HUP \$MAINPIDExecStop=/bin/kill -s QUIT \$MAINPIDPrivateTmp=trueSuccessExitStatus=143 [Install]WantedBy=multi-user.targetEOF3.启动Tomcat并设置为开机自启动,和查看状态#systemctl enable --now tomcat && systemctl status tomcatCreated symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2020-01-15 17:23:21 CST; 7ms ago Process: 9615 ExecStart=/usr/local/src/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 9623 (java) CGroup: /system.slice/tomcat.service └─9623 /usr/local/src/jdk/bin/java -Djava.util.logging.config.file=/usr/local/src/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli....Jan 15 17:23:21 CentOS7-01.localdomain systemd[1]: Starting Apache Tomcat Web Application Container...Jan 15 17:23:21 CentOS7-01.localdomain startup.sh[9615]: Tomcat started.Jan 15 17:23:21 CentOS7-01.localdomain systemd[1]: Started Apache Tomcat Web Application Container.
使用systemd管理Tomcat服务遇到的问题及解决办法
1.执行systemctl start tomcat命令#systemctl start tomcatJob for tomcat.service failed because the control process exited with error code. See "systemctl status tomcat.service" and "journalctl -xe" for details.#journalctl -xe......startup.sh[10247]: Neither the JAVA_HOME nor the JRE_HOME environment variable is definedstartup.sh[10247]: At least one of these environment variable is needed to run this program......如果在tomcat的service文件中没有设置jdk的环境变量,就会在启动tomcat的时候报错,产生以上的错误信息,为解决此问题,需要在service文件中添加如下配置[Service]Environment="JAVA_HOME=/usr/local/src/jdk"注:就算在/etc/profile.d/目录下单独配置了jdk环境变量,对于使用systemd管理tomcat服务也是无效的,所有需要在tomcat的service文件中配置。2.执行systemctl stop tomcat命令#systemctl stop tomcat#systemctl status tomcat● tomcat.service - Apache Tomcat Web Application Container Loaded: loaded (/usr/lib/systemd/system/tomcat.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Wed 2020-01-15 19:17:27 CST; 2min 21s ago Process: 10635 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS) Process: 10574 ExecStart=/usr/local/src/tomcat/bin/startup.sh (code=exited, status=0/SUCCESS) Main PID: 10582 (code=exited, status=143)Jan 15 19:17:19 CentOS7-01.localdomain systemd[1]: Starting Apache Tomcat Web Application Container...Jan 15 19:17:19 CentOS7-01.localdomain startup.sh[10574]: Tomcat started.Jan 15 19:17:19 CentOS7-01.localdomain systemd[1]: Started Apache Tomcat Web Application Container.Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: Stopping Apache Tomcat Web Application Container...Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: tomcat.service: main process exited, code=exited, status=143/n/aJan 15 19:17:27 CentOS7-01.localdomain systemd[1]: Stopped Apache Tomcat Web Application Container.Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: Unit tomcat.service entered failed state.Jan 15 19:17:27 CentOS7-01.localdomain systemd[1]: tomcat.service failed.停止tomcat的时候并没有报错,但是查看tomcat的status时,发现tomcat服务进入了失败的状态,为解决此问题,需要在tomcat的service中添加如下配置[Service]SuccessExitStatus=143参考文档:https://stackoverflow.com/questions/40331741/systemd-tomcat-service-failed-with-no-errors
目录结构
目录 | 说明 |
---|---|
bin | 服务启动、停止等相关 |
conf | 配置文件 |
lib | 库目录 |
logs | 日志目录 |
webapps | 应用程序,应用部署目录 |
work | jsp编译后的结果文件 |
配置文件
文件名 | 说明 |
---|---|
server.xml | 主配置文件 |
web.xml | 每个webapp只有"部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置 |
context.xml | 每个webapp都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置 |
tomcat-users.xml | 用户认证的账号和密码文件 |
catalina.policy | 当使用-security选项启动tomcat时,用于为tomcat设置安全策略 |
catalina.properties | Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数 |
logging.properties | 日志系统相关的配置。log4j |
组件分类
类别 | 说明 |
---|---|
顶级组件 | Server,代表整个Tomcat容器 |
服务类组件 | Service,组织Engine和Connector,里面只能包含一个Engine |
连接器组件 | Connector,有HTTP、HTTPS、A JP协议的连接器 |
容器类 | Engine、Host、Context都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。 |
内嵌类 | 可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内定义。 |
集群类组件 | listener、cluster |
内部组成结构
由上述组件就构成了Tomcat,如下图
名称 | 说明 |
---|---|
Server | Tomcat运行的进程实例 |
Connector | 负责客户端的HTTP、HTTPS、A JP等协议的连接。一个Connector只属于某一个Engine |
Service | 用来组织Engine和Connector的关系 |
Engine | 响应并处理用户请求。一个引擎上可以绑定多个Connector |
Host | 虚拟主机 |
Context | 应用的上下文,配置路径映射path => directory |
AJP(Apache Jserv protocol) | 是一种基于TCP的二进制通讯协议。 |
核心组件说明
- Tomcat启动一个Server进程。可以启动多个Server,但一般只启动一个
- 创建一个Service提供服务。可以创建多个Service,但一般也只创建一个
- 每个Service中,是Engine和其连接器Connector的关联配置
- 可以为这个Server提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同的连接请求或响应
- Service内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host
- Engine对请求头做了分析,将请求发送给相应的虚拟主机
- 如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机
- Engine上的缺省虚拟主机可以修改
- Host定义虚拟主机,虚拟主机有name名称,通过名称匹配
- Context定义应用程序单独的路径映射和配置
Tomcat处理请求的流程
假设来自客户的请求为:http://localhost:8080/test/index.jsp 1)浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1 Connector获得此请求。 2)Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应 3)Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host 4)Engine匹配到名为localhost的Host。即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机 5)localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context 6)Host匹配到路径为/test的Context 7)path=/test的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet 8)Context匹配到URL PATTERN为*.jsp 的servlet,对应于JspServlet类构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法。 9)Context把执行完了之后的HttpServletResponse对象返回给Host 10)Host把HttpServletResponse对象返回给Engine 11)Engine把HttpServletResponse对象返回给Connector 12)Connector把HttpServletResponse对象返回给浏览器端
应用部署
根目录
Tomcat中默认网站根目录是CATALINA_BASE/webapps/,在Tomcat的webapps目录中,有个非常特殊的目录ROOT,它就是网站默认根目录。每一个虚拟主机的目录都可以使用appBase配置自己的站点目录,里面都可以使用ROOT目录作为主站目录。
JSP WebApp目录结构
主页配置:一般指定为index.jsp或index.htmlWEB-INF/:当前WebApp的私有资源路径,通常存储当前应用使用的web.xml和context.xml配置文件META-INF/:类似于WEB-INFclasses/:类文件,当前webapp需要的类lib/:当前应用依赖的jar包
更改默认主页文件
默认情况下,访问Tomcat的主页,返回的内容是CATALINA_BASE/webapps/ROOT/index.jsp文件提供的,这里将在CATALINA_BASE/webapps/ROOT/下添加一个index.html文件,内容如下#cat /usr/local/src/tomcat/webapps/ROOT/index.html tomcat index.html添加完该文件内容后再访问Tomcat默认页,返回结果如下#curl localhost:8080tomcat index.html产生上面结果的原因是CATALINA_BASE/conf/web.xml文件中的标签内容(默认页)所导致的,复制到CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml中,如下 Welcome to Tomcat Welcome to Tomcat index.jsp index.htm index.html 配置修改后,再次访问首页,结果如下图
从上面的验证结果可以发现,Tomcat的默认页访问顺序是从上往下依次匹配的
webapp归档格式
.war:WebApp打包.jar:EJB类打包文件.rar:资源适配器类打包文件.ear:企业级WebApp打包传统应用开发测试后,通常打包为war格式,这种文件部署到了Tomcat的webapps下,还可以自动展开。
部署Deploy
- 部署:将webapp的源文件放置到目标目录,通过web.xml和context.xml文件中配置的路径就可以访问该webapp,通过类加载器加载其特有的类和依赖的类到JVM上。
- 自动部署Auto Deploy:Tomcat发现多了这个应用就把它加载并启动起来
- 手动部署
- 冷部署:将webapp放到指定目录,才去启动Tomcat
- 热部署:Tomcat服务不停止,需要依赖manager、ant脚本、tcd(tomcat client
deployer)等工具
- 反部署undeploy:停止webapp的运行,并从JVM上清除已经加载的类,从Tomcat应用目录中移除部署的文件
- 启动start:是webapp能够访问
- 停止stop:webapp不能访问,不能提供服务,但是JVM并不清除它
实验
1 添加一个test.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>jsp例子 后面的内容是服务器端动态生成字符串,最后拼接在一起<%out.println("hello jsp");%>
<%=request.getRequestURL()%>把test.jsp放到ROOT下去,然后访问http://YourIP:8080/test.jsp立即可以看到,这是通过路径映射找到相应的test.jsp后,转换成test_jsp.java,再编译成test_jsp.classCATALINA_BASE/work/Catalina/localhost/ROOT/org/apache/jsp/ 目录下有转换后的文件
2 添加一个应用
模拟部署一个应用常见开发项目目录组成结构#mkdir projects/myapp/{WEB-INF,classes,lib} -p#tree projects/projects/└── myapp ├── classes ├── lib └── WEB-INF4 directories, 0 files常见应用首页,内容就用上面的test.jsp#cp webapps/ROOT/test.jsp projects/myapp/index.jsp复制项目目录到webapps目录下去#cp -r projects/myapp/ /usr/local/src/tomcat/webapps/访问测试http://YourIP:8080/myapp
主配置文件详解
CATALINA_BASE/conf/server.xml
1)8005端口
该端口是Tomcat的管理端口,默认监听在127.0.0.1上。SHUTDOWN这个字符串接收到后就会关闭此Server。#ss -nlt|grep 8080LISTEN 0 100 [::]:8080 [::]:* #telnet 127.0.0.1 8005Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.SHUTDOWNConnection closed by foreign host.这个管理功能建议禁用,将SHUTDOWN改为一串猜不出来的字符串,例如
2)用户认证
CATALINA_BASE/conf/tomcat-users.xml
如果想要使用Manager App,需要一个角色manager-gui,在CATALINA_BASE/conf/tomcat-users.xml配置文件中添加,如下 Tomcat启动加载后,这些内容是常驻内存的。如果配置了新的用户,需要重启Tomcat。访问Manager App
访问manager的时候告诉403,提示中告诉去manager的context.xml中修改,文件路径CATALINA_BASE/webapps/manager/META-INF/context.xml 从配置文件中可以看到allow后面的正则表达式写的是只允许本地访问,但我当前的地址是192.168段的,所有需要添加正则表达式以支持访问,配置后如下allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192\.168\.\d+\.\d+"重启后再次访问测试
3)Service
一般情况下,一个Server实例配置一个Service,name属性相当于该Service的ID。
4)连接器配置
redirectPort,如果访问HTTPS协议,自动转向这个连接器。但大多数时候,Tomcat并不会开启HTTPS,因为Tomcat往往部署在内部,HTTPS性能较差。
5)引擎配置
defaultHost指向内部定义某虚拟主机。缺省虚拟主机可以改动,默认localhost。
6) 虚拟主机配置
配置说明:name #必须是主机名,用主机名来匹配。appBase #当前主机的网页根目录,是相对于CATALINA_HOME,也可以使用绝对路径unpackWARs #是否自动解压war格式autoDeploy #热部署,自动加载并运行应用
虚拟主机配置实验
尝试再配置一个虚拟主机,并将myapp部署到/data/webapps目录下 #mkdir /data/webapps -p#cp -r projects/myapp/ /data/webapps/ROOT刚才在虚拟主机中主机名定义www.hechunping.com,所有需要在宿主机的hosts文件中添加域名解析访问测试
Context配置
Context作用
- 路径映射
- 应用独立配置,例如单独配置应用日志、单独配置应用访问控制
配置说明:path #指的是访问的路径docBase #可以是绝对路径,也可以是相对路径(相对于Host的appBase)reloadable #true表示如果WEB-INF/classes或META-INF/lib目录下.class文件有改动,就会将WEB应用重新加载,性能消耗很大。生产环境中,会使用false来禁用。将projects/myapp下的项目文件复制到/data/下#cp -r projects/myapp/ /data/myapp_v1#cd /data/#ln -s myapp_v1/ test在Tomcat的主配置文件server.xml中添加如下内容 访问测试http://www.hechunping.com:8080/test/
注意:这里特别使用了软链接,原因就是以后版本升级,需要将软链接指向myapp_v2,重启Tomcat。如果新版上线后,出现问题,重新修改软链接到上一个版本的目录,并重启,就可以实现回滚。
关于Tomcat服务的安装配置和使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
配置
文件
目录
主机
应用
虚拟主机
服务
路径
组件
内容
对象
结果
连接器
处理
多个
用户
端口
测试
管理
不同
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全绘画简笔画一等奖
网络安全成本大全
网络电视软件开发原理
服务器无法更新怎么办
西安耐斯网络技术有限公司
数据库和服务器可以分开吗
大学网络安全的会议记录
长城超云服务器bmcip
即征即退增值税软件开发
厦门润迪软件开发
软件开发审核作业指导
怎样启动网络安全模式
校园活动网络安全周小学
网络安全法发布经历
孝义市网络安全活动
中国影响力人物数据库靳艳军
软件开发什么时候评审
去小公司干软件开发
自学考试网络安全难不难
灵武市政务软件开发多少费用
国内好的服务器商
用plsql备份数据库数据
小程序统计数据库
江苏5g服务器配套机柜
数据库导出禁止触发器
网络安全宣传活动现场
网络安全金鸡百花
公共管理数据库
网信办 网络安全基金
苹果7怎么清理软件数据库