现有页面上的HTTP 404错误nohandlerfound - 未找到映射

时间:2014-05-23 13:22:23

标签: spring jsp spring-mvc http-status-code-404

错误:

 org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/WEB-INF/jsp/summary/homePage.jsp] in DispatcherServlet with name 'spring'

的web.xml

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

我的页面存在于该目录中,如果url模式设置为<url-pattern>/ANYSTRING/*</url-pattern>,我的页面工作正常。详细说明:我的控制器使用@RequestMapping(value = "/home")。当网址格式为/potato/*并且我导航到localhost:8080/potato/home时,我的网页工作正常。但如果我保持相同的设置,网址格式为/*,则会给我404。

尝试:

  1. 使用jsp servlet映射到我的pages目录,但它会导致其他映射问题。
  2. <mvc:default-servlet-handler/>添加到spring-servlet,但这会显示我的页面的来源。
  3. 将网址格式更改为<url-pattern>/</url-pattern>,但会导致其他映射问题。
  4. 有人能解释一下我的问题吗?我正在编辑,因为我尝试了不同的可能解决方案。

2 个答案:

答案 0 :(得分:1)

尝试使用<url-pattern>*.jsp</url-pattern>模式。

您可以为同一个servlet定义多个url-pattern。

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/abc/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/abc/xyz/*</url-pattern>
</servlet-mapping>

您可以帮助您理解url-pattern

Servlet匹配程序

请求可以匹配给定上下文中的多个servlet映射。 servlet容器使用简单的匹配过程来确定最佳匹配。

匹配程序有四个简单的规则。

  • 首先,容器优先于通配符路径匹配精确路径匹配

  • 其次,容器更喜欢匹配最长模式

  • 第三,容器首选路径匹配文件类型匹配。

  • 最后,模式<url-pattern>/</url-pattern>始终匹配任何其他模式不匹配的请求。


有关详细说明,请查看我的帖子How does a servlets filter identify next destination is another filter or a servlet/jsp?

解决问题:

添加此映射以直接处理jsp页面(web.xml):

  <servlet-mapping>
     <servlet-name>jsp</servlet-name>
     <url-pattern>/WEB-INF/jsp/*</url-pattern>
 </servlet-mapping>

添加此项以使项目中的其余资源可访问(spring-servlet.xml):

<mvc:resources mapping="/assets/**" location="/assets/"/>

答案 1 :(得分:0)

你的控制器RequestMapping?

“/ *”使你的servlet拦截所有类型的请求映射,所以如果没有相应的方法,它将找不到正确的方法并给出“无映射”。

这是因为WEB-INF中的文件无法公开访问。

我建议你在url-pattern中使用一些后缀,比如“.do”。