Catalina 六配置文件

官家的自我介绍

https://www.mulesoft.com/tcat/tomcat-catalina

才疏学浅,认知浅薄,多加批评,加以指点

先认识Tomcat

tomcat是Apache旗下的一个开源Servlet的容器,实现了对Servlet和JSP技术支持。
Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器

目录结构

- bin:可执行文件;如重启服务等等
- conf:配置文件目录;
- lib:类库;tomcat依赖的jar文件
- logs:日志文件
- temp:临时的文件
- webapps:web项目目录
- work:运行产生的文件

什么是catalina?

Catalina是Tomcat服务器的一个核心组件,Tomcat是在一个开源的环境中开发出来的,使用的是Servlet规范(http服务器接收到请求后交给servlet容器处理,servlet容器通过servlet接口调用业务类;servlet容器和接口整个内容叫servlet规范)的实现的,关于Servlet它是一个容器架构出来的(具体再说,也学习中);

为什么Catalina成为核心?
tomcat由众多可编辑配置的组件组成的一个web容器,tomcat启动后,通过加载Catalina解析配置文件service.xml,创建服务器server组件进行管理;server服务器组装和启动servlet引擎和tomcat连接器;其中service作为server内部组件将连接器connector组件绑定到container,最后Container 容器,负责处理⽤户的servlet请求,并返回对象给web⽤户的模块

官方:

when you start up your Tomcat server you're actually starting Catalina.

Catalina的配置文件

Catalina默认行为可编辑Tomcat中位于$CATALINA_BASE/conf目录下的配置文件,可以在每个文件中配置各种选项类型。

一、catalina.policy(安全)

catalina.policy文件里面是Catalina Java类的Tomcat安全,主要以Java EE 规范中定义的标准安全策略语法。Tomcat的核心安全策略,可以实现系统代码、Web 应用程序和 Catalina 本身的权限定义。

默认的配置文件内容:https://opensource.apple.com/source/blojsom/blojsom-67/blojsom_root/conf/catalina.policy.auto.html

标准权限的含义:

- java.util.PropertyPermission - 控制对 JVM 属性的读/写访问,例如java.home.
- java.lang.RuntimePermission - 控制某些系统/运行时函数的使用,例如exit()和 exec()。还控制包访问/定义。
- java.io.FilePermission - 控制对文件和目录的读/写/执行访问.
- java.net.SocketPermission - 控制网络套接字的使用。
- java.net.NetPermission - 控制多播网络连接的使用。
- java.lang.reflect.ReflectPermission - 控制使用反射来进行类内省。
- java.security.SecurityPermission - 控制对安全方法的访问。
- java.security.AllPermission - 允许访问所有权限,就像您在没有 SecurityManager 的情况下运行 Tomcat 一样。

permission类用于定义Tomcat 加载时用于的权限,可以自己创建permission类在web应用程序中使用,

Q: 怎么配置?
A: Java SecurityManager

SecurityManager用于保持服务器安全的防线,允许web浏览器在自己的沙箱(sandbox,虚拟系统程序,运行程序中提供的隔离环境)中运行程序;
Tomcat 使用一个名为 org.apache.naming.JndiPermission的自定义权限类。此权限控制对基于 JNDI 命名文件的资源的读取访问。

permission  org.apache.naming.JndiPermission  "jndi://localhost/examples/*";

permission为每个部署的web应用程序动态生成,允许读取自己的静态资源,但不允许其他文件来读取

二、catalina.properties(属性)

catalina.properties文件是class的标准Java属性文件,它设置了一些重要的类加载器路径、安全包列表和一些可调性能属性缓存字符串的一些设置,另一个特性是可以在此文件中设置自定义属性,并将它们作为变量引用到 Tomcat 的 server.xml文件中对这些文件进行编辑配置,令Tomcat获取最佳性能;

  • 安全设置
    默认情况下,如果通过将-security参数传递给catalina脚本文件来启用 Tomcat 的安全管理器,将使用 - package.access和package.definition属性。
