Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC请求映射冲突_Java_Spring_Spring Mvc_Controller_Mapping - Fatal编程技术网

Java Spring MVC请求映射冲突

Java Spring MVC请求映射冲突,java,spring,spring-mvc,controller,mapping,Java,Spring,Spring Mvc,Controller,Mapping,我对类上的@RequestMapping有一个问题。假设我有两个控制器: @Controller @RequestMapping(value="/controller1") public class Controller1 { @RequestMapping(value="/method11.do") public @ResponseBody method11(){ //... } @RequestMapping(value="/met

我对类上的@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方法11调用时,它工作正常,生成的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>

春天
org.springframework.web.servlet.DispatcherServlet
1.
春天
*.做

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

JSP中的

<script>var ctx = "${pageContext.request.contextPath}"</script>
在服务器端,您可以使用:


${pageContext.request.contextPath}
或JSTL有一个标记,
将附加您的上下文根。

jsp
中,您可以使用
${pageContext.request.contextPath}
。所以
url:'/${pageContext.request.contextPath}/controller2/method21
。谢谢!这很有效。另外,我想问,这是实现这一目标的正确方式,还是有其他更优雅、更方便的方式?可能通过web.xml或SpringServlet。xml@carcaret我不知道有什么更优雅的解决方案,我在博客上使用了这种方法,在不同的环境中上下文根发生了变化。本文讨论与静态资源有关的问题:
var url = ctx + "/rest_of_url"