spring没有找到带有URI错误的HTTP请求的映射

时间:2014-11-07 19:49:05

标签: spring rest spring-mvc

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

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时会抛出错误

enter image description here

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

这是我的项目布局

enter image description here

3 个答案:

答案 0 :(得分:0)

在你的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>

答案 1 :(得分:0)

在我的web.xml中我有:

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

这有助于一些模式匹配(你当然可以省略&#34; / rest&#34;位并且有:

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

我注意到您的@RequestMapping用于&#34; / todo&#34;但您的访问权似乎是&#34; / todolistapp&#34;。

最后,如果您要使用firehose,您可以将登录设置为DEBUG以获取上下文:   &#34; org.springframework.web.servlet.mvc&#34;

答案 2 :(得分:0)

正如其他人所指出的,将DispatcherServlet映射到/*/并不是一回事。当你将它映射到/*时,绝对需要所有的URL,你必须告诉Spring MVC它必须考虑哪些URL作为静态资源来直接服务它们而不是寻找Spring控制器。

相反,当您将其映射到/时,它会带有最后一个优先级。

它还会更改根URL的处理方式。

您可以在related post

找到更详细的解释和参考资料