Spring MVC:RequestMapping不起作用,没有识别出URL路径

时间:2011-11-27 13:16:25

标签: java spring model-view-controller

我已经搜索了这个问题,但似乎没有人能像我这样有完全相同的问题。

我正在尝试设置一个简单的Spring MVC应用程序。这些是相关文件:

的web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

...

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

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

    <servlet-mapping>
        <servlet-name>MyApp</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

MyApp的-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans  xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

        <mvc:annotation-driven/>
        <context:component-scan base-package="myapp.gui"/>

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

HomeController.java

@Controller
public class HomeController 
{
    @RequestMapping({"/"})
    public String showHomePage(Map<String,Object> model)
    {
        return "home";
    }
}

我在WEB-INF \ views中有一个home.jsp。问题是我的应用程序没有返回主页。我刚刚得到一个404,虽然Spring找到了我的控制器(日志说明了)但是它给出了错误:没有识别出URL路径。

谁能看到我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用/ app / *作为servlet映射URL和/ home作为RequestMapping。然后尝试使用/ app / home访问它。映射/ *存在某些问题 - 一旦您使用/ app进行其他映射工作 - 我们可以查看删除/ app

答案 1 :(得分:0)

我曾经想用休息URL完成一个spring MVC项目,我也找不到任何真正有用的资源。我确实在我的博客上发了一篇文章,但后来删除了博客。以下是该帖子的摘录:

我正在使用:

  • NetBeans 6.9.1
  • Spring Framework 3.0.2 RELEASE(包括JSTL)
  • JAVA JDK 6
  • GlassFish Server 3
    • 启动新的NetBeans项目
    • 选择Java Web - Web应用程序
    • 点击下一步&gt;
    • 输入项目名称“restMVC”并选择项目位置
    • 点击下一步&gt;
    • 选择GlassFish Server 3 - 选择Java EE 6 Web
    • 点击下一步&gt;
    • 检查Spring Web MVC - 单击“配置”选项卡,将“Dispatcher Name”更改为“restMVC”,将Dispatcher Mapping更改为“/”
    • 点击完成
  1. 打开restMVC-servlet.xml - 我们希望让servlet在特定包中的类中搜索@Controller注释,为此我们需要插入一个上下文:component-scan into文件,这意味着我们还需要添加schemeLocation,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="
    
      http://www.springframework.org/schema/beans
    
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    <context:component-scan base-package="restMVC.web"/>
    ...
    

    当然,我们还没有创建包,所以让我们这样做。

    • 右键点击“源包”
    • 转到新
    • 单击Java Package
    • 输入包名称restMVC.web
  2. 现在我们可以创建第一个控制器 -

    • 右键单击新的restMVC.web包
    • 转到新
    • 单击Java类
    • 输入班级名称myController
  3. 接下来添加@Controller注释,然后右键单击 - 修复导入:

    package restMVC.web;
    import org.springframework.stereotype.Controller;
    
    @Controller
    public class myController {
    }
    
  4. 现在我们可以添加一些请求映射URI,记住我们现在有许多不同的选项可以使用@RequestMapping注释进行映射,所以一定要查看Spring Docs。

    package restMVC.web;
    
    import java.util.ArrayList;
    import java.util.List;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class myController {
        @RequestMapping("/test")
        public String getTests(Model model) {
            List tests = new ArrayList();
            tests.add("<a href=\"test/1\">test 1</a>");
            tests.add("<a href=\"test/2\">test 2</a>");
            model.addAttribute("tests", tests);
            return "tests";
        }
        @RequestMapping("/test/{testId}")
        public String getTest(@PathVariable String testId, Model model) {
            List tests = new ArrayList();
            tests.add("test " + testId);
            model.addAttribute("tests", tests);
            return "tests";
        }
    }
    
  5. 我们需要为tests.jsp创建一个视图。这是通过获取从getTestsgetTest方法(“测试”)返回的字符串并使用restMVC-servlet.xml追加.jsp中的viewResolver创建的 - 更多信息来吧。

    • 右键单击(项目视图)restMVC - &gt;网页 - &gt; WEB-INF - &gt; jsp文件夹
    • 点击新建
    • 点击JSP ..
    • 输入文件名“tests”
  6. 修改tests.jsp。在页面顶部输入以下内容:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    然后在body元素中:

    <table>
      <c:forEach var="test" items="${tests}">
        <tr>
          <td>${test}</td>
        </tr>
      </c:forEach>
    </table>
    
  7. 最后,我们需要确保viewResolver位于restMVC-servlet.xml。完整的文件应如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="
      http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">
      <context:component-scan base-package="restMVC.web"/>
      <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver"
        p:prefix="/WEB-INF/jsp/"
        p:suffix=".jsp" />
    </beans>
    
  8. 您可能需要修改redirect.jsp,以便重定向到/test

  9. 现在点击“运行主项目”