Web.xml无法正确编译

时间:2018-09-07 09:25:45

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

最近我尝试从java7-java8转换Eclipse,Google Appengine Project,因为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>

2 个答案:

答案 0 :(得分:0)

这是因为路径 /api/add-batch-shelfsurvey 可能在尝试检查所有内容之前已注册 <servlet-mapping> web.xml中的各个部分,如果有的话 @WebServlet批注,然后检查urlPatterns={"..."}

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

答案 1 :(得分:0)

我设法使项目在本地主机上运行,​​并在Google App Engine上上传并运行。不幸的是,我不知道到底是什么问题。 这些是我采取的步骤: -删除了web.xml文件中的/ *。 -在2.5 xsd版本和3.1 xsd版本之间多次更改,每次在localhost上运行项目。 -更改回2.5 xsd,然后全部更改回以/ *

结尾

然后编译项目,并在localhost和appengine上正常运行。如果有人进一步知道为什么会发生这种情况,请告诉我。