最近我尝试从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>
答案 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上正常运行。如果有人进一步知道为什么会发生这种情况,请告诉我。