【问题标题】:Get Controller class for request in DispatcherServlet在 DispatcherServlet 中获取请求的控制器类
【发布时间】:2023-03-20 03:55:01
【问题描述】:

我正在尝试将 Spring 和 SpringMVC 放入我们真正的遗留项目中。问题是我们的项目非常大,并且包含大量的专有请求处理。我必须逐步引入它,因为旧的处理程序必须使用旧的基础设施。因此,我必须使用原始的 servlet。将其更改为 DispatcherServlet 没有问题,我必须解决的唯一问题是我需要区分 Controller 类和必须以旧方式处理的类。

我需要获取 DispatcherServlet 将把这个请求分派到的类。是否有可能以某种方式查询 SpringMVC 以获取将用作控制器的 bean?

谢谢

【问题讨论】:

  • 你使用注解来标记控制器吗?
  • 是的,我愿意,但我不想为此进行手动扫描,因为这只是复制另一个将由 Spring DispatcherServlet 本身完成的逻辑。

标签: java spring spring-mvc


【解决方案1】:

我觉得this 线程应该可以帮助你。一旦你得到Controllers 的列表,你就可以用类似的方法检查它的@RequestMapping 参数,用传入的请求的上下文路径检查它的上下文路径,得到请求的控制器。

【讨论】:

  • 我已经找到了这条评论,但这不是我想要的。如果我使用这种方法,则意味着我必须检查所有映射(评估相对路径等),这意味着复制一些已经在 SpringMVC 中某处实现的服务。 Spring 中必须有一些东西已经做到了。
【解决方案2】:

我从来没有在大型应用程序中这样做过,但有几次我确实将现有的基于 servlet 的应用程序迁移到 Spring MVC,我就是这样做的:

  1. 将所有现有请求映射到DispatcherServlet

  2. 创建一个控制器来处理任何请求 url /**。在这个控制器中,将请求处理委托给现有的服务器端组件,如果运气好的话,这将意味着一个或多个 servlet。我将其称为全局控制器。

  3. 最后,你应该有一个应用程序,它有一个代理 DispatcherServlet / 控制器,它基本上使用你的旧代码。

  4. 接下来,我将逐步为要使用 Spring MVC 服务的特定 URL 实现新的控制器/方法。由于您对这些的请求映射 url 将是特定的,因此将调用新的控制器而不是全局控制器。

随着您不断实施新的特定请求映射、控制器和控制器方法,您会到达全局控制器处理的请求很少或没有处理的地步。

希望这能回答你的问题。

【讨论】:

    猜你喜欢
    • 2014-03-15
    • 2019-04-23
    • 2012-12-08
    • 2020-09-07
    • 2011-10-07
    • 2017-05-12
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多