【问题标题】:Spring MVC - No mapping found for HTTP request with URI [duplicate]Spring MVC - 没有找到带有 URI 的 HTTP 请求的映射 [重复]
【发布时间】:2012-10-26 05:20:05
【问题描述】:

我知道有很多关于这个主题的问题,但我在这里找到的解决方案都没有对我有用。 我正在使用带有 Jetty 6 的 Spring,所以我没有 web.xml 文件。 spring dispatcher servlet 的映射在 jetty 的配置中设置为“/”

调度员:

<bean class="org.mortbay.jetty.servlet.ServletHolder">
    <property name="name" value="spring" />
    <property name="servlet">
        <bean class="org.springframework.web.servlet.DispatcherServlet" />
    </property>
    <property name="initParameters">
        <map>
            <entry key="contextConfigLocation" value="classpath:com/project/config/spring-servlet.xml" />
        </map>
    </property>
</bean>

...映射:

<bean class="org.mortbay.jetty.servlet.ServletMapping">
    <property name="servletName" value="spring"></property>
    <property name="pathSpec" value="/"></property>
</bean>

spring-servlet.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="..." ...>


<context:component-scan base-package="com.project.web" />
<mvc:annotation-driven />

<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/pages/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

</beans>

我有一个简单的控制器,叫做 HelloController:

@Controller
public class HelloController {

    @RequestMapping(method = RequestMethod.GET, value="/welcome")
    public String sayHello(ModelMap model){
    model.addAttribute("message", "Spring 3 MVC Hello World");
    return "hello";
}

}

阅读日志似乎可以工作,但我收到以下错误:

在名称为“spring”的 DispatcherServlet 中找不到具有 URI [/WEB-INF/pages/hello.jsp] 的 HTTP 请求的映射

我不明白。它将“/welcome”映射到/WEB-INF/pages/hello.jsp,但它仍然说找不到页面,它似乎就在那里寻找它。我将 WEB-INF 文件夹添加到类路径中,但它仍然相同。你知道这是为什么吗?

【问题讨论】:

  • 您使用的网址是什么?不是http://your-domain/your-app/welcome吗?
  • 您的链接有帮助,谢谢。我将 dispatcherservlet 的映射更改为 /spring/*。现在尝试localhost:25001/spring/welcome 时,我没有收到“找不到映射...”错误,而且映射似乎是正确的。但是,现在日志显示: Forwarding to resource [/WEB-INF/pages/hello.html] in InternalResourceView 'hello' 然后我得到这个: Not Found /WEB-INF/pages/hello.html

标签: spring spring-mvc jetty http-status-code-404 url-mapping


【解决方案1】:

你确定这个包名是正确的吗?

<context:component-scan base-package="com.project.web" />

【讨论】:

  • 嗯,是的,这看起来很奇怪,但我没有注意到。不幸的是,我无法检查它,因为我至少有一段时间无法访问该代码库,但我想它可以解决问题。
【解决方案2】:

控制器中的请求映射路径是相对于您的http://your-domain/your-app/。如果您的应用名称是 welcome,请使用 url http://localhost:25001/welcome/welcome 或将请求映射更改为 @RequestMapping(method = RequestMethod.GET, value="/"),以便您可以使用 url http://localhost:25001/welcome

【讨论】:

  • 好吧,我不确定我是否完全理解它是如何工作的。您能否解释一下这是如何映射的以及当 dispatcherservlet(带有映射“/”)收到请求时会发生什么?这可能会有所帮助。我试过你的建议,我得到了这个:当我尝试localhost:25001/welcome/welcome时,它被映射到/welcome/welcome,当我尝试将requestmapping值从/welcome更改为/时,localhost:25001/welcome被映射到/welcome。我错过了什么吗?
【解决方案3】:

你的hello.jsp是直接在WEB-INF/pages下吗? 您能否将 Dispatcher Servlet 映射更改为此并尝试

<property name="pathSpec" value="*.html"></property>

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多