在以往的tomcat使用中本人一直都没有注意到tomcat的conf目录下配置文件的作用,都是“拿来主义”的思想,从未深究。但是最近遇到很多有关tomcat配置的问题,很是头大,所以才稍作整理。

我们可以发现该目录下有web.xml、tomcat-users.xml、server.xml以及context.xml这四个配置文件。首先我们分别来看看这几个配置文件分别有哪些作用。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

web.xml的作用:

    web.xml的文件格式定义在Servlet规范中,因此所有符合Servlet规范的Java Servlet Container都会用到它。当tomcat部署应用程序时(在激活过程中,或加载应用程序后),它都会读取通用的conf/web.xml,然后再读取web应用程序中的WEB-INF/web.xml。(此文件一般不会涉及修改,可以不用过多了解,实话是笔者也不太了解。)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

tomcat-users.xml的作用:

    顾名思义,"uesrs"那肯定是与用户相关的啦。打开之后,我们可以在文件最下面看到一段被注释的代码:

 <!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->

很明显这是配置用户名、密码以及用户的权限的。只要在这段注释的代码后加入一行,就可以实现用户的配置:

 <user username="admin" password="1234" roles="manager-gui"/>

这样我们就成功地添加了用户名为:admin,密码为:1234的管理员用户(manager-gui为管理员角色)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

server.xml的作用:

    在笔者看来server.xml在如今的tomcat版本中主要作用还是处理来自客户端的访问请求的,想要知道server.xml的作用,还是得了解其中各个标签的含义。

    至于各个标签的详细含义,本文就不再指出,有意者请查看笔者专门总结的server.xml作用的文章,就指出server处理一个访问请求的大体流程。

Tomcat Server处理一个http请求的过程

假设来自客户的请求为:http://localhost:8080/macy/index.jsp

1) 请求发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得。

2) Connector把该请求交给它所在Service的Engine来处理,并等待来自Engine的响应。

3) Engine获得请求localhost/macy/index.jsp,匹配它所拥的所虚拟主机Host。

4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认虚拟主机)。

5) localhost Host获得请求/macy/index.jsp,匹配它所拥的所Context。

6) Host匹配到路径为/macy的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)。

7) path="/macy"的Context获得请求/index.jsp,在它的映射表中寻找对应的servlet。

8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类。

9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法。

10)Context把执行完了之后的HttpServletResponse对象返回给Host。

11)Host把HttpServletResponse对象返回给Engine。

12)Engine把HttpServletResponse对象返回给Connector。

13)Connector把HttpServletResponse对象返回给客户端浏览器。

需要指出的是,在tomcat 5.5 之后的版本有关context的配置已经可以不在server.xml中配置,而是在/conf/context.xml中进行独立的配置。原因:因为 server.xml 是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而 context.xml文件则不然, tomcat 服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器 。

然而,官方貌似还是保留了server.xml中配置context的写法,我想这样做的主要原因是相对旧版本的兼容吧。(不推荐在server.xml中配置context)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

context.xml的作用:

    从上文可知,每个<Context元素代表了运行在虚拟主机上的单个Web应用。

 <Context
path="/SmartStore"
reloadable="false"
docBase="D:\SmartStore\workspaceSmartStore\SmartStore\src\main\webapp"
workDir="D:\SmartStore\workspaceSmartStore\SmartStore\work" >
<Logger className="org.apache.catalina.logger.SystemOutLogger" verbosity="4" timestamp="true"/>
</Context>

1、path:即要建立的虚拟目录,,注意是/kaka,它指定访问Web应用的 上下文根,如http://localhost:8080/SmartStore/****
2、docBase:为应用程序的路径或WAR文件存放的路径 ,可以是绝对路径 ,也可是相对路径,相对路径是相对于<Host >(此处的host对应server.xml中的host元素)
3、reloadable:如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改变,如果监视到有class文件被更新,服务器自动重新加载Web应用,这样我们可以在不重起tomcat的情况下改变应用程序。

4、workDir:jsp运行时都要先转换成servlet,使用tomcat时会在tomcat安装目录下的work生成一系列的文件夹和.java文件和.class文件。设置该属性后可改变生成的java和class文件的存储路径。

Tips:一个Host元素中嵌套任意多的Context元素。每个Context的路径必须是惟一的,由path属性定义。另外,你必须定义一个path=“”的context,这个Context称为该虚拟主机的缺省web应用,用来处理那些不能匹配任何Context的Context路径的请求。

context.xml中其他标签:

