13

这是我的 Web.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 '

这是我的项目结构

项目结构

4

7 回答 7

40

随着 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

因此,当您的控制器返回一个指向 a 的视图时.jsp,而不是允许您的服务器容器为请求提供服务,而是DispatcherServlet跳入并开始寻找可以为该请求提供服务的控制器,它找不到任何控制器,因此404.

最简单的解决方法是让您的 servlet url 映射如下:

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

注意丢失的*. 这告诉容器任何没有 .xxx 的请求path info(最后没有 .xxx 的 url)都应该发送到DispatcherServlet. 使用此配置,当xxx.jsp接收到请求时,DispatcherServlet不会咨询,并且您的 servlet 容器的默认 servlet 将为请求提供服务并按预期呈现 jsp。

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

于 2013-07-30T12:17:32.653 回答
2

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

于 2016-01-23T21:36:27.993 回答
1

尝试在 index 方法中传递 Model 对象,它将起作用-

@RequestMapping("/")

public String index(org.springframework.ui.Model model) {

 return "index";

    }

实际上,spring 容器在映射方法中寻找一个 Model 对象。如果发现相同,它将把返回的字符串作为视图传递给视图解析器。

希望这可以帮助。

于 2014-11-01T12:05:16.863 回答
1

首先检查 java 类是否在您的 [PROJECT_NAME]\target\classes 目录中编译。

如果没有,您的 java 类中有一些编译错误。

于 2013-10-23T20:29:55.413 回答
0
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

嘿,请在您的 web.xml 中使用 /(而不是 /*)

于 2015-02-17T19:33:41.403 回答
0

我添加了带有 context.xml 的 META-INF 文件夹包含

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/SpringGradleDemo"/>

SpringGradleDemo 是我的项目名称,它可以工作。我的 servlet 映射是“/”我在这里阅读https://tomcat.apache.org/tomcat-5.5-doc/config/context.html

于 2016-09-10T22:56:26.277 回答
0
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

改成:

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
于 2016-05-13T06:08:52.320 回答