尽管我看过很多类似的问题,但没有找到明确的答案。使用Servlet Spec
2.5,是否可以以编程方式添加Servlet过滤器和映射?首选位置在Servlet.init()或ServletContextListener.contextInitialized()中。
不,不是通过标准的Servlet 2.5 API。这是在Servlet 3.0
中引入的。最好的选择是创建一个过滤器并自己重塑责任链模式。一种替代方法是从内部获取容器特定的类,然后通过其API添加过滤器。具体执行方式取决于目标容器(它还会使您的代码紧密耦合到有问题的容器)。
更新: 根据评论的要求,这是一个示例,ServletContextListener
说明如何在Webapp启动期间使用Tomcat
6特定的API以编程方式添加过滤器:
package com.example;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.catalina.Container;
import org.apache.catalina.ServerFactory;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.deploy.FilterDef;
import org.apache.catalina.deploy.FilterMap;
public class Tomcat6FilterConfigurator implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
StandardEngine engine = (StandardEngine) ServerFactory.getServer().findService("Catalina").getContainer();
Container container = engine.findChild(engine.getDefaultHost());
StandardContext context = (StandardContext) container.findChild(event.getServletContext().getContextPath());
FilterDef filter1definition = new FilterDef();
filter1definition.setFilterName(Filter1.class.getSimpleName());
filter1definition.setFilterClass(Filter1.class.getName());
context.addFilterDef(filter1definition);
FilterMap filter1mapping = new FilterMap();
filter1mapping.setFilterName(Filter1.class.getSimpleName());
filter1mapping.addURLPattern("/*");
context.addFilterMap(filter1mapping);
// ...
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// TODO Auto-generated method stub
}
}
在以下位置注册此侦听器web.xml
:
<listener>
<listener-class>com.example.Tomcat6FilterConfigurator</listener-class>
</listener>
再次提醒您,此操作 不适 用于其他品牌/版本的容器,甚至不适用于Tomcat 7.0。
我正在使用SpringDoc,并试图以编程方式向OpenApi添加一个模式,但没有成功。 mySchema的描述没有添加到我在生成的YAML文件中看到的模式列表中,如果我试图引用它:
我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:
问题内容: 我将jetty嵌入到我的应用程序中,并尝试找出如何添加servlet过滤器(用于cookie处理)。Wiki和javadoc的含义不明确,我缺少什么: 我在此找到的唯一信息是一个论坛帖子,建议对此文档进行改进。 问题答案: 更新:对于Jetty版本9.2.2: 原始答案=== 如果您不想使用web.xml,请使用以下命令: 如果确实要使用web.xml而不是addFilter()方法,
AndroidR、 属性。selectableItemBackground存在,但如何通过编程将其添加到ImageButton? 此外,我如何在文档中找到答案?这里提到过,但我看不到任何关于它实际如何使用的解释。实际上,我似乎很少发现文档有用,但我希望这是我的错,而不是文档的错。
在新的 AppCompat 库中,我们可以按以下方式对按钮进行着色: 如何在代码中以编程方式设置按钮的色调?我基本上尝试根据一些用户输入实现按钮的条件着色。
如何根据值以编程方式添加起始目标?例如,如果整数变量为0,则我希望启动导航\u main\u countries\u fragment,否则启动导航\u main\u categories\u fragment。 内部