<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true" privileged="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/kaka.xml</WatchedResource> 监控资源文件,如果web.xml || kaka.xml改变了,则自动重新加载改应用。
<Resource name="jdbc/testSiteds" 表示指定的jndi名称
auth="Container" 表示认证方式,一般为Container
type="javax.sql.DataSource"
maxActive="100" 连接池支持的最大连接数
maxIdle="30" 连接池中最多可空闲maxIdle个连接
maxWait="10000" 连接池中连接用完时,新的请求等待时间,毫秒
username="root" 表示数据库用户名
password="root" 表示数据库用户的密码
driverClassName="com.mysql.jdbc.Driver" 表示JDBC DRIVER
url="jdbc:mysql://localhost:3306/testSite" /> 表示数据库URL地址
</Context>

The last:

context.xml的三个作用范围

  • tomcat server级别:  在/conf/context.xml里配置
  • Host级别:  在/conf/Catalina/${hostName}里添加context.xml,继而进行配置
  • web app 级别:  在/conf/Catalina/${hostName}里添加${webAppName}.xml,继而进行配置

tomcat中有关配置文件的说明的更多相关文章

  1. tomcat 中项目配置文件统一目录设置

    在tomcat 安装目录中 conf 下的  catalina.properties 文件中 有个  shared.loader= 配置为   shared.loader="${catali ...

  2. 关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  3. 【转】关于web项目中的图片上传、并在前端显示问题(tomcat中配置文件上传虚拟路径)

    一.数据库存储 直接把图片的二进制码存到数据库,可参考blog:http://blog.csdn.net/hope2jiang/article/details/590733 直接存图片在mysql上面 ...

  4. Red5 1.0.0RC1 集成到tomcat6.0.35中运行&部署新的red5项目到tomcat中

    1.下载red5-war-1.0-RC1.zip 解压之得到 ROOT.war 文件. 2.处理tomcat. 下载apache-tomcat-6.0.35-windows-x86.zip包,解压到你 ...

  5. Nexus安装及部署(含如何在Tomcat中部署)

    1. Nexus价值 1)方便-节约带宽-快 2)便于统一管理 3)持续集成需要 2.Nexus下载 http://www.sonatype.org/nexus/go 3.Nexus启动 解压后进入\ ...

  6. 如何在tomcat中如何部署java EE项目

    如何在tomcat中如何部署java EE项目 1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法.2.在tomcat安 ...

  7. Java Web开发Tomcat中三种部署项目的方法

    第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加: <Context path="/hello" docBase ...

  8. IntelliJ和tomcat中的目录结构

    IntelliJ和tomcat中的目录结构   IntelliJ的官网帮助中心:http://www.jetbrains.com/idea/webhelp/getting-help.html   pr ...

  9. tomcat安装与配置文件

    一 安装tomcat 1.系统必须已安装配置JDK 安装说明参考地址:http://www.cnblogs.com/Yuanbangchen/p/5945491.html   2.将apache-to ...

随机推荐

  1. /Home/Tpl/Equipment/rangeIndex.html 里调用魔板

    <pre name="code" class="html">demo:/var/www/DEVOPS# vim ./Home/Tpl/Equipme ...

  2. 对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间

    | test100 | CREATE TABLE `test100` ( `sn` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增编号', `phoneNo` ...

  3. find the safest road(floyd)

    Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission ...

  4. 2015第40周一Node学习

    node学习尝试 早上看了张丹大牛博客文章nodeJS学习路线图和node从零入门系列,感觉获益匪浅,尝试了里面几项内容,对node有了更深入的认识. npm npm是一个node包管理和分发工具,已 ...

  5. 生成树的计数(基尔霍夫矩阵):UVAoj 10766 Organising the Organisation SPOJ HIGH - Highways

    HIGH - Highways   In some countries building highways takes a lot of time... Maybe that's because th ...

  6. 字符串(后缀数组):POJ 3415 Common Substrings

    Common Substrings   Description A substring of a string T is defined as: T(i, k)=TiTi+1...Ti+k-1, 1≤ ...

  7. 平衡树(AVL)详解

    1. 为什么平衡树? 在二叉搜索树(BST,Binary Search Tree)中提到,BST树可能会退化成一个链表(整棵树中只有左子树,或者只有右子树),这将大大影响二叉树的性能. 前苏联科学家G ...

  8. Redis sort命令

    http://www.cnblogs.com/linjiqin/archive/2013/06/14/3135921.html 1.添加 投票选项到 redis的  List 和HashMap lis ...

  9. 七牛云- Java 端 使用

    项目 中需要把 图片放到 图片服务器上托管, 所以使用了七牛, 注册之后每个月 有免费100 万 次get请求,先说说怎么使用: 1 .注册, 获取自己的AK,SK

  10. 【protobuf进阶】读取proto实体里的extensionObject对象的方法

    //设置扩展对象 ProtoBuf.Extensible.AppendValue //读取扩展对象 ProtoBuf.Extensible.GetValue 最近通过C#的TcpClient调用jav ...