【问题标题】:spring No mapping found for HTTP request with URI errorspring没有为带有URI错误的HTTP请求找到映射
【发布时间】:2014-11-07 19:49:05
【问题描述】:

访问url localhost:8080/todolistapp/index.html时抛出http状态404

2014-11-08 01:09:58 WARN  PageNotFound:1114 - No mapping found for HTTP request with URI [/todolistapp/index.html] in DispatcherServlet with name 'mvc-dispatcher'

这是我的 web.xml

<servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

一个 Spring REST 应用程序,它有 html 文件,在同一个项目中访问 REST API

@Controller
@RequestMapping("/todo")
public class TaskController {
   .................
}

我可以像

一样访问网址
http://localhost:8080/todolistapp/todo/list
http://localhost:8080/todolistapp/todo/delete/2

但是当我尝试访问index.html 时会抛出错误

WARN  PageNotFound:1114 - No mapping found for HTTP request with URI [/todolistapp/index.html] in DispatcherServlet with name 'mvc-dispatcher'

这是我的项目布局

【问题讨论】:

    标签: spring rest spring-mvc


    【解决方案1】:

    在您的 web.xml 更改中

    <servlet-mapping>
       <servlet-name>mvc-dispatcher</servlet-name>
       <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

    <servlet-mapping>
       <servlet-name>mvc-dispatcher</servlet-name>
       <url-pattern>/</url-pattern>
    </servlet-mapping>
    

    【讨论】:

      【解决方案2】:

      在我的 web.xml 我有:

      <servlet-mapping>
          <servlet-name>restServices</servlet-name>
          <url-pattern>/rest/*</url-pattern>
          <url-pattern>/rest</url-pattern>
      </servlet-mapping>
      

      这有助于一些模式匹配(您当然可以省略“/rest”位并拥有:

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

      我注意到您的 @RequestMapping 用于“/todo”,但您的访问权限似乎是“/todolistapp”。

      最后,如果您要从消防软管中喝水,您可以将日志记录设置为 DEBUG 以获取上下文: "org.springframework.web.servlet.mvc"

      【讨论】:

        【解决方案3】:

        如前所述,将DispatcherServlet 映射到/*/ 并不是一回事。当您将其映射到 /* 时,绝对会获取所有 URL,并且您必须告诉 Spring MVC 它必须将哪个 URL 视为静态资源以直接为它们提供服务,而不是寻找 Spring 控制器。

        相反,当您将其映射到 / 时,它具有最后的优先级。

        它还改变了根 URL 的处理方式。

        你会在这个related post找到更详细的解释和参考

        【讨论】:

          猜你喜欢
          • 2011-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多