gpt4 book ai didi

java - 有效 web.xml 中缺少 web-fragment.xml 中的元素

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:27 36 4
gpt4 key购买 nike

在我们的项目中,我们使用网络片段来定义一些 servlet,因此这些工件可以轻松地用于其他项目。

现在奇怪的是我们有一个 web-fragment.xml,但是它的一些内容没有被添加到有效的 web.xml 中。

举例:

有效的 web.xml 中存在以下配置:

<filter>
<filter-name>superUserAutomaticLogon</filter-name>
<filter-class>nl.caiw.cool.util.filters.SuperUserAutomaticLogonFilter</filter-class>
<async-supported>false</async-supported>
</filter>

但以下不是:

<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/toolbox/modules/*</url-pattern>
</filter-mapping>

我们已经尝试了几种方法,但我们无法弄清楚。希望这里有人能指引我们正确的方向。

提前致谢。

最佳答案

Strange thing now is that we have a web-fragment.xml, but some of its contents doesn't get added to the effective web.xml.

首先,web-fragment.xml 不会物理包含在主 web.xml 中。所以当你说它没有被添加到有效的 web.xml 时,我觉得你可能在那里出错了。

Web 片段允许组件在运行时将自己注册到主 web.xml。您会发现这种情况发生的唯一证据是实际尝试使用该组件。

我用网络片段尝试了一个简单的 hello-world 示例,并使其正常工作。为此,我将 Tomcat 7 与 Servlet 3.0 webapp 结合使用。

我在 WEB-INF 中的主要 web.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>hello-world</display-name>

<absolute-ordering>
<name>filters</name>
</absolute-ordering>
</web-app>

我发现我们注册 web-fragment.xml 的唯一方法是遵守以下规则:

  1. 必须命名为web-fragment.xml
  2. 必须放在WEB-INF/lib中的JAR文件中
  3. web-fragment.xml 必须存在于 JAR 文件的 META-INF 目录中。

我的 web-fragment.xml 看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<web-fragment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd" id="WebAppFragment_ID" version="3.0">
<name>filters</name>
<filter>
<filter-name>interceptor</filter-name>
<filter-class>com.adarshr.Interceptor</filter-class>
</filter>
<filter-mapping>
<filter-name>interceptor</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-fragment>

通过上面的最小设置,我能够触发 Interceptor 过滤器,尽管它被放置在 web-fragment.xml 中。

最后,这是我的目录结构(使用 http://www.adarshr.com/treegen 生成)

+- hello-world
|
+- WEB-INF
|
+- lib
| |
| |- my-library.jar
|
|- web.xml

JAR 文件 my-library.jar 具有以下结构:

+- my-library.jar
|
+- META-INF
|
|- web-fragment.xml

一些引用资料:

关于java - 有效 web.xml 中缺少 web-fragment.xml 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10993236/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com