当我配置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 / * 而不是 / 。
有人可以帮我配置控制器路径映射吗?非常感谢!
答案 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;)。 这样它只能识别方法上的映射。