【Tomcat】第一篇:Tomcat目录结构&配置文件解析&三种应用部署方式

到目前,Tomcat已经成为成熟的Servlet容器产品,并作为 JBoss等应用的服务器的内嵌Servlet容器

规范JDK 版本 6.X 7.X 8.X 8.5.X 9.X
JDK 》=5.0 》=6.0 》=7.0 》=7.0 》=8.0
Servlet 2.5 3.0 3.1 3.1 4.0
JSP 2.1 2.2 2.3 2.3 2.3
EL 2.1 2.2 3.0 3.0 3.0
WebSocket N/A 1.1 1.1 1.1 1.1

打开tomcat的解压之后的目录可以看到如下的目录结构:
目录结构
下面就对这些目录中的东西一一进行解析:

1.bin

bin目录中的内容如下图所示:主要用来存放Tomcat的命令,很多环境变量也在此处设置。

注:需要先配置JAVA_HOME环境变量才能启动

  • 以.sh结尾的代表Linux下的命令
    • startup.bat代表windows系统下启动Tomcat的命令;
    • shutdown.bat代表Windows系统下关闭Tomcat的命令。
  • 以.bat结尾的代表Windows下的命令
    • startup.sh代表linux系统下启动Tomcat的命令;
    • shutdown.sh代表linux下关闭Tomcat的命令。

bin目录

2.conf

conf目录

2.1 catalina.policy

权限相关 Permission ,Tomcat是跑在jvm上的,所以有些默认的权限。

2.2 server.xml

配置整个服务器信息。例如修改端口号,添加虚拟主机等;

<Server>
    <Service>(n个)
        <Connector />(n个)
        <Engine>(1个)
               <host>(n个)
                   <Context />(n个)
               </host>
        </Engine>
    </Service>
</Server>
  • <Server>元素

    代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义,包含一个或多个元素。

     <Server port="8005" shutdown="SHUTDOWN">
    
    • port:指定Tomcat监听shutdown命令端口.终止服务器运行时,必须在Tomcat服务器所在的机器上发出shutdown命令.该属性必须设置。
    • shutdown:指定终止Tomcat服务器运行时,发给Tomcat服务器的shutdown监听端口的字符串.该属性必须设置 。
  • <Service>元素

    包含一个元素,以及一个或多个元素,这些元素共享同一个元素

  • <Connector>元素

    接收客户端连接请求,创建Request和Response对象用于和请求端交换数据,然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine,通过配置Connector,可以控制请求Service的协议及端口号。

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
    • port:服务端监听的端口号,即客户请求的端口号;

    • protocol:规定了请求协议;

    • redirectPort:表示当请求是https时,重定向至端口号为8443的Connector;

    • connectionTimeout:表示连接的超时时间,单位毫秒;

    • minSpareThreads:表示Connector最小等待客户请求的线程数,每个请求由一个线程负责,默认10;

      ​ 若初始值设置的大,则在来请求时可以减少线程创建的时间

    • maxThreads:表示此连接器要创建的请求处理线程的最大数量,即可以处理的最大并发请求数,默认200;

      ​ 一般有机器的性能决定

    • maxConnections:表示服务器在任何给定时间接受和处理的最大连接数。当达到这个数字时,客户端请求会被放到请求队列,默认最大队列数为acceptCount参数值,BIO模式下默认为maxThreads,NIO模式下默认10000;

    • acceptCount:maxConnections达到最大值即所有请求线程正在使用时,传入连接请求的最大队列长度, 当队列满时收到的任何请求都将被拒绝, 默认值为100。

    • maxHeaderCount:允许的请求中的最大header数。 包含比指定限制更多的header的请求将被拒绝。 小于0表示无限制,默认值100。

  • <Engine>元素

    Engine组件在Service组件中有且只有一个,Engine是Service组件中的请求处理组件,Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。

    <Engine name="Catalina" defaultHost="localhost">
    
    • name:属性用于日志和错误信息,在整个Server中应该唯一。 一般默认引擎为Catalina(轰炸机)

    • defaultHost:属性指定了默认的host名称,当发往本机的请求指定的host名称不存在时,一律使用defaultHost指定的host进行处理,因此defaultHost的值,必须与Engine中的一个Host组件的name属性值匹配。

  • <Host>元素

    Engine元素至少包含一个或多个Host元素.每个Host元素定义了一个虚拟主机,它可以包含一个或多个Web应用,其中一个Host的name必须与Engine组件的defaultHost属性相匹配。

    <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
    
    • name:虚拟主机的名字。
    • appBase:指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录, 如果此项没有设定,默认值为<CATALINA_HOME>/webapps。
    • unpackWARs:如果此项设为true,表示将把Web应用的war文件先解压为开放目录结构后再运行.如果设为false,将直接运行war文件。
    • autoDeploy:如果此项设为true,表示当Tomcat服务器处于运行状态时,能够监测appBase下的文件,如果有新的Web应用加入进来,会自动发布这个Web应用。

