未找到具有 URI Spring MVC 的 HTTP 请求的映射

这是我的网络.xml

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/servlet-context.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

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

<listener>
    <listener-class>
        org.springframework.web.context.ContextLoaderListener
    </listener-class>
</listener>

我的 servlet-context.xml

<context:component-scan base-package="com.springexample.controller.impl" />
    <mvc:annotation-driven />

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

最后是Handler类,它位于com.springexample.controller.impl下。

@Controller
public class IndexControllerImpl implements IndexController {

    @RequestMapping("/")
    public String index() {

        return "index";
    }
}

然而,去localhost:8080/projectname/

它返回 404 错误。

Jul 27, 2013 8:18:31 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/WEB-INF/views/index.jsp] in DispatcherServlet with name 'dispatcherServlet'
Jul 27, 2013 8:18:37 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/tasklist/index] in DispatcherServlet with name '

这是我的项目结构

Project Structure


答案 1

使用Web.xml以您在问题中的方式进行配置,特别是:

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

对 Web 应用发出的所有请求都将定向到 .这包括类似 、 、 .DispatcherServlet/tasklist//tasklist/some-thing.html/tasklist/WEB-INF/views/index.jsp

因此,当控制器返回指向 的视图时,而不是允许服务器容器为请求提供服务,而是跳入并开始查找可以处理此请求的控制器,它找不到任何,因此..jspDispatcherServlet404

最简单的解决方法是让你的 servlet url 映射,如下所示:

<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

请注意缺少的 .这告诉容器,任何没有 a 的请求(末尾没有 .xxx 的 url)都应发送到 .使用此配置,当收到请求时,不会参考 ,并且您的 servlet 容器的默认 servlet 将为请求提供服务并按预期呈现 jsp。*path infoDispatcherServletxxx.jspDispatcherServlet

希望这有帮助,我意识到您之前的评论指出问题已经解决,但解决方案不能只是添加到.method=RequestMethod.GETRequestMethod


答案 2

我有同样的问题...我更改了我的项目名称,我有这个问题...我的解决方案是检查项目重构并在我的网络中使用.xml(而不是//*)


推荐