JavaWeb-Tomcat阀
2021-02-20 03:31
标签:ons Servle 参考 顺序 loader def 查看 必须 关联 过滤器实在 阀可以加入到3种容器中: 所有的阀都实现了 其中最重要的是 根据该阀门的要求执行请求处理。 单个Valve可以按指定顺序执行以下操作: 检查或修改指定的请求和响应的属性。 检查指定 检查指定的请求和响应的属性,包装这两个对象中的一个或两个,以补充其功能,然后将其传递。 如果未生成相应的 检查但不修改最终响应的属性(该响应是由随后调用的 阀门绝对不能做以下任何事情: 这里所列的 内置阀有很多,不过常用的也就几种,具体参考官网,这里给出的是 常用内置阀: 若要使得阀门生效,需要将其放在合适的位置上.不同的位置代表不同的作用域.根据作用范围从大到小排列: 最常见的是第3种情况,可以根据项目需要自定义阀. 其次是第2种情况,比如默认开启的客户访问日志阀(``AccessLogValve`)就定义在这个位置. 第1种不太常用,不过视情况而定. 自定义阀需要满足几个条件: 默认开启了访问日志阀,为什么确始终看不见相应的日志文件? 刚开始接触 JavaWeb-Tomcat阀 标签:ons Servle 参考 顺序 loader def 查看 必须 关联 原文地址:https://www.cnblogs.com/yw0219/p/12683302.html前言
Filter
的功能之一就是预处理客户请求,而Tomcat
阀是对Catalina
容器接收到的HTTP
请求进行预处理.Servlet
规范中提出来的,因此适用于所有的Servlet
容器,而Tomcat
阀是Tomcat
转悠的,不能用于Tomcat
以外的其他Servlet
容器.简介
/
和
.org.apache.catalina.Valve
,它有如下几个方法: public Valve getNext();
public void setNext(Valve valve);
public void backgroundProcess();
public void invoke(Request request, Response response)
throws IOException, ServletException;
public boolean isAsyncSupported();
invoke()
,它的官方JavaDoc
描述如下:
Request
的属性,完全生成相应的Response
,并将控制权返回给调用者。Response
(并且未返回控件),请通过执行getNext()
。invoke()
来调用管道中的下一个Valve
(如果存在):getNext().invoke(request, response);
Valve
或Container
创建的)。
getNext()
。invoke()
方法返回后,修改Response
包含的HTTP
标头。getNext()
。invoke()
方法返回后,对与指定的Response
关联的输出流执行任何操作。属性
的基本表示形式是:其他属性
根据具体的Valve
实现类而定,它定义了哪些成员变量这里就可以对应设置属性,不过都是简单类型,比如字符串或数字等.内置阀
9.0
版本链接,不同版本在URL
中替换即可.
server.xml/
中,会生成访问日志,位置在$CATALINA_HOME/logs
文件夹下位置
server.xml
的Engine
元素下server.xml
的
元素下context
中,关于context
的位置不唯一的情况,这里推荐$project_base_dir/src/main/META-INF/context.xml
,具体原因见JavaWeb-Tomcat_Context自定义
org.apache.catalina.valves
jar
包放在$CATALINA_HOME/lib
路径下,这两条是由Tomcat
的ClassLoader
决定的.否则会报错ClassNotFoundException
.org.apache.catalina.Valve
接口,一般是继承org.apache.catalina.valves.ValveBase
类并重写invoke
方法即可.问题记录
Valve
,查看了server.xml
中的确开启了客户访问日志的阀,可是始终看不到logs
目录下出现相应的日志文件,经过研究发现是调用命令的问题,因为我用的是IDEA
中的集成方式启动和部署war
项目到Tomcat
,而这种方式调用的是catalina.sh run
命令,这种模式导致日志被重定向到控制台,所以需要部署后自行调用catalina.sh start
或startup.sh
就可以了.
下一篇:Python基础