将servlet映射设置为空字符串时,servlet映射中的<url-pattern>无效

时间:2017-07-31 22:28:15

标签: tomcat7 servlet-3.0

要有一个生成主页内容的主页servlet,我在servlet-mapping中保持url-pattern为空,AFAIK映射到上下文根,比如mysite.com/或http:// {host }:{端口} / mysite的/

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_0.xsd"
     version="3.0">

<display-name>My site</display-name>

<servlet>
  <servlet-name>controller</servlet-name>
  <servlet-class>com.mysite.control.MainController</servlet-class>
  <!-- Load this servlet at server startup time -->
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>controller</servlet-name>
  <url-pattern></url-pattern>
</servlet-mapping>  

以上是完整的web.xml(根元素web-app除外)。 但是Tomcat 7.0.26在启动期间会出现以下错误,因为战争没有部署。

SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/mysite]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
    ...
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern>  in servlet mapping
    at org.apache.catalina.core.StandardContext.addServletMapping(StandardContext.java:3208)
...

注1:这不是一个spring项目,它是纯servlet 3.0项目,目前只有web.xml配置。

注2: com.mysite.control.MainController类确实存在。

我该如何解决这个问题?我知道welcome-file是一个模仿主页的选项,但这不是最佳的,我宁愿修改它。这是tomcat 7.0.26的bug还是其他一些问题?

1 个答案:

答案 0 :(得分:1)

这是Tomcat的一个错误,自7.0.28以来一直在修复。 请参阅this page。所以你应该更新Tomcat。