标签:repo apache 状态 info 监听 配置错误 tle jar containe
请求处理过程
StandardHost加载web应用(StandardContext)有两个入口:
Catalina构造Server实例时,在Host元素中增加Context子元素,Context元素将作为Host容器的子容器添加到Host实例中,在Host启动时,由Lifecycle(生命周期管理)接口的start()方法启动(调用子容器的start()方法),配置如下:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context docbase="myApp" path="/myApp" reloadable="true" />
其中:docbase为web应用的根目录,可以是绝对路径,也可以是相对路径(相对于appBase而言)。
path为请求的URL路径
[root@iZzm446eh1ux98Z conf]# curl http://localhost:8080 helloa.world
缺点:每次部署新应用或删除旧应用的时候,都要修改server.xml文件
优点:
a、适用部署固定的web应用,且应用需要分别在不同目录进行管理,不同host,可以配置不同的appBase
b、可以实现Context定制,增加Context安全管理
1、为Host添加一个Valve实现ErrorReportValve,主要用于服务器处理异常时输出错误页
2、调用StandardHost父类ContainerBase的startInternal()方法启动虚拟主机,处理过程分为如下几步:
START_EVENT生命周期事件在启动Host时触发,有三种部署应用的方式(都是热部署):
此方式同server.xml中的<Context>元素,配置文件的存储路径由Host的xmlBase指定,默认是在$CATALINA_BASE/conf/<Engine名>/<Host名>,即$CATALINA_BASE/conf/Catalina/localhost目录。
1、创建文件
[root@iZzm446eh1ux98Z apache-tomcat-8.5.57]# vim conf/Catalina/localhost/myapp.xml <Context> docBase="myapp" path="/myapp" reloadable="false"</Context> <WatchedResource>WEB-INF/web.xml</WatchedResource>
[root@iZzm446eh1ux98Z conf]# mkdir ../webapps/myapp/WEB-INF [root@iZzm446eh1ux98Z conf]# vim ../webapps/myapp/index.html <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Test Page</title> </head> <body> <% out.println("Hello,world."); %> </body> </html>
2、访问测试
(1)扫描Host配置文件基础目录,$CATALINA_BASE/conf/<Engine名>/<Host名>,对该目录下的所有配置文件,由线程池解析完成部署
(2)对于每个文件的部署线程,会做如下操作:
使用Digester解析配置文件,创建Context实例
更新Context实例名称、路径(在不考虑webappVersion的情况下,使用文件名),所以该文件中的Context元素配置的path不生效
为Context添加ContextConfig生命周期监听器
通过Host的addChild()方法将Context实例添加到Host
将Context描述文件、web应用目录及web.xml等添加到守护资源。以便文件发生变更时(使用资源文件的上次修改时间进行判断),重新部署或加载web应用
将所有资源文件(js、css、图片、JSP)、jar包、描述文件的目录复制到Host执行appBase目录下。
注意:Host的deployIgnore属性可以将符合某个正则表达式的web应用目录忽略而不进行部署,如果不指定,则部署所有目录
此方式下,Catalina同样支持使用配置文件实例化Context(默认在web应用的META-INF目录下,文件名context.xml),可以在配置文件中对Context进行定制,但是无法覆盖name、path、webappVersion、docBase这四个属性,这些由web目录的路径及名称确定
(1)对于Host的appBase目录($CATALINA_BASE/webapps)下所有符合条件的目录(不符合deployIgnore的过滤规则,且目录名不为META-INF和WEB-INF),有线程池完成部署
(2)对于每个文件的部署线程,会做如下操作:
如果Host的deployXML属性为true(通过Context描述文件部署),并且存在META-INF/context.xml文件,使用Digester解析配置文件,创建Context实例。如果copyXML为true,则将描述文件复制到$CATALINA_BASE/conf/<Engine名>/<Host名>目录下,文件名与web应用目录名相同
如果Host的deployXML属性为false,并且存在META-INF/context.xml文件,则构造FailedContext实例(Catalina的空模式,部署失败)
其他情况下,根据Host的contextClass属性指定的类型创建Context对象。如果不指定,则为org.apache.catalina.core.StandardContext。
为Context添加ContextConfig生命周期监听器
通过Host的addChild()方法将Context实例添加到Host
测试部署
[root@iZzm446eh1ux98Z myapp]# mkdir /opt/softwares/apache-tomcat-8.5.57/webapps/myapp2/META-INF -p
[root@iZzm446eh1ux98Z myapp]# vim ../myapp2/index.html 1 ~
[root@iZzm446eh1ux98Z myapp]# vim ../myapp2/META-INF/context.xml <Context> docBase="myapp2" path="/myapp2" reloadable="false"</Context>
访问测试
直接将WAR包上传到webapps目录即可。
tomcat定义线程池不生效
如果希望定制工程的错误页面,有两种定义方式:
两种设置方法的区别在于:第一种是当前web应用生效,第二种是整个虚拟主机生效
除非错误页与web应用无关,否则不推荐配置成第二种。还有一个不适用此配置的原因是errorReportValveClass属性定义的错误页会出入服务器细节。不安全。
[root@iZzm446eh1ux98Z webapps]# vim myapp/WEB-INF/web.xml <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1" metadata-complete="true"> <error-page> <error-code>404</error-code> <location>/err4.html</location> ##其中"/" 对应的是Context标签中定义的docBase的位置 </error-page> <error-page> <error-code>500</error-code> <location>/err5.html</location> </error-page> </web-app>
[root@iZzm446eh1ux98Z webapps]# vim myapp/err4.html
Not Found
标签:repo apache 状态 info 监听 配置错误 tle jar containe
原文地址:https://www.cnblogs.com/zh-dream/p/13511041.html