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基础