gpt4 book ai didi

java - Spring MVC请求映射冲突

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:30 27 4
gpt4 key购买 nike

我有一个关于类上的@RequestMapping 的问题。假设我有这两个 Controller :

@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 方法 11 调用时,它工作正常,生成的 url 是 http://mydomain/myapp/controller1/method11.do

然后,我调用方法 12 并重定向到 test.jsp,然后从那里调用方法 21,这就是问题所在,生成的 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 EL 在脚本中检索上下文根来让客户端知道正确的 URL。

在 JSP 中

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

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

var url = ctx + "/rest_of_url"

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

${pageContext.request.contextPath}或者 JSTL 有一个标签,<c:url>这将附加您的上下文根。

关于java - Spring MVC请求映射冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16301805/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com