Tomcat相关知识整理

初识Servlet

  • SUN公司制定了一系列Web应用与Web服务器进行协作的标准Java接口,统称为Java Servlet API,还对Web服务器发布及运行Web应用的一些细节做了规约。SUN公司把这一系列标准Java接口和规约统称为Servlet规范。Servlet就是Web服务器与Web应用进行协作的标准接口。

  • Servlet规范把能够发布和运行JavaWeb应用的Web服务器称为Servlet容器,它的最主要的特征就是动态执行JavaWeb应用中的Servlet实现类中的程序代码。

  • Servlet是一种运行在服务器上的小插件,其最常见的用途是扩展Web服务器的功能,可作为非常安全的、可移植的、易于使用的CGI替代品。具有以下特点:

    • 提供了可被服务器动态加载并执行的程序代码,为来自客户端的请求提供相应的服务;

    • Servlet完全用Java语言编写,因此要求运行Servlet的服务器必须支持Java语言;

    • Servlet完全在服务器端运行,因此它的运行不依赖于浏览器。不管浏览器是否支持Java语言,都能请求访问服务器端的Servlet。


Tomcat

Tomcat作为运行Servlet的容器,其基本功能是负责接收和解析来自客户端的请求,同时把客户端的请求传送给相应的Servlet,并把Servlet的响应结果返回给客户端。

Tomcat组件,分为4类:

  • 顶层类元素:包括<Server>元素和<Service>元素,它们位于整个配置文件的顶层;

  • 连接器类元素:为<Connector>元素,代表介于客户端与服务器端之间的通信接口,负责将客户端的请求发送给服务器端,并将服务器的响应结果返回给客户端;

  • 容器类元素:代表处理客户端请求并生成响应结果的组件,共有四类,分别为<Engine><Host><Context><Cluster>元素。Engine组件为特定的Service组件处理所有客户端请求,Host组件为特定的虚拟主机处理所有的客户端请求,Context组件为特定的Web应用处理所有的客户端请求。Cluster组件负责为Tomcat集群系统进行会话复制、Context组件的属性的复制,以及集群范围内WAR文件的发布。

  • 嵌套类元素:代表可以被嵌入到容器中的组件,如<Valve>元素和<Realm>元素等。

Tomcat元素:

  • <Server>元素:代表整个Servlet容器组件,是Tomcat的顶级元素。在<Server>元素中可包含一个或多个<Service>元素;

  • <Service>元素:包含一个<Engine>元素,以及一个或多个<Connector>元素,这些<Connector>元素共享同一个<Engine>元素;

  • <Connector>元素:代表和客户端实际交互的组件,负责接收客户端请求,以及向客户端返回响应结果;

  • <Engine>元素:每个<Service>元素只能包含一个<Engine>元素。<Engine>元素处理在同一个<Service>中所有<Connector>元素接收到的客户端请求;

  • <Host>元素:在一个<Engine>元素中可以包含多个<Host>元素。每个<Host>元素定义了一个虚拟主机,它可以包含一个或多个Web应用;

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

Tomcat的工作模式:

(1)独立的Servlet容器

Tomcat作为独立的web服务器来单独运行,Servlet容器组件作为web服务器中的一部分存在,这是Tomcat的默认工作模式。 在这种模式下,Tomcat是一个独立进行的Java程序。和运行其他Java程序一样,运行Tomcat需要启动一个Java虚拟机进程,由该进程来运行Tomcat。

stand alone.png

(2)其他web服务器进程内的Servlet容器

在这种模式下,Tomcat分为web服务器插件和Servlet容器插件两部分。web服务器插件在其他web服务器进程的内部地址空间启动一个JVM,Servlet在此JVM中运行。如有客户端发出调用Servlet的请求,web服务器插件获得对此请求的控制并将它转发(JNI通信机制)给Servlet容器组件。

进程内的servlet.png

(3)其他web服务器进程外的Servlet容器

在这种模式下,Tomcat分为web服务器插件和Servlet容器组件两部分。web服务器插件在其他web服务器的外部地址空间启动一个JVM进程,Servlet容器组件再次JVM中运行。如有客户端发出调用Servlet的请求,web服务器插件获得对此请求的控制并将它转发(IPC通信机制)给Servlet容器组件。

当Tomcat作为独立的Servlet容器来运行时,可看做是能运行Java Servlet的独立web服务器。此外,Tomcat还可作为其他web服务器进程内或进程外的Servlet容器,从而与其他web服务器集成,集成的意义在于:对于不支持运行Java Servlet的其web服务器,可通过集成Tomcat来提供运行Servlet的功能。

进程外的servlet.png

Tomcat的目录结构

  • bin:存放启动和关闭Tomcat的脚本文件及所用到的类;

  • conf:存放Tomcat的各种配置文件,其中最重要的配置文件是server.xml

  • logs:存放Tomcat的日志文件;

  • lib:存放Tomcat服务器及所有Web应用都可以访问的jar文件;

  • webapps:Web应用的默认部署目录;

  • work:Tomcat的工作目录,Tomcat在运行时把生成的一些工作文件放于此目录下。在默认情况下,Tomcat把编译JSP而生成的Servlet类文件放于此目录下;

  • tmp:临时文件目录。

