【问题标题】:RequestMapping for controllers for different servlets不同 servlet 的控制器的 RequestMapping
【发布时间】:2010-10-27 06:06:44
【问题描述】:

我的 spring 控制器/请求映射结构有问题。在 web.xml 中,我定义了 2 个调度程序 servlet,它们映射了以下请求路径:

  1. Servlet:/pathA/*
  2. Servlet /pathB/*

我所有的控制器都定义在 com.myproject.controllers 包中,因此这两个控制器都为 /pathA/* 和 /pathB/* 下的路径提供服务。 我正在我的两个 servlet 中进行组件扫描。如何为以下 Controller 设置 ReuestMapping 注解:

@Controller
public class MyController {

  // /pathA
  public void action1() {
  }

  // /pathA/action2
  public void action2() {
  }
}

我真的很困惑,我尝试了很多不同的东西,希望你能帮助我!

真诚地, 海因里希

【问题讨论】:

    标签: java spring spring-mvc


    【解决方案1】:

    如果您确实需要使用多个DispatcherServlet,也许最好的方法是将它们的控制器放在单独的包中,并将每个servlet的组件扫描限制在自己的包中。

    如果由于某种原因你不能这样做,你可以按如下方式配置你的 servlet:

    <bean class = "org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name = "alwaysUseFullPath" value = "true" />
    </bean>
    

    在这种情况下,您可以使用 @RequestMapping 中的 servlet 路径,如 stas 所示。

    【讨论】:

    • 啊!这正是我一直在寻找的。我已经在 SimpleurlhandlerMapping 中看到了这个 alwaysUseFullPath 属性,但不知道它也可以按所示使用。
    【解决方案2】:

    像这样尝试 smt

     @RequestMapping(method = RequestMethod.GET, value = "/pathA")
     @RequestMapping(method = RequestMethod.GET, value = "/pathA/bla-bla")
    

    如果它没有帮助的话,还有一些 urlrewriters 的变体。

    【讨论】:

    • 好的,用 requestPath "/*" 将我所有的 servlet 合并成一个可能会有所帮助吗?所以我可以给出你提到的路径,它应该可以工作,不是吗?
    • 目前有 5 个,但其中 4 个是 Spring Dispatcher Servlet。我不确定这在 Spring 中是否是一个好习惯?更多的。或者更少,他们只是 sudivide 请求路径空间
    • @Heinrich:试试看这个forum.springsource.org/showthread.php?t=10366,有几个dispatcher servlet有一些优点。另外,我认为这不是一个好习惯,但这只是我的恕我直言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2016-02-21
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    相关资源
    最近更新 更多