servlet中web.xml配置问题

为什么我的tomcat把servlet的name和class识别成了两个name?

报错:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:192)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more
Caused by: java.lang.IllegalArgumentException: The servlets named [search] and [com.oe.controller.AjaxServlet] are both mapped to the url-pattern [/search] which is not permitted

<?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_4_0.xsd"
         version="4.0">
    <mime-mapping>
        <extension>xls</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>rar</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>doc</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>png</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>txt</extension>
        <mime-type>application/octet-stream</mime-type>
    </mime-mapping>

    <context-param>
        <description>文件上传地址</description>
        <param-name>file-upload</param-name>
        <param-value>
            I:\Output_Estimate\Upload\
        </param-value>
    </context-param>

    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>com.oe.controller.LocationController</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>upload</servlet-name>
        <servlet-class>com.oe.controller.UploadController</servlet-class>
    </servlet>

    <servlet>
        <servlet-name>search</servlet-name>
        <servlet-class>com.oe.controller.AjaxServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>search</servlet-name>
        <url-pattern>/search</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>upload</servlet-name>
        <url-pattern>/upload_params</url-pattern>
    </servlet-mapping>
</web-app>

上面这么多错误,还好有一句能看懂的:are both mapped to the url-pattern。意思是有两个url-parttern映射名称是相同的

  下面贴出解决办法:

  1、web.xml里不同的servlet中<url-pattern/>有相似的。

  2、web.xml中的第一行声明有问题。

  3、Servlet类注释错误,看下面的注释@WebServlet()括号里的内容就是url-pattern,改一下呗,这个是在stackoverflow里找到的解释