NOTE:

  • Tomcat的lib子目录:存放的jar文件不仅能被Tomcat访问,还能被所有在Tomcat中发布的JavaWeb应用访问;

  • JavaWeb应用的lib子目录:存放的jar文件只能被当前JavaWeb应用访问。

NOTE:

Tomcat在加载Web应用时,会把相应的web.xml文件中的数据读入到内存中。

Context元素

主要属性:

  • path:指定访问该Web应用的URL入口,什么都不写表示根路径;

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

  • className:指定实现Context组件的Java类的名字,这个类必须实现org.apache.catalina.Context接口;

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

专有属性:

  • cachingAllowed:如果为true,表示允许启用静态资源的缓存,默认值为true;

  • cacheMaxSize:设定静态资源缓存的最大容量,默认为10m;

  • workDir:指定Web应用的工作目录,Tomcat在运行时会把与这个web应用相关的临时文件放在这个目录下;

  • uppackWar:如果设为true,表示将把Web应用的WAR文件展开为开放目录结构后再运行。如果设为false,则直接运行war文件。默认为true。

Host元素

主要属性

  • name:指定虚拟主机的名字

  • className:指定实现虚拟主机的Java类的名字,这个Java类必须实现org.apache.catalina.Host接口;

  • appBase:指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对路径;

  • autoDeploy:如果设定为true,表示当Tomcat服务器处于运行状态时,能够检测appBase下的文件,如果有新的Web应用加进来,则会自动发布这个Web应用;

  • deployOnStart:如果此项设置为true,则表示当Tomcat启动时会自动发布appBase目录下的所有Web应用。如果web应用没有相应的context元素,那么Tomcat会提供一个默认的context组件。默认值为true。

专有属性:

  • unpackWARS:如果设置为true,表示将把appBase属性指定的目录下的web应用的war文件先展开为开放的目录结构后再运行,如果设置为false,则直接运行war文件;

  • workDir:指定虚拟主机的工作目录,Tomcat在运行时会把与这个虚拟主机的所有web应用相关的临时文件放在此目录下,默认值为<CATALINA_HOME>/work。如果<Host>元素下的一个<Context>元素也设置了workDIR属性,那么<Context>的workDir属性会覆盖<Host>元素的workDir属性;

  • deployXML:如果设置为false,那么Tomcat不会解析web应用中的用于设置context元素的META-INF/context.xml文件。默认值为true。


JavaWeb

SUN的Servlet规范对JavaWeb应用的定义:JavaWeb应用由一组Servlet/JSP、HTML文件、相关Java类,以及其他可以绑定的资源构成,它可以在由各种供应商提供的符合Servlet规范的Servlet容器中运行。

JavaWeb应用包含的内容:

  • Srvlet组件:标准Servlet接口的实现类,运行在服务器端,包含了被Servlet容器动态调用的程序代码。

  • JSP组件:包含Java程序代码的HTML文档,运行在服务器端。当客户端请求JSP文件时,Servlet容器先把它翻译成Servlet类,然后动态调用它的程序代码。

  • 相关的Java类:开发人员自定义的与Web应用相关的Java类。

  • 静态文档:存放在存放在服务器端的文件系统中,如HTML文件、图片文件等。当客户端请求访问这些文件时,Servlet容器先从本地文件系统中读取这些文件的数据,再把它发送到客户端。

  • web.xml文件:JavaWeb应用的配置文件,采用XML格式。该文件必须位于Web应用的WEB-INF目录下。

Servlet规范规定:JavaWeb应用必须采用固定的目录结构,即每种类型的组件在web应用中都有固定的存放目录。

JavaWeb应用的目录结构,以helloapp为例

  • /helloapp:此Web应用的根目录,所有的JSP和HTML文件都存放于此目录或用户自定义的子目录下(WEB-INF子目录除外);

  • /helloapp/WEB-INF:存放此Web应用的配置文件web.xml

  • /helloapp/WEB-INF/classes:存放各种.class文件,Servlet类的.class文件也存放于此目录下;

  • /helloapp/WEB-INF/lib:存放此Web应用所需的各种jar文件;

  • /helloapp/META-INF:当前Webapp的私有资源目录,通常存放自用的context.xml

  • /helloapp/classes:此Webapp的私有类;

  • /helloapp/lib:此Webapp的私有类,被打包为jar格式;

  • /helloapp/index.jsp:此Webapp的主页。

NOTE:在WEB-INF目录的classes及lib子目录下都可以存放类文件。在运行时,Servlet容器的类加载器先加载classes目录下的类,再加载lib目录下的jar文件中的类。


Tomcat阀(Valve)

Tomcat阀能够对Catalina容器接收到的http请求进行预处理。Tomcat阀可以可以加入到3种Catalina容器中,它们是Engine、Host和Context。

