【发布时间】:2013-04-24 11:40:13
【问题描述】:
我遇到了关于类上的@RequestMapping 的问题。假设我有这两个控制器:
@Controller
@RequestMapping(value="/controller1")
public class Controller1 {
@RequestMapping(value="/method11.do")
public @ResponseBody method11(){
//...
}
@RequestMapping(value="/method12.do")
public ModelAndView method12(){
//This method redirects me to another jsp where I'll call Controller2 methods
return new ModelAndView("test");
}
}
@Controller
@RequestMapping(value="/controller2")
public class Controller2 {
@RequestMapping(value="/method21.do")
public @ResponseBody method21(){
//...
}
}
当我第一次通过AJAX method11调用时,它工作正常,生成的url是http://mydomain/myapp/controller1/method11.do
然后,我调用 method12 并重定向到 test.jsp,然后从那里调用 method21,这就是问题所在,生成的 url 不是预期的http://mydomain/myapp/controller2/method21.do,而是其他的东西,这取决于我如何进行 AJAX 调用:
url:'controller2/method21' --> http://mydomain/myapp/controller1/controller2/method21.do
url:'/controller2/method21' --> http://mydomain/controller2/method21.do
那么,我应该以什么方式拨打电话,以便它们始终以http://mydomain/myapp/... 开头?
我相信我可以只使用url:'/myapp/controller2/method21.do',但我想应该有一种更通用的方式,我不必在每次调用时都使用“myapp”。
这是我的 web.xml:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
【问题讨论】:
-
在
jsp,你可以使用${pageContext.request.contextPath}。所以url:'/${pageContext.request.contextPath}/controller2/method21.
标签: java spring spring-mvc controller mapping