【问题标题】:Tomcat 7: Invalid mapping (java.lang.IllegalArgumentException) [duplicate]Tomcat 7:无效映射(java.lang.IllegalArgumentException)[重复]
【发布时间】:2013-06-29 20:27:05
【问题描述】:

我正在将现有项目从 Tomcat 6 迁移到 7。启动时我遇到了以下记录的错误消息:

Jul 02, 2013 2:38:39 PM org.apache.catalina.startup.ContextConfig parseWebXml
SEVERE: Parse error in application web.xml file at jndi:/localhost/padd/WEB-INF/web.xml
org.xml.sax.SAXParseException; systemId: jndi:/localhost/padd/WEB-INF/web.xml; lineNumber: 309; columnNumber: 21; Error at (309, 21) : The servlets named [ArtefactServlet] and [saveArtefactServlet] are both mapped to the url-pattern [/saveRestoration] which is not permitted
    at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2687)
    ...
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: The servlets named [ArtefactServlet] and [saveArtefactServlet] are both mapped to the url-pattern [/saveRestoration] which is not permitted

这里是 WEB-INF/web.xml 309fff 行:

  <servlet-mapping>
    <servlet-name>saveArtefactServlet</servlet-name>
    <url-pattern>/saveRestoration</url-pattern>
  </servlet-mapping>

编辑:

  <servlet-mapping>
    <servlet-name>ArtefactServlet</servlet-name>
    <url-pattern>/saveRestoration</url-pattern>
  </servlet-mapping>

这里tomcat的web.xml:

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

我尝试使用映射,但没有取得任何进展。希望你能帮忙!

【问题讨论】:

  • saveArtefactServlet/saveRestoration 我认为这是重复的.请检查 web.xml 中是否存在任何同名的事件
  • 在 we.xml 文件中,servlet-name 已多次用于不同的 url-patterns。对于tomcat 6,这没问题,这可能是问题吗?
  • 一个 servlet 到多个映射可以,多个 servlet 到一个映射,不行
  • 您能否显示 'ArtefactServlet' 的 servlet 映射
  • 我已将其添加到问题中

标签: java tomcat servlets tomcat7 web.xml


【解决方案1】:

错误说:

名为 [ArtefactServlet] 和 [saveArtefactServlet] 的 servlet 是 都映射到 url 模式 [/saveRestoration] 不是 允许

所以当你的 url 模式匹配时,tomcat 不知道要调用哪个 servlet。为这两个 servlet ArtefactServlet、saveArtefactServlet

提供不同的 url 模式

【讨论】:

  • 我想这必须在 servlet 本身内进行更改,包括。 web.xml 中的 url 模式 - 正确吗?
  • 您的 ArtefactServlet 定义在哪个文件中?
  • 您是否可以将工件 servlet 的模式更改为其他模式?喜欢 /artifactServet?
  • 我刚刚搜索了代码,但 saveArtefactServlet 似乎不存在。生病推荐它并试一试,谢谢!
  • 编辑:映射指向各种相同的 servlet。这可能是我在 tomcat 7 中不再支持的功能吗?
【解决方案2】:
java.lang.IllegalArgumentException: The servlets named...

我在不同的包(名称='syncro')中创建新的 servlet 时找到了这个原因。我的 servlet 位于 syncro.SynchronizeServlet 当我在部署描述符 (web.xml) 中添加有关此 servlet 的信息时,我发现错误:IllegalArgumentException

不正确的描述符部分示例:

<servlet>
    <description></description>
    <display-name>SynchronizeServlet</display-name>
    <servlet-name>SynchronizeServlet</servlet-name>
    <servlet-class>SynchronizeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SynchronizeServlet</servlet-name>
    <url-pattern>/SynchronizeServlet</url-pattern>
    <url-pattern>/SynServlet</url-pattern>
  </servlet-mapping>

当我为 servlet 添加正确路径时 - 错误消失了。正确描述如下:

<servlet>
    <description></description>
    <display-name>syncro.SynchronizeServlet</display-name>
    <servlet-name>syncro.SynchronizeServlet</servlet-name>
    <servlet-class>syncro.SynchronizeServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>syncro.SynchronizeServlet</servlet-name>
    <url-pattern>/SynchronizeServlet</url-pattern>
    <url-pattern>/SynServlet</url-pattern>
  </servlet-mapping>

==> 73!

【讨论】:

    猜你喜欢
    • 2015-09-13
    • 2013-10-11
    • 2021-06-02
    • 2015-02-24
    • 2013-06-18
    • 2020-04-11
    • 1970-01-01
    • 2011-07-23
    • 2015-10-10
    相关资源
    最近更新 更多