让我们从内到外讨论tomcat配置文件的功能组件,以便更好地关联事物。
Context–上下文
Context是一组称为容器的Tomcat组件的最内层元素,它代表一个Web应用程序。Tomcat在加载应用程序时自动实例化并配置标准上下文。作为配置的一部分,Tomcat还处理\WEB-INF\web.xml
应用程序文件夹文件中定义的属性,并使其可供应用程序使用。
Connector–连接器
**连接器处理与客户端的通信。**Tomcat有多个连接器,例如用于大多数HTTP流量的HTTP连接器和AJP连接器(将Tomcat连接到另一个Web服务器(如Apache HTTPD服务器)时使用的AJP协议)。
Tomcat的默认配置包括用于处理HTTP通信的连接器。默认情况下,此连接器等待通过端口8080发出的请求。这就是为什么我们的示例的URL始终以http://localhost:8080/
。请注意,对所有应用程序的请求都通过此连接器的单个实例。每个新请求都会导致在请求持续时间内在连接器内保持活动状态的新线程的实例化。有关Tomcat的互联网上的文章通常将此连接器称为“ Coyote”。
Connector的connectionTimeout属性设置为20000表示会话为5小时,33分钟,和不活动的20秒后终止,而**redirectPort =” 8443“**意味着,需要安全套接字层(SSL)输送到来的请求被重定向到端口8443。
AJP连接器允许Tomcat仅处理动态网页,并允许纯HTML服务器(例如,Apache Web服务器)处理静态页面的请求。这最大化了处理请求的效率。您可以注释掉这个连接器,因为今天tomcat本身非常快,或者只是如果您不打算与Tomcat一起使用Web服务器。
Host-主机
**主机是网络名称(例如www.yourdomain.com)与Tomcat服务器的关联。**主机可以包含任意数量的上下文(即应用程序)。您可以在同一服务器上定义多个主机。例如,如果您已注册域yourdomain.com
,则可以定义主机名,例如w1.yourdomain.com
和w2.yourdomain.com
。请记住,只有域名服务器将其名称映射到计算机的IP地址时,才能从Internet访问它。
Tomcat的默认配置包括名为localhost的主机。localhost和您的计算机之间的关联是通过在文件中写入条目来完成的C:\Windows\System32\drivers\etc\hosts
。
Host属性“ appBase ”定义Tomcat安装文件夹中的应用程序目录。然后,每个应用程序由该目录中的路径标识。唯一的例外是路径ROOT,它映射到空字符串。localhost的应用程序基目录是webapps。这意味着目录“ C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\ROOT\
” 中的应用程序由空字符串标识。因此,其URL为“ http://localhost:8080/
”。对于驻留在ROOT以外的目录中的其他应用程序,如“ C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\myapp\
”,URL就像“ http://localhost:8080/myapp/
”。
属性**autoDeploy =“true”**属性表示如果appBase
在Tomcat运行时将应用程序放在目录中,它将自动部署。
Engine–引擎
**引擎表示特定服务的请求处理管道。**由于服务可能具有多个连接器,因此引擎接收并处理来自这些连接器的所有请求,将响应交还给相应的连接器以传输到客户端。
引擎必须包含一个或多个主机,其中一个主机被指定为默认主机。默认的Tomcat配置包括引擎Catalina,它包含主机localhost(显然被指定为默认主机,因为它是唯一的主机)。Catalina引擎处理通过HTTP连接器接收的所有传入请求,并发回相应的响应。它根据请求标头中包含的信息将每个请求转发到正确的主机和上下文。
Service–服务
**服务是一个中间组件,它位于服务器内部,并将一个或多个连接器与一个引擎绑定。**Tomcat的默认配置包括Catalina服务,它将HTTP和AJP连接器与Catalina引擎相关联。因此,Connector和Engine是Service元素的子元素。
Service元素很少由用户自定义,因为默认实现简单而实用。
Server–服务器
**Server是顶级组件,代表Tomcat的一个实例。**它可以包含一个或多个服务,每个服务都有自己的引擎和连接器。
现在让我们讨论上面使用的其他几个概念server.xml
。
Listener–监听器
监听器是一个Java对象,通过实现org.apache.catalina.LifecycleListener
接口,可以响应特定事件。
- AprLifecycleListener:启用Apache Portable Runtime(APR)库。该库为tomcat提供操作系统级支持。
- JasperListener:启用Jasper,它是JSP引擎。此侦听器可以重新编译已更新的JSP文档。
- JreMemoryLeakPreventionListener:处理可能导致内存泄漏的不同已知情况。
- GlobalResourcesLifecycleListener:负责实例化与全局Java命名和目录接口(JNDI)关联的托管bean。
- ThreadLocalLeakPreventionListener:还处理可能导致内存泄漏的不同已知情况。
GlobalNamingResources–命名资源
该GlobalNamingResources
元素只能在Server组件中定义。**它定义了可在整个服务器上访问的JNDI资源。**默认情况下定义的唯一资源server.xml
是通过该文件定义的基于用户和密码内存的数据库conf/tomcat-users.xml
。
Realm
Realm组件可以出现在任何容器组件(Engine,Host和Context)中。它表示用户,密码和用户角色的数据库。其目的是支持基于容器的身份验证。
此外UserDatabaseRealm
,还提供以下领域类:( JDBCRealm
通过其JDBC驱动程序连接到关系数据库),DataSourceRealm
(连接到通过JNDI命名的JDBC数据源),JNDIRealm
(连接到轻量级目录访问协议目录)和MemoryRealm
(在内存中加载XML文件)。
Valve–阀门
Valve是类似拦截器的元素,当插入到Container(Context,Host或Engine)中时,会在到达应用程序之前拦截所有传入的HTTP请求。这使您能够预处理指向特定应用程序的请求; 到虚拟主机中运行的应用程序或引擎中运行的所有应用程序。
可以多次使用阀门,例如
该RemoteAddrValve
阀可以让你选择性地允许或他们的源IP地址的基础上块的请求。它支持两个属性 - 允许和阻止。
文末
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
进阶学习视频
附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!