相关概念 Tomcat
Tomcat是一个servlet容器,用来装载javaweb程序,也可以称它为web容器。同类型的javaweb容器还有JBoss、WebLogic等。
Tomcat也具有传统的Web服务器的功能:处理Html页面。其他web服务器还有Apache、Nginx等。与Nginx相比,Tomcat的处理静态Html的能力较弱,可以将Tomcat和Nginx集成到一块,让Nginx处理静态Html,而Tomcat处理Jsp和Servlet。
综上所述:Tomcat可以理解为一个中间件,在B/S架构中,浏览器发出的http请求经过Tomcat中间件,转发到最终的目的服务器上,响应消息再通过Tomcat返回给浏览器。Tomcat所做的事情主要有:开启监听端口监听用户的请求,解析用户发来的http请求然后访问到指定的应用系统,然后返回的页面经过Tomcat返回给用户。
JDK、JRE和JVM JDK、JRE、JVM 是 Java 开发中的三个重要概念,JDK 包含了 JRE 和开发工具,JRE 包含了 JVM 和类库,JVM 是 Java 程序的运行环境。
在开发 Java 应用程序时,需要使用 JDK,而在运行 Java 应用程序时,只需要使用 JRE。
JDK
如果想进行 Java 开发,需要先安装 JDK。JDK(Java Development Kit)是 Java 开发工具包的缩写,是 Java 开发的基础,可以简单的理解 JDK 就是 Java 开发的软件环境,如果没有它,我们很难进行 Java 开发。JDK 包含了 Java 编译器、Java 虚拟机、Java 标准库等组件,可以用于开发和运行 Java 应用程序。
JRE
JRE(Java Runtime Environment)是 Java 运行环境的缩写,是 Java 应用程序的运行环境。JRE 提供了在机器上运行 Java 程序的环境,因此 JRE 包含了 Java 虚拟机和 Java 应用程序所需的类库等组件。与 JDK 不同的是,JRE 不包含 Java 编译器和其他开发工具,只包含 Java 运行环境所需的组件。
如果只需要运行 Java 应用程序,可以安装 JRE(JDK 中已经自带),也可以从 Oracle 官网 下载 JRE。
JVM
JVM(Java Virtual Machine)是 Java 虚拟机的缩写,它负责 Java 程序的具体运行。Java 程序在运行时,会被编译成字节码文件,然后由 JVM 解释执行,因此 JVM 也被称为解释器 。JVM 可以在不同的操作系统上运行 Java 应用程序,保证了 Java 的跨平台性。
Tomcat部署 安装软件包 JDK版本:jdk 1.8.0_60(jdk-8u202-linux-x64.tar.gz)
Tomcat版本:tomcat 8.5.66(apache-tomcat-8.5.66.tar.gz)
下载方式:国内镜像站下载,远程传送到Linux机器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 mkdir -p /app/jdk /app/tomcattar -xf jdk-8u202-linux-x64.tar.gz tar -xf apache-tomcat-8.5.66.tar.gz cat >> /etc/profile << 'EOF' > export JAVA_HOME=/app/jdk > export TOMCAT_HOME=/app/tomcat > 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 > EOF [root@web03 app]$ java -version java version "1.8.0_202" Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) [root@web03 app]$ /app/tomcat/bin/version.sh Using CATALINA_BASE: /app/tomcat Using CATALINA_HOME: /app/tomcat Using CATALINA_TMPDIR: /app/tomcat/temp Using JRE_HOME: /app/jdk Using CLASSPATH: /app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-juli.jar Using CATALINA_OPTS: Server version: Apache Tomcat/8.5.66 Server built: May 8 2021 22:44:01 UTC Server number: 8.5.66.0 OS Name: Linux OS Version: 3.10.0-1160.102.1.el7.x86_64 Architecture: amd64 JVM Version: 1.8.0_202-b08 JVM Vendor: Oracle Corporation
Tomcat目录结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@web03 tomcat]$ tree -L 1 . ├── bin ├── BUILDING.txt ├── conf ├── CONTRIBUTING.md ├── lib ├── LICENSE ├── logs ├── NOTICE ├── README.md ├── RELEASE-NOTES ├── RUNNING.txt ├── temp ├── webapps └── work
核心命令
tomcat命令目录位于tomcat安装目录的bin目录下,主要是以下脚本实现:
startup.sh:用于启动tomcat
shutdown.sh:用于关闭tomcat
version.sh:用于检查jdk与tomcat版本信息
catalina.sh:tomcat核心脚本,启动和关闭时都会调用,也用于配置Java启动参数,tomcat远程管理、配置jvm参数等
配置文件
tomcat配置文件位于tomcat安装目录的conf目录下,主要包含以下配置文件:
server.xml:tomcat主配置文件
web.xml:补充配置文件(额外功能)
tomcat-user.xml:tomcat管理端配置文件
日志
tomcat日志文件位于tomcat安装目录的logs目录下
catalina.out:tomcat最全日志,查看所有信息
catalina.[日期].log:切割日志文件,以天为单位
localhost_access_log.[日期].txt:tomcat访问日志,以天为单位
host-manager.2023-12-12.log ,manager.2023-12-12.log, localhost.2023-12-12.log:管理端相关日志
配置systemctl启动方案 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cd /usr/lib/systemd/systemvim tomcat.service [Unit] Description=tomcat service After=network.target [Service] Type=forking Environment="JAVA_HOME=/app/jdk" ExecStart=/app/tomcat/bin/startup.sh ExecStop=/app/tomcat/bin/shutdown.sh PrivateTmp=true [Install] WantedBy=multi-user.target
1 2 3 4 5 6 7 注意:关于服务脚本需要加上环境变量的问题 之前已经在/etc/profile文件中定义了JAVA_HOME,但是此处还是需要重新指定一下,否则使用systemctl启动tomcat时会报错: "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined" 因为普通Shell脚本在终端下运行时,可以获得~/.bash_profile,/etc/profile等文件中定义的环境变量。而在系统服务中注册服务,通过系统服务启动的应用,在service模式下,脚本运行在受限的环境中,不能获取已经全局设置的环境变量。 所以,当把一个shell脚本放入到service中时,需要设定好PATH等环境。 在此tomcat的服务脚本中,需要加上`Environment="JAVA_HOME=/app/jdk"`,以便startup.sh和shutdown.sh正常脚本运行。 另一个方法是在这两个脚本中添加`source /etc/profile`这句话,这样在执行脚本时,也会去加载外部已经定义好的环境变量。
开启Tomcat管理端 以下是浏览器访问tomcat主页,显示的三个管理端入口,分别是查看Tomcat服务状态、管理应用程序、管理主机。
为了保证安全性,只有主机能够访问Tomcat管理端页面,并且配置文件中并没有设定身份验证的用户和密码,所以Tomcat默认关闭Tomcat的管理端。
在生产环境中,也不需要开启Tomcat管理端功能。但是在测试环境中,可以开启管理端功能进行调试,以下是开启方法。
允许其他主机访问管理端页面
1 2 3 4 5 6 7 [root@web03 tomcat]$ vim ./webapps/manager/META-INF/context.xml [root@web03 tomcat]$ vim ./webapps/host-manager/META-INF/context.xml <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
添加身份验证信息
1 2 3 4 5 6 [root@web03 tomcat]$ vim ./conf/tomcat-users.xml <role rolename="admin-gui" /> <role rolename="manager-gui" /> <user username="tomcat" password="tomcat" roles="admin-gui,manager-gui" />
Tomcat配置文件 主配置文件server.xml,位于tomcat的conf目录下
查看文件内容(已过滤部分注释信息),详细解释信息参考:``
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 <?xml version="1.0" encoding="UTF-8" ?> <Server port ="8005" shutdown ="SHUTDOWN" > <Listener className ="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className ="org.apache.catalina.core.AprLifecycleListener" SSLEngine ="on" /> <Listener className ="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className ="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className ="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources > ...... </GlobalNamingResources > <Service name ="Catalina" > <Connector port ="8080" protocol ="HTTP/1.1" connectionTimeout ="20000" redirectPort ="8443" /> <Engine name ="Catalina" defaultHost ="localhost" > <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" > <Valve className ="org.apache.catalina.valves.AccessLogValve" directory ="logs" prefix ="localhost_access_log" suffix =".txt" pattern ="%h %l %u %t " %r" %s %b" /> </Host > </Engine > </Service > </Server >
部署一个javaweb应用 主机
主机
IP
作用
web03
192.168.110.139
JDK,Tomcat,运行Javaweb应用
db01
192.168.110.143
mariadb,作为数据库服务器
zrlog是一个开源的Java博客程序,进入zrlog官网 下载应用的war包,传输到web主机的tomcat目录下的webapps目录,启动tomcat。
进入db主机,创建一个zrblog数据库。
客户端访问192.168.110.139:8080/zrlog,填写信息连接数据库,即可创建博客。