package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.tomcat.
package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.naming.,org.apache.tomcat.
  • 类加载
    https://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
    Tomcat在初始化时会创建Bootstrap类(Java虚拟机提供的基本运行类)、System类(从classpath环境变量的内容初始化)、Common(额外的类:Tomcat 内部类和所有 Web 应用程序都是可见)

common类加载器的位置一般就是由catalina.properties文件中的属性定义的
默认的设置顺序:

common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
//解压的类和资源 : $CATALINA_BASE/lib
//JAR 文件在 : $CATALINA_BASE/lib/*.jar
//解压的类和资源:  $CATALINA_HOME/lib
//JAR 文件在:  $CATALINA_HOME/lib/*.jar
  • 扫描类
    common.loader加载完毕后,tomcat启动程序检查配置中设置的server.loader和
    shared.loader,默认没有配置;设置后会读取
annotations-api.jar* — JavaEE 注释类。
catalina.jar* — Tomcat 的 Catalina servlet 容器部分的实现。
catalina-ant.jar* — Tomcat Catalina Ant 任务。
catalina-ha.jar* — 高可用性包。
catalina-tribes.jar* - 组通信包。
ecj-*.jar* — Eclipse JDT Java 编译器。
el-api.jar* — EL 2.2 API。
jasper.jar* — Tomcat Jasper JSP 编译器和运行时。
jasper-el.jar* — Tomcat Jasper EL 实现。
jsp-api.jar* — JSP 2.2 API。
servlet-api.jar* — Servlet 3.0 API。
tomcat-api.jar* — Tomcat 定义的几个接口。
tomcat-coyote.jar* — Tomcat 连接器和实用程序类。
tomcat-dbcp.jar* — 基于 Apache Commons Pool 和 Apache Commons DBCP 1.x 的包重命名副本的数据库连接池实现。
tomcat-i18n-**.jar* — 包含其他语言资源包的可选 JAR。由于默认包也包含在每个单独的 JAR 中,因此如果不需要消息的国际化,可以安全地删除它们。
tomcat-jdbc.jar* — 另一种数据库连接池实现,称为 Tomcat JDBC 池。
tomcat-util.jar* — Apache Tomcat 的各种组件使用的通用类。
tomcat7-websocket.jar* — WebSocket 1.1 实现
websocket-api.jar* — WebSocket 1.1 API
  • Jar Scanner组件
    用于扫描Web应用程序来查找jar文件和类文件的目录组件;

Jar Scan Filter元素表示在将来自 Jar Scanner 的结果传递回应用程序之前对其进行过滤的组件。它通常用于跳过已知与某些或所有类型的扫描无关的 JAR 的扫描

//ToSkip要跳过扫描的文件
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=
//ToScan要扫描的文件
tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
  • 字符缓存设置
//默认tomcat.util.buf.StringCache.byte.enabled=开启,其余注释
tomcat.util.buf.StringCache.byte.enabled=true
#tomcat.util.buf.StringCache.char.enabled=true
#tomcat.util.buf.StringCache.trainThreshold=500000
//缓存大小
#tomcat.util.buf.StringCache.cacheSize=5000

三、logging.propertiesr(日志)

logging.propertiesr文件是日志属性的配置文件,是日志记录功能,怎么记录?记录多少?记录在哪里?等一些配置;

然后你看这个配置文件中配置的路径,然后和配置了需要记录哪些日志,去找改路径查看日志;(对于日志路径靠问、靠猜的我,瞬间恍然大悟)

  • 但官方的这么一句话没太明白,(学习中):
Note that all the entries in this log refer to JULI, the modified commons-logging implementation that Tomcat automatically uses in place of your JDK's logging implementation.
//该日志中的所有条目都指向JULI,即经过修改的公共日志实现,Tomcat自动使用它来代替JDK的日志实现。

