在座各位老铁程序开发多年,想必Tomcat一直是都是你们的必用猫吧,在项目中配一下Tomcat,copy一份server.xml覆盖进来,就可以轻松愉快的把项目跑起来了。
但是.....
你们有没有想过Tomcat是怎么运行你们充满bug的程序的呢?server.xml里的这些垃圾配置又是什么用的呢?
下面,我附上一份花费多日呕心沥血制作而成的server.xml配置详解,费大家脑壳和钛合金眼睛仔细看看:
1<?xml version='1.0' encoding='utf-8'?>
2<!--Server:最顶层,代表整个Tomcat容器 , port:指定负责监听的关闭端口 主要用于tomcat服务关闭时回调给应用程序的监听 -->
3<Server port="8005" shutdown="SHUTDOWN">
4 <!-- Listener:监听器 可以在特定事件发生时执行特定的操作;被监听的事件通常是Tomcat的启动和停止-->
5
6 <!-- VersionLoggerListener:当Tomcat启动时,该监听器记录Tomcat、Java和操作系统的信息。该监听器必须是配置的第一个监听器 -->
7 <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
8 <!-- JasperListener:在Web应用启动之前初始化Jasper,Jasper是JSP引擎,把JVM不认识的JSP文件解析成java文件,
9 然后编译成class文件供JVM使用。 -->
10 <Listener className="org.apache.catalina.core.JasperListener" />
11 <!-- JreMemoryLeakPreventionListener:类加载器导致的内存泄露有关 -->
12 <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
13 <!-- GlobalResourcesLifecycleListener:初始化< GlobalNamingResources>标签中定义的全局JNDI资源;
14 如果没有该监听器,任何全局资源都不能使用 -->
15 <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
16 <!-- ThreadLocalLeakPreventionListener:当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。当线程执行完任务被收回线程池时,
17 活跃线程会一个一个的更新。只有当Web应用(即Context元素)的renewThreadsWhenStoppingContext属性设置为true时,该监听器才有效。 -->
18 <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
19
20 <!-- 服务器的全局JNDI资源 -->
21 <GlobalNamingResources>
22 <Resource name="UserDatabase" auth="Container"
23 type="org.apache.catalina.UserDatabase"
24 description="User database that can be updated and saved"
25 factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
26 pathname="conf/tomcat-users.xml" />
27 </GlobalNamingResources>
28
29 <!-- service:服务组件,对外提供服务,一个service代表一个服务 -->
30 <Service name="Catalina">
31 <!--Connector: 接收连接请求,创建Request和Response对象用于和请求端交换数据;
32 然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。
33 可以配置多个Connector, 通过创建不同的Connector指定不同的port和协议访问Tomcat服务
34 常见的属性有:
35
36 protocol:协议,有HTTP、AJP等各种协议等
37 connectionTimeout:链接超时时间
38 redirectPort:指定服务器正在处理http请求时,收到了一个SSL传输请求后,重定向的端口号
39 -->
40 <Connector
41 keepAliveTimeout="10000"
42 namePrefix="catalina-exec-"
43 maxThreads="1024"
44 minSpareThreads="4"
45 maxIdleTime="6000"
46 connectionTimeout="1000"
47 compression="on"
48 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
49 enableLookups="false"
50 maxKeepAliveRequests="1"
51 maxConnections="1024"
52 acceptCount="2000"
53 port="8008"
54 protocol="org.apache.coyote.http11.Http11NioProtocol"
55 redirectPort="8444"
56 />
57 <!--Engine:请求处理组件,在service组件中有且只有一个,Service组件中的请求处理组件。
58 Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端
59 他有以下属性:
60 name:Engine的逻辑名称,在日志和错误消息中会用到
61 defaultHost:指定默认主机,如果没有分配哪个Host来执行用户请求,由这个值所指定的主机来处理,
62 这个值必须和<Host>元素中的其中一个的name值相同
63 -->
64 <Engine name="Catalina" defaultHost="localhost">
65 <!--
66 Host:可以有一或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。
67 Host的作用是可以运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用,
68 它的属性有:
69 name:指定虚拟主机的主机名,一般情况下,主机名需要是在DNS服务器中注册的网络名,但是Engine指定的defaultHost不需要
70 unpackWARs:是否将代表Web应用的WAR文件解压;如果为true,通过解压后的文件结构运行该Web应用,如果为false,直接使用WAR文件运行Web应用
71 appBase:应用程序基本目录,即存放应用程序的目录,可以是计算机中的绝对目录,也可以是相对CATALINA_HOME的相对目录,不填则默认为tomcat下webapps目录
72 alias:指定主机别名
73 autoDeploy:是否自动发布;用于检测appBase下的文件,如果有新增或者修改,为true则会自动重新启动项目
74 -->
75 <Host
76 name="localhost"
77 appBase=""
78 unpackWARs="true"
79 autoDeploy="false">
80 <!--
81 Context:指当前Host上运行的一个Web应用 ,每个Host中可以定义任意多的Context元素。
82 它有以下属性:
83 path:访问该Web应用的上下文路径
84 docBase:指定了该Web应用使用的WAR包路径,或应用目录。
85 reloadable:tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下class文件的改动
86 -->
87 <Context
88 path=""
89 docBase="/neno/xxxDemo/web"
90 reloadable="true" />
91 </Host>
92 </Engine>
93</Service>
94</Server>
通过研究上面的配置和注释,想必大家已经对这个配置的讲解理解的一塌糊涂了吧?因为密密麻麻花里胡哨的代码和汉字混杂在一起,看起来就像脑壳撞墙冒星星一样难受。
好吧,我们根据真实场景分析一下从用户在浏览器输入网址发请求到最终返回结果展示到网站这一个过程在客户端浏览器、提供web程序的服务器、Tomcat、web程序分别在哪个步骤做了什么骚操作:
用户在浏览器输出网站:http://www.xxx.com/customer/index.html
浏览器解析出域名www.xxx.com并且去请求DNS服务器,通过DNS获取相应的域名对应的IP和端口如(123.1.1.1:8099)
通过IP地址找到IP对应的服务器后,要求建立TCP连接
通讯双方连接之后,请求被发送到服务器端口8099
该端口是Tomcat中的server.xml的Connector配置port,所以此时请求被相应的Connector接收到
Connector把请求分配到它里边的Engine组件,由它来处理,并且等待其响应
Engine收到请求之后,根据请求路径匹配到相应的host,交给host处理
host匹配相对路径/customer/index.html,找到相应的context
匹配到相应context后,根据路径访问相应的servlet
根据请求构造HttpServletRequest对象和HttpServletResponse对象,并调用Servlet的doGet或doPost方法
servlet中处理逻辑之后,把HttpServletResponse对象返回给Host
host把HttpServletResponse逐级传递到Engine、Connector
最终把响应结果返回到客户端的浏览器
浏览器把结果渲染呈现
至此,一个完整的http请求完成。结合这个流程再看上面的server.xml配置,应该是一点即通了吧。
觉得本文对你有帮助?请分享给更多人
关注「编程无界」,提升装逼技能
相关推荐
`server.xml`是Tomcat的主要配置文件,而`web.xml`则定义了应用程序的行为。 在`server.xml`中,我们需要配置`<Connector>`元素来启用HTTPS。以下是一个示例配置: ```xml SSLEnabled="true" maxThreads="150" ...
Tomcat 配置文件 web.xml 与 server.xml 解析 Tomcat 配置文件 web.xml 和 server.xml 是 Tomcat 自身的配置文件,用于配置 Tomcat 服务器的行为和性能。在本文中,我们将对 web.xml 和 server.xml 中的主要配置项...
### Tomcat 服务器server.xml的关键参数配置 #### 一、配置Tomcat服务器访问端口 ...总之,通过对`server.xml`文件中的关键参数进行合理的配置,可以有效地管理和优化Tomcat服务器的性能,并确保应用程序的正常运行。
Tomcat server.xml文件的配置直接影响到Tomcat服务器的行为和性能,了解每个配置项的含义及作用是进行Tomcat优化和问题排查的基础。通过适当配置server.xml,可以实现对Tomcat服务器的个性化管理,如增加安全性、...
在探讨`server.xml`配置文件之前,让我们先明确一点:`server.xml`是Apache Tomcat服务器的核心配置文件,它控制着Tomcat的启动、运行和停止过程。对于任何希望深入理解和优化Tomcat性能的开发者来说,熟悉并掌握`...
`server.xml`是Tomcat的核心配置文件,控制着Tomcat的启动、运行和停止,对性能优化、安全性提升等方面具有至关重要的作用。 ### `server`元素 `server`元素位于`server.xml`的最顶层,是Tomcat实例的根节点,由`...
Tomcat Server.xml 配置说明 Tomcat Server.xml 文件是 Tomcat 服务器的核心配置文件,它定义了 Tomcat 服务器的整体结构和行为。在这个文件中,我们可以定义 Server、Service、Engine、Host 等元素,这些元素共同...
本文档将深入探讨Tomcat中的两个核心配置文件:`web.xml`和`server.xml`,并提供详细的配置说明和实例。 ### 一、Tomcat介绍 1.1 **Tomcat简介** Tomcat是开源的Servlet容器,它实现了Java Servlet和JavaServer ...
而`server.xml`作为Tomcat的核心配置文件,对Tomcat的启动、运行、性能调优等方面具有重要意义。本文将详细介绍`server.xml`中的关键配置项,并结合实例讲解如何通过该文件实现如去除默认端口、绑定多域名以及项目...
在Java Web开发中,Tomcat作为一款广泛应用的开源Servlet容器,其配置文件server.xml的重要性不言而喻。本文将深入探讨Tomcat6版本中的server.xml,揭示其中的核心配置元素,帮助开发者更好地理解和定制服务器环境。...
本文将深入探讨`server.xml`文件中的关键配置元素,以及它们如何影响Tomcat的运行。 首先,`server.xml`文件位于Tomcat的`conf`目录下,它是Tomcat启动时加载的第一个配置文件。这个XML文件按照特定的结构定义了...
理解并熟练掌握`server.xml`的配置是每个Tomcat管理员的基本技能,它能帮助你更好地管理和优化你的Web服务环境。当遇到性能问题、安全需求或其他高级功能时,对`server.xml`的深入理解和适当调整将变得尤为关键。...
《Tomcat Server.xml的典型配置与优化》 在Java Web应用服务器中,Tomcat以其轻量级、高效能和易用性受到了广泛欢迎。而Server.xml文件是Tomcat的核心配置文件,它定义了服务器的各个组件及其配置,包括端口设置、...
tomcat的server.xml配置,api和web分离。
tomcat工程配置相关实例,内部只要是关于资源如果不在tomcat的web目录下如何进行简单的配置说明
《Tomcat中Server.xml详解》 在Apache Tomcat服务器中,`server.xml`是一个至关重要的配置文件...通过对`server.xml`的深入学习,开发者可以更好地掌控Tomcat服务器的运行状态,提升其在复杂环境下的适应性和稳定性。
- 配置Tomcat涉及修改 `conf/server.xml` 文件,以设置端口、应用上下文路径和连接器等参数。 - 启动和停止Tomcat可以使用 `bin/startup.sh` 和 `bin/shutdown.sh` 脚本。 5. **安全管理**: - Tomcat的安全管理...
tomcat配置多域名访问同一个服务下的多目录server。文件在一个tomcat中部署多个web应用。
Apache Tomcat 是一款广泛应用的开源软件,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。在本文中,我们将深入探讨Apache Tomcat 8.5.100这一特定版本的重要特性、安装与配置过程,以及如何...
Apache Tomcat是一个开源的Java Servlet容器,用于部署和运行Java Web应用程序。它是基于Sun Microsystems的Java Servlet和JavaServer Pages(JSP)技术的。在本例中,我们讨论的文件"apache-tomcat-8.5.56-src.tar....