springmvc无法调用controller的方法
springmvc cannot call controller's method
目前我在配置 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 中我定义了一个 class 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 时,spring 通知我
[10:10:58|WARN |(org.springframework.web.servlet.PageNotFound)]=[No mapping found for HTTP request with URI [/testproject/api/hello] in DispatcherServlet with name 'dispatcher']
但是如果我将 web.xml 中的 url 模式修改为
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
可以访问localhost:8080/testproject/api/hello。我不知道为什么会这样。我确实想使用 /api/* 而不是 /。
谁能帮我配置控制器路径映射?非常感谢!
当您定义以下内容时,您是在告诉您的应用程序在 /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="/api") 。
这样它只识别方法上的映射。
目前我在配置 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 中我定义了一个 class 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 时,spring 通知我
[10:10:58|WARN |(org.springframework.web.servlet.PageNotFound)]=[No mapping found for HTTP request with URI [/testproject/api/hello] in DispatcherServlet with name 'dispatcher']
但是如果我将 web.xml 中的 url 模式修改为
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
可以访问localhost:8080/testproject/api/hello。我不知道为什么会这样。我确实想使用 /api/* 而不是 /。
谁能帮我配置控制器路径映射?非常感谢!
当您定义以下内容时,您是在告诉您的应用程序在 /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="/api") 。 这样它只识别方法上的映射。