前言

  在上一篇文章中,我们在示例中演示了网站的发布,其中涉及到了 server.xml 的修改,本文中我会给大家详细解释一下 server.xml 文件中的节点及其属性的作用,本片文章参考并摘抄了他人的一些文章,列举出来,表示感谢:

tomcat server.xml 中文版:http://www.blogjava.net/baoyaer/articles/107278.html

tomcat server.xml 文件内各节点详解:http://www.cnblogs.com/gentoo/archive/2012/10/13/2722463.html

tomcat 启动过程原理详解:http://www.ha97.com/4820.html

结构

  • Server 节点代表着整个 catalina servlet container 且只能有一个;
  • Service 节点由一个 Engine、一个或多个 Connector 组成;
  • Connector 节点主要监听客户请求,Tomcat 有两个典型的 Connector,一个直接侦听来自 browser 的 http 请求,一个侦听来自其他 WebServer 的请求;
  • Engine 节点主要负责处理所有 Connector 所获得的客户请求,交由 HOST 处理后,回应 Connector 并返回客户;
  • HOST 节点代表一个虚拟主机,每个虚拟主机和一个网络域名相匹配,每个虚拟主机下都可以部署一个或多个 Web App,每个 Web App 对应于一个 Context 和 Context 的 path;
  • Context 节点对应着我们的 Web App,一个 Web App 由一个或多个 Servlet 组成。

  好了,通过上面对与各个节点的介绍,想必大家对于 server.xml 的文档结构有了一个大致的了解,现在我们以 http://localhost:8080/lofei/welcome.jsp 地址为例再来梳理一下 tomcat 的处理流程:

请求被发送到本机的8080端口,被正在侦听的 Coyote HTTP/1.1 Connector 获得;

  1. Connector 把请求转交给它所在 Service 中的 Engine 来处理,并等待来自该 Engine 的回应;
  2. Engine 获取请求 localhost/lofei/welcome.jsp,匹配它所拥有的所有虚拟主机 HOST(当然有的请求匹配不到也没关系,Engine 有一个默认的虚拟主机,当请求无法匹配到任何 HOST 上时,就交给该默认 HOST 来处理。);
  3. Engine 匹配它所拥有的所有名为 localhost 的请求;
  4. 匹配到的 HOST 获得请求 /lofei/welcome.jsp,匹配它所有的 Context(如果匹配不到就把该请求交给路径名为""的 Context 去处理),匹配的 Context 为 path 为 lofei 的 Context;
  5. 匹配到的 Context 获得请求 /welcome.jsp,在 mapping table 中寻找对应的 servlet context 匹配到对应的页面;
  6. 构造 HttpServletRequest 对象和 HtppResponse 镀锡i昂,作为参数调用 JspServlet 的 doGet 和 doPost 方法;
  7. Context 把执行完了之后的 HttpServletResponse 对象返回给 Host;
  8. Host 把 HttpServletResponse 对象返回给 Engine;
  9. Engine 把 HttpServeletResponse 对象返回给 Connector;
  10. Connetor HttpServletResponse 对象返回给客户 browser。

详解

  server.xml 的详细配置注解如下:

 <?xml version='1.0' encoding='utf-8'?>

 <!--启动Server在端口8005处等待关闭命令,如果接收到“SHUTDOWN”字符串则关闭服务器-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<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> <!--Tomcat的Standalone Service,name用于指定service的名称,是一组 Connector 的集合,它们共用一个 Engine 来处理客户请求-->
<Service name="Catalina">
<!--Connector 表示客户端和Service之间的链接
port 指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookupas 如果为true,则可以通过调用 request.getRemoteHost()进行 DNS 查询来得到远程客户端的实际主机名,若为 false 则不进行DNS查询,
    而返回的是其IP地址;
redirectPort 指定服务正在处理 http 请求时收到了一个 SSL 传输请求后重定向的端口号
acceptCount 指定当前所有可以使用的处理请求的线程都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(单位:毫秒)
下面的示例中:第一个监听器监听8080端口,负责建立HTTP连接,在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器;第二个连接器监听8009
    端口,负责和其他的HTTP服务器建立连接,在Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!--表示指定 service 中请求处理引擎,接收和处理来自 Connector 的请求
defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是一样的
-->
<Engine name="Catalina" defaultHost="localhost">
<!--表示存放用户名,密码,以及role的数据库-->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm> <!--表示一个虚拟主机
name 指定主机名
appBase 应用程序基本目录,即存放应用程序的目录
unpackWARs 如果为true,则tomcat会自动将war文件解压,否则不解压,直接从war文件中运行应用程序
-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"> <!--表示日志、调试和错误信息
prefix 指定log文件的前缀
suffix 指定log文件的后缀
pattern 有两个值,common方式记录远程主机名或ip地址、用户名、日期、第一样请求的字符串、HTTP响应代码、发送的字节数,combinded方式比common方式记录的值更多
-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <!--表示一个web应用程序,通常为war文件
docBase 应用程序的路径或者是war文件存放的路径
path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/***
reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重启tomcat
的情况下改变应用程序
-->
<Context path="" docBase="" /> <!--表示日志、调试和错误信息
prefix 指定log文件的前缀
suffix 指定log文件的后缀
timestamp 如果为tur,则log文件名中要加入时间,如:localhost_log.001-12-22.txt-->
<Logger className="org.apache.catalina.logger.FileLogger"/>
</Host>
</Engine>
</Service>
</Server>

Tomcat 初探(二) server.xml 配置的更多相关文章

  1. Tomcat中的Server.xml配置详解

    Tomcat中的Server.xml配置详解 Tomcat Server的结构图如下: 该文件描述了如何启动Tomcat Server <Server> <Listener /> ...

  2. tomcat中server.xml配置详解(转载)(一)

    转载自:https://www.cnblogs.com/starhu/p/5599773.html tomcat中server.xml配置详解 Tomcat Server的结构图如下:(该文件描述了如 ...

  3. eclipse配置tomcat后修改server.xml文件(如编码等)无效问题

    我们用eclipse配置好tomcat后,在处理中文乱码或是配置数据源时,我们要修改Tomcat下的server.xml等文件. 修改后重启Tomcat服务器时发现xml文件又被还原了. 因为Tomc ...

  4. Tomcat中server.xml配置及Context的配置说明

    server.xml配置简介         下面是这个文件中的基本配置信息,更具体的配置信息见tomcat的文档         server:         port     指定一个端口,这个 ...

  5. Tomcat中server.xml配置详解(2)

    Tomcat中配置文件详解 Server.xml配置文件说明,以及Tomcat组件的说明 Tomcat服务器是由一系列可以配置的组件构成,其中核心组件是Catalina Servlet,它是最顶层组件 ...

  6. tomcat的server.xml配置及context配置直接引用工程

    server.xml配置简介         下面是这个文件中的基本配置信息,更具体的配置信息见tomcat的文档         server:         port     指定一个端口,这个 ...

  7. tomcat中的server.xml文件配置了URIEncoding="UTF-8"需要注意的问题

    1.      get请求传递中文时本地连正式库访问都正常,正式环境下单独访问报错 代码: 请求:project/projectInfo/export/?cks=’项目类型 public String ...

  8. tomcat 的配置文件 server.xml 详解

    server.xml位于$TOMCAT_HOME/conf目录下,作为整个 tomcat 服务器最核心的配置文件,server.xml的每一个元素都对应了 tomcat中的一个组件,通过对xml中元素 ...

  9. Tomcat server.xml配置

    参考文献:http://www.cnblogs.com/xdp-gacl/p/3734395.html 一.Tomcat配置虚拟主机 方法:在conf/server.xml里配置Host元素,其中na ...

随机推荐

  1. Git Learning Part I - Install Git and configure it

    Why we need 'Git' GIt version control: 1. record the history about updating code and deleting code 2 ...

  2. Python 之 基础知识(五)

    一.变量 1.引用 id() 函数传参 与 返回值 都是传递保存的数据的引用 2.可变和不可变类型(变量的引用地址只在赋值语句后变化) 不可变类型 内存中的数据不允许被修改 数字类型 int,bool ...

  3. todo reading

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind https ...

  4. npm一点点

    写在开头 要抓紧学习了,不然要遭... 月底之前有大量东西要学习,干 npm 包管理工具 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编写的命令行程序 ...

  5. 【转】VGG网络结构及参数

     VGG网络  VGG16输入224*224*3的图片,经过的卷积核大小为3x3x3,stride=1,padding=1,pooling为采用2x2的max pooling方式: 1.输入224x2 ...

  6. Nginx+keepalived双机热备(默认路径安装)- 基础篇

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.关于负载均衡介绍,可以参考:linux负载 ...

  7. 找到多个与名为“HOME”的控制器匹配的类型。如果为此请求(“{CONTROLLER}/{ACTION}/{ID}”)提供服务的路由在搜索匹配此请求的控制器时没有指定命名空间,则会发生此情况。如果是这样,请通过调用含有“NAMESPACES”参数的“MAPROUTE”方法的重载来注册此路由。

    public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/ ...

  8. Project Euler 25 1000-digit Fibonacci number

    题意:在斐波那契数列( 1 ,1,2,3,5 ...... )中,第一个有1000位数字的是第几项? 思路:滚动数组 + 大数加法 /********************************* ...

  9. [BZOJ1999] 树网的核 [数据加强版] (树的直径)

    传送门 如果只是想验证算法正确性这里是洛谷数据未加强版 Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenet ...

  10. MYSQL数据库常用的LINUX命令

    此为我工作中常用MYSQL数据库命令 LINUX系统中启动 / 重启MYSQL服务:service mysql start  /  service mysql restart(重启服务) LINUX系 ...