更新时间:2021-09-23 09:59:53 来源:极悦 浏览761次
当您在服务器上部署 Web 应用程序并从浏览器访问时,我们已经了解了 Web 服务器的一般工作方式。现在让我们学习服务器内部的东西,这些东西在日常工作中可能不会用到,但是当您第一次配置应用程序时,它们肯定会对您有所帮助。我很长时间以来一直在使用tomcat 服务器,所以我选择它作为教程。将来只要时间允许,我将尝试在其他服务器上分享我的学习。
Apache Tomcat是由 Apache 软件基金会 (ASF) 开发的开源 Web 服务器和 servlet 容器。Tomcat 实现了多种 Java EE 规范,包括 Java Servlet、JavaServer Pages (JSP)、Java EL 和 WebSocket,并为 Java 代码运行提供了“纯 Java”HTTP Web 服务器环境。 [ Wiki ]
Tomcat 的架构由一系列功能组件组成,这些功能组件可以按照明确定义的规则进行组合。
每个服务器安装的结构(通过这些功能组件)在文件中定义,该文件server.xml位于Tomcat 安装文件夹的/conf子目录中。让我们详细讨论这些组件。
默认情况下,server.xml文件带有此配置,我们将详细研究它的元素。
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" 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>
下面从里到外讨论tomcat配置文件的功能组件,更好的把东西联系起来。
上下文是一组称为容器的 Tomcat 组件的最内层元素,它代表单个 Web 应用程序。Tomcat 会在加载应用程序时自动实例化和配置标准上下文。作为配置的一部分,Tomcat 还会处理在\WEB-INF\web.xml您的应用程序文件夹的文件中定义的属性,并使它们对应用程序可用。
连接器处理与客户端的通信。Tomcat 有多个可用的连接器,例如用于大多数 HTTP 流量的 HTTP 连接器和实现 AJP 协议的 AJP 连接器,这些连接器实现了在将 Tomcat 连接到另一个 Web 服务器(例如 Apache HTTPD 服务器)时使用的 AJP 协议。
Tomcat 的默认配置包括一个连接器来处理 HTTP 通信。默认情况下,此连接器等待来自端口8080 的请求。这就是为什么我们示例的 URL 总是以http://localhost:8080/. 请注意,所有应用程序的请求都通过此连接器的单个实例。每个新请求都会导致一个新线程的实例化,该线程在请求持续时间内在连接器中保持活动状态。Internet 上有关 Tomcat 的文章通常将此连接器称为“ Coyote”。
的connectionTimeout属性集至20,000表示会话为5小时,33分钟,和不活动的20秒后终止,而redirectPort =” 8443“意味着,需要安全套接字层(SSL)输送到来的请求被重定向到端口8443。
AJP 连接器让 Tomcat 只处理动态网页,而让纯 HTML 服务器(例如,Apache Web 服务器)处理对静态页面的请求。这最大限度地提高了处理请求的效率。您可以注释掉这个连接器,因为今天 tomcat 本身非常快,或者只是如果您不打算将 Web 服务器与 Tomcat 一起使用。
主机是网络名称(例如 www.yourdomain.com)与 Tomcat 服务器的关联。主机可以包含任意数量的上下文(即应用程序)。您可以在同一台服务器上定义多个主机。例如,如果您已注册域yourdomain.com,则可以定义主机名,例如w1.yourdomain.com和w2.yourdomain.com。请记住,只有当域名服务器将其名称映射到您计算机的 IP 地址时,才能从 Internet 访问它。
Tomcat 的默认配置包括名为localhost 的主机。本地主机和您的计算机之间的关联是通过在文件中写入一个条目来完成的C:\Windows\System32\drivers\etc\hosts。
Host 属性“ appBase ”定义了 Tomcat 安装文件夹中的应用程序目录。然后,每个应用程序由其在该目录中的路径标识。唯一的例外是路径 ROOT,它映射到空字符串。localhost 的应用程序基目录是 webapps。这意味着目录“ C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\”中的应用程序由空字符串标识。因此,它的 URL 是“ http://localhost:8080/”。对于驻留在除 ROOT 之外的目录中的其他应用程序,如“ C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\myapp\”,URL 类似于“ http://localhost:8080/myapp/”。
属性unpackWARs="true"表示如果在appBase目录中放置一个 WAR 文件,Tomcat 会自动将其展开到一个普通文件夹中。如果将此属性设置为 false,应用程序将直接从 WAR 文件运行。这显然意味着应用程序的执行速度较慢,因为 Tomcat 需要在执行时解压缩 WAR 文件。
属性autoDeploy="true"意味着如果您appBase在 Tomcat 运行时将应用程序放到目录中,它将自动部署。
引擎代表特定服务的请求处理管道。由于 Service 可能有多个连接器,引擎接收并处理来自这些连接器的所有请求,将响应传递回适当的连接器以传输给客户端。
一个引擎必须包含一台或多台主机,其中一台被指定为默认主机。默认的 Tomcat 配置包括引擎 Catalina,它包含主机 localhost(显然指定为默认主机,因为它是唯一的)。Catalina 引擎处理通过 HTTP 连接器接收到的所有传入请求并发回相应的响应。它根据请求头中包含的信息将每个请求转发到正确的主机和上下文。
服务是位于服务器内部的中间组件,并将一个或多个连接器绑定到一个引擎。Tomcat 的默认配置包括服务 Catalina,它将 HTTP 和 AJP 连接器与 Catalina 引擎相关联。因此,连接器和引擎是服务元素的子元素。
Service 元素很少由用户自定义,因为默认实现简单且足够。
Server 是顶层组件,代表 Tomcat 的一个实例。它可以包含一个或多个服务,每个服务都有自己的引擎和连接器。
现在让我们讨论上面使用的一些其他概念server.xml。
侦听器是一个 Java 对象,它通过实现org.apache.catalina.LifecycleListener接口能够响应特定事件。
AprLifecycleListener:启用 Apache Portable Runtime (APR) 库。该库为 tomcat 提供操作系统级别的支持。
JasperListener:启用 Jasper,它是 JSP 引擎。该侦听器使重新编译已更新的 JSP 文档成为可能。
JreMemoryLeakPreventionListener:处理可能导致内存泄漏的不同已知情况。
GlobalResourcesLifecycleListener:负责实例化与全局 Java 命名和目录接口 (JNDI) 关联的托管 bean。
ThreadLocalLeakPreventionListener:还处理可能导致内存泄漏的不同已知情况。
该GlobalNamingResources元素只能在服务器组件内定义。它定义了可在整个服务器中访问的 JNDI 资源。默认情况下定义的唯一资源server.xml是通过文件定义的用户和密码基于内存的数据库conf/tomcat-users.xml。
Realm 组件可以出现在任何容器组件(Engine、Host 和 Context)中。它代表用户、密码和用户角色的数据库。其目的是支持基于容器的身份验证。
此外UserDatabaseRealm,以下领域类可用:(JDBCRealm通过其 JDBC 驱动程序连接到关系数据库),DataSourceRealm(连接到通过 JNDI 命名的 JDBC 数据源),JNDIRealm(连接到轻量级目录访问协议目录),和MemoryRealm(到在内存中加载一个 XML 文件)。
Valve 是一个类似于元素的拦截器,当插入到容器(上下文、主机或引擎)中时,它会在所有传入的 HTTP 请求到达应用程序之前拦截它们。这使您能够预处理针对特定应用程序的请求;虚拟主机中运行的应用程序或引擎中运行的所有应用程序。
阀门可以有多种用途,例如
该RemoteAddrValve阀可以让你选择性地允许或他们的源IP地址的基础上块的请求。它支持两个属性——允许和阻止。
<Valve className="org.apache.catalina.valves.RemoteAddrValve" block="192\.168.*"/>
该RemoteHostValve阀的运作就像远程地址过滤,但对客户端的主机名,而不是客户端的IP地址。
<Valve className="org.apache.catalina.valves.RemoteHostValve" deny=".*badweb\.com"/>
RequestDumperValve传入请求的日志详细信息,因此可用于调试目的。
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
single sign on valve,包括在主机容器中时,有需要一种身份验证该主机的所有应用程序的影响。如果没有这个阀,用户在使用每个单独的应用程序之前必须输入他的 ID 和密码。
<Valve className="org.apache.catalina.valves.SingleSignOn"/>
以上就是关于“Tomcat视频教程:Tomcat的架构和server.xml配置”的介绍,大家如果想了解更多相关知识,不妨关注极悦的Tomcat视频教程,里面的内容更详细,可以免费下载学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习