【问题标题】:[grails 3]: Replacement of doWithWebDescriptor on Plugin descriptor?[grails 3]:替换插件描述符上的 doWithWebDescriptor?
【发布时间】:2020-11-07 09:27:22
【问题描述】:

我们正在尝试将现有的 grails 2.5 应用程序迁移到更新版本的 grails。对于该采用策略,首先升级到 grails 3.3.11(3.x 版本中的最新版本),然后迁移到 grails 4。

对于 grails 2.5.6 应用程序中的一项功能,我发现任何地方都没有任何文档记录,或者我可能错过了文档中的那部分!这是关于插件描述符的doWithWebDescriptor。通过这个闭包,我们可以根据一些规则动态更新 web.xml。

升级到 grails 3 后,我发现 doWithWebDescriptor 不起作用。它没有初始化它应该做的任务(就 grails 2.5 而言)。后来发现grails 3.0 documentation之后没有任何文档记录。

如果doWithWebDescriptor 被删除,那么用 grails 3 或最新的 grails 4 版本最合适的替代品是什么?如果它仍然可以正常工作,并且 grails 3 需要进行一些与配置相关的更改,那么请指出那部分。

更新:

我们需要doWithWebDescriptor 的原因是,我们正在尝试添加基于插件的servlet。实际上,我们有几个插件用于应用程序中的不同模块。并非项目中包含所有插件。根据选择的模块,我们正在向应用程序添加插件。因此,如果包含插件,那么我们需要在 web.xml 中添加 servlet 和过滤器。

谢谢。

【问题讨论】:

  • 你还没有描述你需要完成什么。如果你能总结出你想做什么赢doWithWebDescriptor,那么可以就如何实现这一点提出建议。
  • 感谢您的回复。我已经更新了需要doWithWebDescriptor 的问题

标签: grails grails-3.0


【解决方案1】:

我们需要 doWithWebDescriptor 的原因是,我们正在尝试添加 基于插件的servlet。

您可以通过在应用程序上下文中注册 ServletRegistrationBean 来添加 servlet。您可以在插件的doWithSpring 方法或应用程序的resources.groovy 中执行此操作。示例:

Closure doWithSpring() {{->
  myServlet(ServletRegistrationBean, new MyServlet(), "/myServlet/*") {
    loadOnStartup = 2
  }
}}

我们已在http://docs.grails.org/3.3.11/guide/plugins.html#hookingIntoRuntimeConfiguration18.5 Hooking into Runtime Configuration部分记录了这一点。

【讨论】:

  • 它对我有用。谢谢! :) 我必须创建一个过滤器并以相同的方式注册一个 servlet 侦听器,对吧?
  • “我必须以同样的方式创建一个过滤器并注册一个 servlet 侦听器,对吧?” - 对于过滤器,是的。我不知道 servlet 监听器。
  • 找到了。像普通的 Spring Bean 一样注册一个监听器。有一些论坛建议使用 Spring Boot 的ServletListenerRegistrationBean。也尝试过这种方法,但它没有注册监听器。所以像普通的 Spring bean 一样注册它。 memoryCleanListener(MemoryCacheCleanListener)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 2017-12-05
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
相关资源
最近更新 更多