访问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
时会抛出错误
WARN PageNotFound:1114 - No mapping found for HTTP request with URI [/todolistapp/index.html] in DispatcherServlet with name 'mvc-dispatcher'
这是我的项目布局
答案 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
找到更详细的解释和参考资料