https://tomcat.apache.org/tomcat-7.0-doc/logging.html
知道了:
关于JULI:是tomcat自身java.util.logging拥有的API关键组件LogManager实现的,可以令每个应用程序都会有自己的日志记录;

  • 日志级别阈值,默认为INFO
    由高到低:SEVERE(最高级别)、WARNING、INFO、CONFIG、FINE、FINER、FINES(最低值)
  • 特殊级别
    OFF,可用来关闭日志记录。
    ALL,启用所有消息的日志记录
org.apache.catalina.level=FINEST
  • 疑问:tomcat既然默认使用的日志JULI,但为什么还是有人选择Log4j;

四、context.xml(上下文容器)

context.xml是一个定义上下文路径(相对于服务器地址的位置,web应用程序的一个名称)的XMl文件;

Tomcat借助Contexts把请求发送到不同的servlet的一种方式;就是HTTP请求发出后,Catalina接收这个请求,然后传递给Context,然后Context又将请求传递给某个servlet服务;

  • 请求路径和context设置路径匹配时,然后就会按照请求传递给对应的Servlet来处理
  • 不匹配时,catalina传递给上下文路径是零长度字符串的上下文;

具体官人是怎么讲: https://tomcat.apache.org/tomcat-7.0-doc/config/context.html

五、server.xml(主配置)&web.xml(加载)

https://www.cnblogs.com/kismetv/p/7228274.html

  • Q:server.xml为什么会做为主要配置文件?
    server.xml文件里面包含了众多元素,通过元素配置来控制Tomcat组件
server.xml

看看有哪些元素:
1、 顶层元素

 & 
  • Server元素
    Server做为最顶层的元素,暴露在最外层(唯一一个);存在的作用就是为客户端提供一个访问的端口,让其能访问到service集合;

常见到的属性:

port属性(Server接收shutdown指令的端口号),设为-1可以禁掉该端口。
shutdown属性(关闭Server的指令)
  • Service元素
    Service是将多个Connector连接器(从客户端接收请求)和一个Engine容器(处理接收到的请求)包裹起来的一个元素;每个不同的Service是可以监听不同的端口;
拓展一下:Tomcat里面常见到的三端口
- 8080(8443)主端口:
监听浏览器发送过来的请求 ,redirectPort 表示如果发送的是 https 请求,就将请求转发到 8443 端口
8443是默认的https的监听端口;
- 8005 shutdown端口 
监听关闭Tomcat的请求,可以通过sh脚本执行“SHUTDOWN”关闭tomcat;
- 8009 ajp代理
Nginx一些反向代理tomcat时就可以使用ajp协议反向代理到这个端口;一般应用服务器交互(再学习后补充吧)

ajp协议?
定向包协议,以二进制格式传输可读性文本

2、连接器
Connector,req和res交换数据,将请求交给Engine容器来处理,


// port规定请求端口号;protocol属性规定请求协议;connectionTimeout表示连接的超时时间;
// redirectPort强制要求https而请求是http时,重定向端口号为8443的Connector;、


3、容器(祖孙三代)

  • Engine:处理connector接收到客户端的req,然后再将res返回给connector,最后给客户端


name :日志&错误信息
defaultHost :默认host,本地请求host名称不存在的时,就用defaultHost指定的host处理
  • Host:虚拟主机;客户端在请求时就会将主机名包含在请求头里面,然后Tomcat从请求中提取host


name:虚拟主机的主机名,一个Engine中有且仅有一个Host组件的name属性与Engine组件的defaultHost属性相匹配
unpackWARs:是否将代表Web应用来解压WAR文件;
    true=通过解压后的文件结构运行该Web应用
    false=直接使用WAR文件运行Web应用。
autoDeploy和appBase属性,Host内Web应用的自动部署有关,具体看看链接里面大佬怎么说
  • Context:在特定虚拟主机上运行的一个web应用,但是吧这个元素一般看不到,原因是因为Tomcat配置了自动部署,所以就没在sever.xml文件里面做静态配置;web里面
web.xml

这个文件是web应用程序上的一个配置选项,将添加的配置加载在web应用中;

就这样吧

六、tomcat-users.xml

https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html
用户、密码、角色;

你可能感兴趣的:(Catalina 六配置文件)