tomcat中有关配置文件的说明

在以往的tomcat使用中本人一直都没有注意到tomcat的conf目录下配置文件的做用,都是“拿来主义”的思想,从未深究。可是最近遇到不少有关tomcat配置的问题,非常头大,因此才稍做整理。java

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------web

web.xml的做用:sql

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------apache

tomcat-users.xml的做用:浏览器

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

1 <!--
2   <role rolename="tomcat"/>
3   <role rolename="role1"/>
4   <user username="tomcat" password="tomcat" roles="tomcat"/>
5   <user username="both" password="tomcat" roles="tomcat,role1"/>
6   <user username="role1" password="tomcat" roles="role1"/>
7 -->

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

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

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

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

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应用。

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

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

四、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,继而进行配置
相关文章
相关标签/搜索