tomcat 基础

JDK 安装

OpenJDK

openjdk 在常见的Linux发行版中, 包仓库中默认是有的, 只需要通过发行版对应的yum或者apt 就可以安装

OracleJDK

OracleJDK 需要先到Oracle 官网 https://www.oracle.com/java/technologies/downloads/ , 注册账号之后,才能下载

安装参见脚本 OracleJDK安装

查看jdk版本

java -version

tomcat

tomcat是java web应用服务器, 是servlet和jsp容器,同时也是一个静态web服务器

官网 https://tomcat.apache.org/

tomcat 各版本的区别 https://tomcat.apache.org/whichversion.html

tomcat 包安装

yum install tomcat*

apt install tomcat9

tomcat二进制安装

参考脚本 tomcat二进制包安装

tomcat 文件结构和组成

目录结构
目录 说明
bin 服务启动、停止等相关程序和文件
conf 配置文件
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录
work jsp编译后的结果文件,建议提前预热访问,升级应用后,删除此目录数据才能更新
配置文件说明

在tomcat安装目录下的 conf 子目录中,有以下的 tomcat 的配置文件

文件名 说明
server.xml 主配置文件
web.xml 每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
context.xml 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
tomcat-users.xml 用户认证的账号和密码文件
catalina.policy 当使用security选项启动tomcat时,用于为tomcat设置安全策略
catalina.properties Tomcat 环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
logging.properties Tomcat 日志系统相关的配置,可以修改日志级别和日志路径等

注意:配置文件大小写敏感

日志文件

tomcat有五类日志:catalina、localhost、manager、admin、host-manager

catalina.out

catalina.out即标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat 运行自己输出的日志以及应用里向console输出的日志。默认这个日志文件是不会进行自动切割的,我们 需要借助其他工具进行切割(注意:catalina.out文件如果过大会影响)

catalina.YYYY-MM-DD.log

catalina.{yyyy-MM-dd}.log是tomcat自己运行的一些日志,这些日志还会输出到catalina.out,但是应 用向console输出的日志不会输出到catalina.{yyyy-MM-dd}.log,它是tomcat的启动和暂停时的运行日 志,注意,它和catalina.out是里面的内容是不一样的

localhost.YYYY-MM-DD.log

localhost.{yyyy-MM-dd}.log主要是应用初始化(listener, filter, servlet)未处理的异常最后被tomcat捕获 而输出的日志,它也是包含tomcat的启动和暂停时的运行日志,但它没有catalina.2018-09-19.log日志全。 它只是记录了部分日志

localhost_access_log.YYYY-MM-DD.txt

这个是访问tomcat的日志,请求时间和资源,状态码都有记录

host-manager.YYYY-MM-DD.log

这个是放tomcat的自带的manager项目的日志信息的,未看到有什么重要的日志信息

manager.YYYY-MM-DD.log

这个是tomcat manager项目专有的日志文件

Tomcat 访问日志格式

日志格式 https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Access_Logging

tomcat日志实现json格式的访问日志
添加下面一行,注意是一行,不要换行
pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}"

tomcat内部组成

java应用部署

Tomcat中默认网站根目录是$CATALINA_BASE/webapps/ 在Tomcat的webapps目录中,有个非常特殊的目录ROOT,它就是网站默认根目录。 将eshop解压后的文件放到这个$CATALINA_BASE/webapps/ROOT中。 bbs解压后文件都放在$CATALINA_BASE/webapps/forum目录下。 $CATALINA_BASE/webapps下面的每个目录都对应一个Web应用,即WebApp 最终网站链接有以下对应关系

http://localhost/ 对应于eshop的应用WebApp,即$CATALINA_BASE/webapps/ROOT/目录, http://localhost/forum/ 对应于forum的应用WebApp,即$CATALINA_BASE/webapps/forum/

war war 包直接放到webapps下,会自动解压

jar java -jar xxx.jar

基于WEB的管理Server status和Manager APP实现应用部署

tomcat 提供了基于WEB的管理页面,默认由 tomcat-admin-webapps.noarch包提供相关文件

实现WEB的管理Server status和Manager APP

打开浏览器可以访问tomcat管理的默认管理页面,点击server status 和 Manager APP 两个按钮都会出现下面提示403的错误提示 默认的管理页面被禁用,启用方法如下

修改webapps/manager/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreve
ntionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>


删除allow 或者修改它允许其他主机访问

<Context antiResourceLocking="false" privileged="true" >
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" />
 <Manager sessionAttributeValueClassNameFilter="java\.lang\.
(?:Boolean|Integer|Long|Number|String)|org\.apach
e\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.
(?:Linked)?HashMap"/>
</Context> 
#修改WebApp的配置无需重启服务即可生效

修改conf/conf/tomcat-users.xml, 这个文件是在  conf/server.xml中指定的
   pathname="conf/tomcat-users.xml"  #由此文件指定授权用户信息

用户认证,配置文件是conf/tomcat-users.xml。打开tomcat-users.xml,我们需要一个角色manager-gui

<tomcat-users xmlns="http://tomcat.apache.org/xml"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://tomcat.apache.org/xml tomcatusers.xsd"
                version="1.0">
  #加下面两行,指定用户和密码
   <role rolename="manager-gui"/>
   <user username="admin" password="123456" roles="manager-gui"/>
 </tomcat-users>

#修改全局配置文件需要重启服务生效
systemctl restart tomcat

tomcat 常见端口

端口8005/tcp 安全配置管理 8005是Tomcat的管理端口,默认监听在127.0.0.1上。无需验证就可发送SHUTDOWN (大小写敏感)这个 字符串,tomcat接收到后就会关闭此Server

配置修改位置 在conf/server.xml 有以下内容

port设为-1 将关闭此功能, 此行不能被注释,否则无法启动tomcat服务 ### 基于web方式的Host Manager虚拟主机管理 可以通过tomcat的管理页面点 Host Manager按钮进入管理虚拟主机的页面 配置 conf/tomcat-users.xml ```bash <tomcat-users xmlns="http://tomcat.apache.org/xml"              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"              version="1.0">     #3.4.4.6添加的内容       #添加新的role     #再 加新role     </tomcat-users> 重启tomcat 即可 允许远程主机访问 webapps/host-manager/META-INF/context.xml <Valve className="org.apache.catalina.valves.RemoteAddrValve"         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|10\.0\.0\.\d+" /> ``` ### Context 配置 **Context作用:** 路径映射:将url映射至指定路径,而非使用appBase下的物理目录,实现虚拟目录功能 应用独立配置,例如单独配置应用日志、单独配置应用访问控制