【问题标题】:Spring MVC request mapping conflictSpring MVC 请求映射冲突
【发布时间】: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


【解决方案1】:

您应该通过使用 JSP EL 检索脚本中的上下文根来让客户端知道正确的 URL。

在 JSP 中

<script>var ctx = "${pageContext.request.contextPath}"</script>

然后您可以使用ctx 作为通过 Javascript 构造的 URL 的前缀。

var url = ctx + "/rest_of_url"

在服务器端,你可以使用:

${pageContext.request.contextPath} 或 JSTL 有一个标签 &lt;c:url&gt;,它将附加您的上下文根。

【讨论】:

  • 谢谢!这工作得很好。另外,我想问一下,这是完成此任务的正确方法,还是有其他更优雅或更方便的方法?也许通过 web.xml 或 spring-servlet.xml
  • @carcaret 我不知道更优雅的解决方案,我在我的博客上使用这种方法,其中上下文根在环境之间发生变化。本文讨论了关于静态资源的问题:sivalabs.in/2011/07/context-root-relative-urls-using.html
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多