`
jaybril
  • 浏览: 48473 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Tomcat运行web程序过程及server.xml配置

 
阅读更多

在座各位老铁程序开发多年,想必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程序分别在哪个步骤做了什么骚操作:

  1. 用户在浏览器输出网站:http://www.xxx.com/customer/index.html

  2. 浏览器解析出域名www.xxx.com并且去请求DNS服务器,通过DNS获取相应的域名对应的IP和端口如(123.1.1.1:8099)

  3. 通过IP地址找到IP对应的服务器后,要求建立TCP连接

  4. 通讯双方连接之后,请求被发送到服务器端口8099

  5. 该端口是Tomcat中的server.xml的Connector配置port,所以此时请求被相应的Connector接收到

  6. Connector把请求分配到它里边的Engine组件,由它来处理,并且等待其响应

  7. Engine收到请求之后,根据请求路径匹配到相应的host,交给host处理

  8. host匹配相对路径/customer/index.html,找到相应的context

  9. 匹配到相应context后,根据路径访问相应的servlet

  10. 根据请求构造HttpServletRequest对象和HttpServletResponse对象,并调用Servlet的doGet或doPost方法

  11. servlet中处理逻辑之后,把HttpServletResponse对象返回给Host

  12. host把HttpServletResponse逐级传递到Engine、Connector

  13. 最终把响应结果返回到客户端的浏览器

  14. 浏览器把结果渲染呈现

至此,一个完整的http请求完成。结合这个流程再看上面的server.xml配置,应该是一点即通了吧。

 


 

觉得本文对你有帮助?请分享给更多人

关注「编程无界」,提升装逼技能

 

 

 
 
 
0
0
分享到:
评论

相关推荐

    为tomcat服务器配置https,tomcat需要设置的server.xml与web.xml配置

    为tomcat服务器配置https,tomcat需要设置的server.xml与web.xml配置。可以帮助小白为tomcat服务器配置https协议(域名)。

    Tomcat web.xml,server.xml中详细配置说明文档

    在工作中总结的Tomcat中web.xml,server.xml的详细配置文件的说明,还有例子。包含web.xml,server.xml配置文件中的所有配置,想详细了解web.xml,server.xml配置的朋友,还是很有帮助的。 在总结的过程中,查阅了大量...

    tomcat配置文件web.xml与server.xml解析

    tomcat配置文件web.xml与server.xml解析

    server.xml常用配置详解.docx

    server.xml主要用来控制tomcat的运行,jboss的web容器其实是对tomcat的封装,一般在jboss\server\default\deploy\jbossweb-tomcat.sar目录下。

    tomcat的server.xml(自用)

    tomcat的server.xml配置,api和web分离。

    Tomcat6.0 server.xml

    tomcat工程配置相关实例,内部只要是关于资源如果不在tomcat的web目录下如何进行简单的配置说明

    详述 tomcat 中的 server.xml 配置文件示例

    server.xml是 Tomcat 中最重要的配置文件,server.xml的每一个元素都对应了 Tomcat 中的一个组件;通过对 XML 文件中元素的配置,可以实现对 Tomcat 中各个组件的控制。因此,学习server.xml文件的配置,对于了解和...

    tomcat配置多域名访问同一个服务下的多目录server.xml

    tomcat配置多域名访问同一个服务下的多目录server。文件在一个tomcat中部署多个web应用。

    Tomcat6不修改server.xml设置虚拟目录的方法

    Tomcat6不修改server.xml设置虚拟目录的方法

    apache-tomcat-8.5.9-src.tar.gz

    apache-tomcat-8.5.9-src.tar.gz源码 Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的...Apache Tomcat包含了配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。

    apache-tomcat-9.0.82.tar.gz

    Tomcat简单的说就是一个运行JAVA的网络服务器,底层是Socket的一个程序...server.xml该文件用于配置server相关的信息,比如tomcat启动的端口号,配置主机(Host) web.xml文件配置与web应用(web应用相当于一个web站点)

    Tomcat的配置详解中文版

    Tomcat的配置 增加一个虚拟目录 配置JSP及Servlet 配置服务器的端口 web.xml文件的设置 web.xml文件中安全性的设置 tomcat-users.xml 设置 配置日志

    Tomcat工作原理祥解.doc

    Tomcat背景.Tomcat目录.server.xml配置简介.web.xml配置简介

    apache-tomcat-9.0.0.M8.tar.gz

    Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer ...Apache Tomcat包含了配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。

    tomcat8-war-runner:使用具有增强的server.xml支持的Tomcat 7 Maven插件构建的exec-wars的Tomcat 8兼容运行程序

    tomcat8-war-runner 介绍 当前不存在Tomcat 8版本的Tomcat Maven插件。 使用构建的Exec-wars可以... 将您的tomcat7-maven-plugin配置为在您的Web项目pom.xml使用此运行器: &lt;groupId&gt;org.apache.tomcat.maven &lt;

    tomcat权威指南第二版.pdf

    1. Getting Started with Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Installing Tomcat 1 Starting, Stopping, and Restarting Tomcat 17 Automatic Startup 29...

    在Eclipse 中配置Tomcat项目

    对话框中Tomcat选项,选择版本,和安装路径(C:\Program Files\Apache Software Foundation\Tomcat 5.0),注意Context declaration mode 选项:Server.xml和Context files,分别代表了两中启动Tomcat的配置方式,一般...

    基于tomcat配置文件server.xml详解

    该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可。其中大部分都采用了默认设置,只是在engine容器中添加了两个Host容器。 &...

    修改Tomcat默认访问根目录的方法

    在conf文件夹下面找到server.xml 打开 在&lt;hosts&gt; ……中间添加一行 代码如下:”” docBase=”/usr/tomcat/apache-tomcat-8.5.11/webapps/guanwang” debug=”0″ reloadable=”true”/&gt; docBase即为默认访问的...

    apache-tomcat-9.0.0.M27.tar.gz

    Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer ...Apache Tomcat包含了配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。

Global site tag (gtag.js) - Google Analytics