首页 文章

使用URI Spring MVC找不到HTTP请求的映射[重复]

提问于
浏览
13

这个问题在这里已有答案:

这是我的Web.xml

dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/servlet-context.xml 1

<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

<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

7 回答

  • 2

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

    @RequestMapping("/")
    
    public String index(org.springframework.ui.Model model) {
    
     return "index";
    
        }
    

    实际上,spring容器在映射方法中查找Model对象 . 如果它找到相同的,它会将返回的String作为视图传递给View解析器 .

    希望这可以帮助 .

  • 1

    通过配置web.xml,您可以了解问题,特别是:

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

    对您的网络应用程序发出的所有请求都将被定向到 DispatcherServlet . 这包括 /tasklist//tasklist/some-thing.html/tasklist/WEB-INF/views/index.jsp 等请求 .

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

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

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

    注意缺少的 * . 这告诉容器任何没有 path info 的请求(末尾没有.xxx的URL)应该发送到 DispatcherServlet . 使用此配置,当收到 xxx.jsp 请求时,不会查询 DispatcherServlet ,并且您的servlet容器的默认servlet将为请求提供服务并按预期显示jsp .

    希望这有帮助,我意识到你之前的评论声明问题已经解决,但解决方案不能只是将 method=RequestMethod.GET 添加到 RequestMethod .

  • 39

    首先检查[PROJECT_NAME] \ target \ classes目录中是否编译了java类 .

    如果不是,您的java类中有一些编译错误 .

  • 0

    我有同样的问题....我改变我的项目名称,我有这个问题...我的解决方案是检查项目重新使用 / 在我的web.xml(而不是 /*

  • 2
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    

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

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

    change to:

    <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>
    
  • 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

相关问题