找不到带URI的HTTP请求的映射[/WEB-INF/pages/apiForm.jsp]

com*_*tta 92 spring spring-mvc servlet-dispatching

我的处理程序转发到internalresourceview'apiForm',但后来我得到错误404 RequestURI =/WEB-INF/pages/apiForm.jsp.我确定apiForm.jsp位于/ WEB-INF/pages /

13:45:02034 DEBUG [org.springframework.web.servlet.view.JstlView] -转发到资源[/WEB-INF/pages/apiForm.jsp]在InternalResourceView 'apiForm'
13:45:02035 DEBUG [org.springframework .web.servlet.DispatcherServlet] - 名为'testapp2'的DispatcherServlet确定[/WEB-INF/pages/apiForm.jsp]的最后修改值
13:45:02,038 DEBUG [org.springframework.web.servlet.DispatcherServlet] -在getLastModified
13:45:02,038中找不到处理程序DEBUG [org.springframework.web.servlet.DispatcherServlet] - 名为'testapp2'的DispatcherServlet处理请求[/WEB-INF/pages/apiForm.jsp]
13:45:02,038 WARN [org.springframework.web.servlet.PageNotFound] - 在DispatcherServlet中找不到带有URI [/WEB-INF/pages/apiForm.jsp]的HTTP请求的映射,名称为'testapp2'13
:45:02,045 DEBUG [org.springframework. web.servlet.DispatcherServlet] - 已成功完成请求
13:45:02,048 DEBUG [org.springframework.web.servlet.DispatcherServlet] - 已成功完成请求

这就是我的dispatcher.xml的样子..

<bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/pages/"/>
    <property name="suffix" value=".jsp"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

pto*_*mli 155

看起来DispatcherServlet正在尝试处理apiForm.jsp的请求,这表明你的web.xml servlet-mapping正在将对该空间的请求定向到DispatcherServlet.

你可能有这样的东西?

<servlet-mapping>
  <servlet>dispatcher</servlet>
  <url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

尝试使用不同的扩展名调用控制器(例如.do)并更新servlet-mapping以适应

 <servlet-mapping>
  <servlet>dispatcher</servlet>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

  • <url-pattern>/</ url-pattern>仅匹配URL http:// host/servlet/<url-pattern>/*</ url-pattern>匹配http:// host/servlet /下的所有内容,例如as /index.html,/foo.jpg,最重要的是在这种情况下,/ wEB-INF/pages/apiForm.jsp*是通配符,表示"任何东西"在之前的建议中,*.do匹配任何以.do结尾,例如/foo.do,/foo/bar.do.它与以jsp结尾的任何内容都不匹配,因此对/WEB-INF/pages/apiFrom.jsp的请求不匹配,并且不会路由到DispatcherServlet (43认同)
  • 当您将url-pattern设置为/*时,所有请求都将发送到该DispatcherServlet,其中包括JSP呈现请求.虽然事实并非如此,但有时将InternalResourceView(和JstlView派生的内容)视为另一个HTTP请求是有用的,因为这样您就会明白为什么DispatcherServlet会获取JSP的请求. (21认同)
  • 当我设置为/时,请求呈现正常.只有当我设置/*时.什么是不同的/和/*? (2认同)

sou*_*ica 90

是的,我知道我迟到了这个派对,但它可能对其他人有所帮助.

servlet容器根据匹配的最长路径选择映射.因此,您可以将此映射放入JSP中,并通过/*映射选择它.

<servlet-mapping>
  <servlet-name>jsp</servlet-name>
  <url-pattern>/WEB-INF/pages/*</url-pattern>
 </servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

实际上对于Tomcat来说,你需要的只是jsp,它是一个开箱即用的servlet.对于其他容器,您需要找到JSP servlet的名称或添加servlet定义,如:

<servlet>
  <servlet-name>jsp</servlet-name>
  <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
Run Code Online (Sandbox Code Playgroud)

  • 这是完美的,不允许扩展!谢谢, (3认同)
  • 非常感谢写这篇文章,这正是我所寻找的! (2认同)
  • 默认情况下,Jetty在servlet名称"jsp"下也使用Jasper servlet,因此相同的映射可以与Jetty一起使用. (2认同)

Jam*_*hin 17

只需添加<mvc:default-servlet-handler />到DispatcherServlet配置即可完成!


Jun*_*Liu 13

你会收到一个No mapping found for HTTP request with URI错误

如果您扫描错误的包裹

例如,您的控制器在my.package.abc中, 但是您错误地放了

<context:component-scan base-package="my.package.efg*" />

要么

@ComponentScan("my.package.efg*")

从某种意义上说,当请求不仅仅是url,而是找不到整个类时,你的控制器不会被扫描到Web应用程序上下文中!


mot*_*rog 9

我想我读了整个互联网,想弄清楚如何让sitemesh处理我的html路径而没有扩展+没有扩展的API路径.我被一件直夹克包裹着,想出这个,每一个回合似乎都打破了别的东西.然后我终于遇到了这个帖子.

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>

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

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

<servlet-mapping>
    <servlet-name>jsp</servlet-name>
    <url-pattern>/WEB-INF/decorators/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

在dispatcher-servlet.xml中输入

<mvc:default-servlet-handler/>
Run Code Online (Sandbox Code Playgroud)


Ale*_*Zam 9

帮助我的解决方案是:不映射DispatcherServlet/*,映射到/.然后是最终配置:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        ...
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)


小智 8

使用Spring 3.1和Tomcat 7,我得到了下一个错误:

org.springframework.web.servlet.DispatcherServlet noHandlerFound在名为'appServlet'的DispatcherServlet中找不到带有URI [/ baremvc /]的HTTP请求的映射

我需要添加到web.xml下一个配置:

<welcome-file-list>
    <welcome-file/>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)

应用程序工作!


Kar*_*N G 8

可以进行简单的检查.我目前正在使用Spring MVC架构和hibernate.我错过了在类名之上编写@Controller注释.这对我来说是个问题.

@Controller
public class MyClass{
    ...
}
Run Code Online (Sandbox Code Playgroud)

希望这个简单的检查可以解决您的问题.


归档时间:

查看次数:

397114 次

最近记录:

9 年,2 月 前