【问题标题】:Web.xml not compiling correctlyWeb.xml 未正确编译
【发布时间】:2019-02-12 15:01:45
【问题描述】:

我最近尝试从 java7-java8 转换 Eclipse、Google Appengine 项目,因为 GAE 已停止支持 java7(或将在不久的将来支持)。 在开始转换之前,该项目运行良好。现在尝试在本地运行项目时出现此错误:

    java.lang.IllegalStateException: Multiple servlets map to path: /api/add-batch-shelfsurvey: ApiShelfSurveyBatchServlet,com.imobdev.figjam.ApiShelfSurveyBatchServlet

这是该 servlet 在 web.xml 中的条目:

    <servlet>
        <servlet-name>ApiShelfSurveyBatchServlet</servlet-name>
        <servlet-class>com.imobdev.figjam.ApiShelfSurveyBatchServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ApiShelfSurveyBatchServlet</servlet-name>
        <url-pattern>/api/add-batch-shelfsurvey</url-pattern>
    </servlet-mapping>

这是 web.xml 文件的开始:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

我已经两次和三次检查 /api/add-batch-shelfsurvey 路径在 web.xml 中是唯一的,但我仍然收到此错误。 错误消息中提到的 servlet 发生了变化,但它们都没有到一个路径的多个映射。 我发现这些线程看起来相似但实际上并不相关: https://github.com/dropwizard/dropwizard/issues/2107 https://bugs.eclipse.org/bugs/show_bug.cgi?id=479865

我不知道它是否相关,但这是我的 appengine-web.xml 文件:

    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <threadsafe>true</threadsafe>
        <url-stream-handler>urlfetch</url-stream-handler>
        <system-properties>
            <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
            <property name="appengine.file.encoding" value="US-ASCII"/>
        </system-properties>
        <sessions-enabled>true</sessions-enabled>
        <runtime>java8</runtime>
    </appengine-web-app>

【问题讨论】:

  • 将所有 部分更改为以 '/*' 结尾允许我在我的本地主机上运行项目,但当我尝试部署到 Google App Engine 时仍然失败。

标签: java google-app-engine web.xml


【解决方案1】:

这是因为路径 /api/add-batch-shelfsurvey 在尝试检查所有之前可能已经注册 &lt;servlet-mapping&gt; web.xml 中的部分,如果有的话 @WebServlet 注释然后检查urlPatterns={"..."}

如果您同时有两个定义,应用服务器将不知道哪个是正确的。

【讨论】:

  • 对不起,我忘了说,我已经仔细检查了路径是唯一的。我不认为这是错误。我想知道它是否以某种方式试图读取 web.xml 文件两次?
  • 您是否尝试评论该部分并检查该路径是否有响应或更改路径一秒钟的结果是什么?
  • 好建议,但我确实这样做了,它只是给另一个 servlet 提供了同样的错误(项目中有超过 200 个 servlet)。
  • 如果应用主上下文设置为/,您是否在干净的应用程序服务器上尝试过,因为可能与应用程序的先前实例冲突。尝试将主上下文设置为例如 /a 是否会改变任何内容。
  • 我已经尝试清理服务器上的应用程序以及在 Eclipse 中。我尝试更改应用程序根上下文,仍然出现错误。
【解决方案2】:

我已经设法让项目在 localhost 上运行,并在 Google App Engine 上上传和运行。不幸的是,我不知道到底是什么问题。 这些是我采取的步骤: -从 web.xml 文件中的所有内容中删除 /*。 - 在 2.5 xsd 和 3.1 xsd 版本之间多次更改,每次都在 localhost 上运行项目。 -改回2.5 xsd并全部改回以/*结尾

项目随后在 localhost 和 appengine 上编译并运行良好。如果有人知道更多关于为什么会发生这种情况,请告诉我。

【讨论】:

    猜你喜欢
    • 2018-07-22
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    相关资源
    最近更新 更多