注:另外,在元素中可以包含如下的子元素:<Logger>,<Realm>,<Valve>,<Context>

  • <Context>元素

    每个Context元素代表了运行在虚拟主机上的单个Web应用,一个元素中可以**包含多个**元素。

    <Context path="/sample" docBase="sample" debug="0" reloadable="true"> 
    
    • path:指定访问该Web应用的URL入口。

    • docBase:指定Web应用的文件路径,可以为绝对路径,也可以为相对于Host的appBase属性的相对路径,如果Web应用采用开放目录结构,那就指定Web应用的根目录;如果Web应用是个WAR文件,那就指定WAR文件的路径。

    • reloadable:热部署,如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/class和WEB-INF/lib目录下CLASS文件的改动,如果检测到有calss文件被更新,服务器会自动重新加载Web应用。

2.3 web.xml

  • Tomcat会先加载自身的web.xml,然后再加载每个javaweb项目专属的web.xml(非必须)

  • MIME:文件类型,其实就是Tomcat处理的文件类型。

    这些MIME类型是客户端与服务器之间说明文档类型的,如用户请求一个html网页,那么服务器还会告诉客户端浏览器响应的文档是text/html类型的,这就是一个MIME类型。客户端浏览器通过这个MIME类型就知道如何处理它了。当然是在浏览器中显示这个html文件了。但如果服务器响应的是一个exe文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME就是用来说明文档的内容是什么类型的!

<web-app>    
<display-name></display-name>定义了WEB应用的名字    

<description></description> 声明WEB应用的描述信息    

<context-param></context-param> context-param元素声明应用范围内的初始化参数。    

<filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。    
<filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个
    							servlet或JSP页面相关联。 

<listener></listener>servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话
    				或servlet环境时得到通知.Listener元素指出事件监听程序类。    

--------------------------------------------------------------------------------------------------
<servlet></servlet> 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。   
<servlet-mapping></servlet-mapping> Servlet对应的URL如(http://host/webAppPrefix/servletName)
    							      
<mime-mapping></mime-mapping>如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-
    						mapping元素提供这种保证。
--------------------------------------------------------------------------------------------------
<session-config></session-config> 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。  

<welcome-file-list></welcome-file-list> 服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。  

<error-page></error-page> 在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
    
<taglib></taglib> 对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件
    			的位置,而不用编辑使用这些文件的JSP页面。  

<resource-env-ref></resource-env-ref>声明与资源相关的一个管理对象。 

<resource-ref></resource-ref> 声明一个资源工厂使用的外部资源。

<security-constraint></security-constraint> 制定应该保护的URL。它与login-config元素联合使用   

<login-config></login-config> 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-
    						constraint元素联合使用。  

<security-role></security-role>给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-
    					ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。  

<env-entry></env-entry>声明Web应用的环境项。 

<ejb-ref></ejb-ref>声明一个EJB的主目录的引用。 

<ejb-local-ref></ ejb-local-ref>声明一个EJB的本地主目录的应用。   

</web-app>    

2.4 tomcatusers.xml

存储tomcat用户的文件,这里保存的是tomcat的用户名及密码,以及用户的角色信息。可以按着该文件中的注释信息添加tomcat用户,然后就可以在Tomcat主页中进入Tomcat Manager页面了;

3.lib

存放Tomcat服务器所需要的所有Jar包。

我们在连接数据库时常常烦恼每创建一个项目就要引入一个对应的oracle的Jar包或MySQL的Jar。但是如果你把这两个Jar包放在此目录下,就可以引入一次,以后再创建项目时不需要每次都引入Jar包。

lib目录下的内容如下所示:

lib目录

4.logs

logs目录用来存放tomcat在运行过程中产生的日志文件

  • 非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响)
  • 在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中 ,若tomcat无法启动则可以查看该日志文件
  • 在linux环境中,控制台的输出日志在catalina.out文件中

5.temp

temp目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)

6.webapps

  • tomcat默认部署路径。目录用来存放应用程序,当Tomcat启动时会加载webapps目录下的应用程序。
  • 可以以war包、Jar包、普通文件夹(class字节码文件)三种形式发布应用。
  • 也可以把应用程序存放在电脑磁盘的任意一个位置,但是在配置文件中要配置好,使其映射好。

7.work

  • work目录用来存放tomcat在运行时的编译后文件,一般是JSP编译后的 .java 与编译后的 .class文件。
  • 以把这个目录下的内容删除,再次运行时会生再次生成work目录
  • 清空work目录,然后重启tomcat,可以达到清除缓存的作用。

Tomcat三种应用部署方式

最后,再说一下tomcat的三种应用部署方式

  • 隐式部署(webapp):直接将 web 项目文件(一般是复制生成的war包)复制到tomcat的webapps目录中。
  • 显式部署(server.xml):在tomcat中的conf目录下的server.xml文件中,在节点中添加一个context,具体为:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
        <Context path="/Demo1" docBase="d:/Demo1" reloadable="true"></Context>
</Host>

其中,reloadable是热部署,一般我们会在开发阶段将Reloadable属性设为true,有助于调试servlet和其它的class文件,但是由于这样会增加服务器的运行负荷,损耗系统性能,在项目运行阶段建议将它设为false

  • 显式部署(path.xml)
  1. 在本地tomcat的conf目录中,新建Catalina/localhost目录(这里要注意文件名的大小写)
  2. 在该目录下新建一个xml文件,文件名表示path,如Demo1.xml
  3. 在xml中只用写Context
<Context docBase="d:/Demo1"  reloadable="true"/>

猜你喜欢

转载自blog.csdn.net/weixin_43935927/article/details/108605275