Tomcat阀主要包括以下几种:

  • 客户访问日志阀(Access Log Valve)

  • 远程地址过滤器(Remote Address Filter)

  • 远程主机过滤器(Remote Host Filter)

  • 客户请求记录器(Request Dumper)

1.客户访问日志阀

能够将客户端的请求信息写到日志文件中,这些日志文件可以记录网页的访问次数、访问时间、用户的会话活动和用户的安全验证信息等。客户访问日志阀可以加入到Engine、Host或Context容器。

属性:

  • className:指定阀的实现类,此处为org.apache.catalina.valves.AccessLogValve

  • directory:设定存放日志文件的绝对或相对于<CATALINA_HOME>的目录,默认为<CATALINA_HOME>/logs

  • pattern:设定日志的格式和内容;

  • prefix:设定日志文件名前缀,默认为access_log

  • resolveHosts:如果设为true,表示把远程IP地址解析为主机名;如果设为false,表示直接记录远程IP地址,默认为false;

  • suffix:设定日志文件的扩展名,默认为""

pattern属性的可选值:

%a:远程IP地址;
%A:本地IP地址;
%b:发送的字节数,不包括HTTP头部,符号“-”表示发送字节为零;
%B:发送的字节数,不包括HTTP头部;
%h:远程主机名;
%H:客户端请求所用的协议;
%l:远程逻辑用户名(目前总是返回符号“-”);
%m:客户端的请方式;
%p:接收到客户端请求的本地服务器端口;
%q:客户端请求中的查询字符串(Query String),即HTTP请求的第一行的URI部分的“?”后面的内容;
%r:客户端请求的第一行内容(包括请求方式、请求URI及HTTP协议版本);
%s:服务器响应结果中的HTTP状态代码;
%S:用户的额Session ID;
%t:时间和日期;
%u:通过安全认证的远程用户名,符号“-”表示不存在远程用户名;
%U:客户端请求的URL路径;
%v:本地服务器名;

2.远程地址过滤器

可以根据远程客户端的IP地址来决定是否接受客户端的请求。在远程地址过滤器中,事先保存了一份被拒绝的IP地址清单和允许访问的IP地址清单。

属性

  • className:指定阀实现类,此处为org.apache.catalina.valves.AccessLogValve

  • allow:指定允许访问的客户端IP地址,如果没有设定,则表示只要客户端IP地址不在deny清单中,就允许访问,多个IP地址用逗号隔开;

  • deny:指定不允许访问的IP地址;

3.远程主机过滤器

与远程地址多滤器基本上相同,只是一个是基于ip,一个是基于主机名。

4.客户请求记录器

用于把客户端请求的详细信息记录到日志文件,是一个有效的跟踪工具,尤其是当HTTP请求中的Header或Cookie有错误时,它可以跟踪客户请求的详细信息。

原创文章,作者:Jeason,如若转载,请注明出处:http://www.178linux.com/62239

(1)
上一篇 2016-12-05 17:04
下一篇 2016-12-05 17:05

相关推荐

  • Linux 目录结构

    Linux 目录结构 1.     前言     Linux 是一种开源的,且非常流行的操作系统,发行版本众多。为了统一和规范linux系统的主要目录名及其用途,提出了FHS标准,FHS是File Hierarchy Standard的简写。Linu…

    Linux干货 2015-07-26
  • 磁盘分区相关知识

    磁盘分区相关知识 使用磁盘分区的过程设备识别→设备分区→创建文件系统→标记文件系统→在/etc/fstab文件中创建条目→挂载新的文件系统 分区不是必须的,但是分区是必要的:优化I/O性能实现磁盘空间配额限制提高修复速度隔离系统和程序安装多个OS采用不同文件系统 不重启激活新添加的磁盘:echo “- – -” > …

    Linux干货 2017-08-20
  • 马哥教育网络班19期+第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。    主要功能:    网桥是一个局域网与另一个局域网之间建立连接的桥梁,属于数据链路层的一种设备。    集线器是可以将一些机器连接起来组成一个局域网的设备。   &n…

    Linux干货 2016-06-26
  • 如何学好C语言

    有人在酷壳的留言版上询问下面的问题 keep_walker : 今天晚上我看到这篇文章。 http://programmers.stackexchange.com/questions/62502/small-c-projects 我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢! 我相信,这可能是很多朋友的问题,我以前…

    Linux干货 2016-08-15
  • 文本处理工具sed

    处理文本的工具sed     stream EDitor,行编辑器     sed是一种流编辑器,他一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为“模式空间”(pattern space),接着用sed命令处理缓存区中的内容,处理完成后,把缓冲区的内容送往屏幕。…

    Linux干货 2016-08-10
  • 文件的查找作业

    1、查找/var目录下属主为root,且属组为mail的所有文件 2、查找/var目录下不属于root、lp、gdm的、所有文件 3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件 4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件 5、查找/etc目录下大于1M且类型为普通文件的所有文件 6、查找/…

    Linux干货 2016-08-15