3

我已经配置了 jetty 以使用 jetty maven 运行我的 Web 应用程序。Jetty 应该是开发的轻量级替代品,因此它不需要 web.xml 中的所有内容。更具体地说,我想删除 web.xml 中的过滤器。

我尝试使用 overrideDescriptor 配置属性,但这仅允许我覆盖 web.xml,而不是替换它。因此,过滤器仍然存在。

有什么想法可以在不修改原始 web.xml 文件的情况下删除过滤器吗?

4

3 回答 3

1

由于没有答案,我将发布我的解决方案,这并不完美。

<!-- Jetty configuration -->
<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.1.5.v20120716</version>
    <configuration>
        <webApp>
            <descriptor>src/main/webapp/mock-web.xml</descriptor>
            [...]
        </webApp>
        [...]
    </configuration>
</plugin>

这种方法的缺点是您必须维护两个几乎相同的 web.xml 文件。我还没有找到允许我覆盖原始 web.xml 文件并删除侦听器的解决方案。

于 2012-10-19T09:42:31.150 回答
1

您可以在 override-web.xml 中将过滤器类替换为 PassThroughFilter:

public class PassThroughFilter implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {}
}

<filter>
    <filter-name>OriginalFilter</filter-name>
    <filter-class>mypackage.PassThroughFilter</filter-class>        
</filter>
于 2016-03-28T20:42:33.510 回答
0

一个强大的解决方案是在您的 2 个 XML 实体中使用web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document [
<!ENTITY webEntity1 SYSTEM 'webEntity1.xml'>
<!ENTITY webEntity2 SYSTEM 'webEntity2.xml'>
]>
<web-app>
    &webEntity1;
    &webEntity2;
</web-app>

custom-web.xml一个文件中只有一个:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document [
<!ENTITY webEntity1 SYSTEM 'webEntity1.xml'>
]>
<web-app>
    &webEntity1;
</web-app>

这样,webEntity1.xml您将声明您的共享 servlet、过滤器、映射,并且webEntity2.xml仅在您不想在 Jetty 中使用的过滤器中声明。

然后你会像这样配置码头插件:

    <configuration>
        ...
        <webApp>
            ...
            <descriptor>${project.basedir}/src/main/webapp/WEB-INF/custom-web.xml</descriptor>
        </webApp>
        ...
    </configuration>

我刚刚在我的码头插件 wiki 页面中添加了一个部分。

于 2013-03-12T18:10:24.850 回答