springmvc无法调用控制器的方法

时间:2015-06-26 02:39:54

标签: spring spring-mvc web.xml

当我配置springmvc web项目时,我遇到了问题。

以下是我的 web.xml

 <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

我定义了 dispatcher-servlet.xml ,就像这样

<context:component-scan base-package="xxx.controller"

<mvc:annotation-driven />

在包 xxx.controller 中我定义了一个类 TestController

@Controller
@RequestMapping(value="/api")
public class TestController {


    @RequestMapping(value = "/hello")
    @ResponseBody
    public String hello(){
        System.out.println("comming hello");
        return "hello world";
    }

} 

现在,当我启动tomcat,并希望访问 localhost:8080/testproject/api/hello 时,春天通知我

  

[10:10:58 | WARN |(org.springframework.web.servlet.PageNotFound)] = [在DispatcherServlet中找不到带有URI [/ testproject / api / hello]的HTTP请求的映射,其名称为&#39;调度&#39;]

但是如果我将web.xml中的url-pattern修改为

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

可以访问 localhost:8080/testproject/api/hello 。我不知道为什么会这样。我确实想使用 / api / * 而不是 /

有人可以帮我配置控制器路径映射吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

当您定义以下内容时,您告诉您的应用程序在/ api上下文中运行:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/api/*</url-pattern>
</servlet-mapping>

所以要访问你的控制器,URL必须是 localhost:8080 / api / api / hello

只需从您的调度程序中删除/ api,然后您的映射应自动默认为localhost:8080 / api / hello并正常工作。

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

否则,如果您想在/ api上下文中运行应用程序,您可以选择从控制器中删除@RequestMapping(value =&#34; / api&#34;)。 这样它只能识别方法上的映射。