java - 使用 Guice servlet 路由子路径

标签 java servlets guice delegation guice-servlet

我正在使用 Guice 在我的网络应用程序中路由请求,并且我想模块化我将处理的一些 URL 模式的路由。理想情况下,我希望能够在我的 ServletModule 中执行类似的操作:

delegate("/foo/bar/*").to(SomeOtherServletModule.class);

// in SomeOtherServletModule.configureServlets:
serve("/foo/bar/quux").with(Quux.class);

或者更好:

delegatePrefix("/foo/bar/").to(SomeOtherServletModule.class);

// in SomeOtherServletModule.configureServlets:
serve("/quux").with(Quux.class); // prefix removed

这在 Guice 中可能吗?看来 Guice 确实很努力地使 ServletModules 安装的绑定(bind)成为单例,而该绑定(bind)又由 GuiceServletContextListener 存储在谁知道的地方,以供 GuiceFilter 使用,但是我想取消单例化,这样我就可以像这样委托(delegate),而不是将所有内容紧密绑定(bind)在单个函数中。

最佳答案

我是 Guice Servlet 的创建者。正如您所描述的那样,这基本上是不允许的,因为我们认为这会让不打算以这种方式使用的模块感到困惑。

例如,许多模块提供在“/*”处注册的过滤器,以提供一些拦截功能(例如事务)。如果您自动添加前缀,它们可能会意外停止工作。鉴于 servlet 模块可以传递安装,这并不像对一段代码保持警惕那么简单。另外,使用正则表达式绑定(bind)(例如:/\.html$/),如何处理前缀?我们支持他们吗(难题)?或者我们只是简单地正常注册正则表达式绑定(bind)并为它们设置一个令人惊讶的异常(exception)?

考虑到您所要求的内容可以通过 SomeOtherServletModule("/myprefix") 中知道如何正确映射自身的构造函数轻松实现,因此我们决定不提供此功能。

关于java - 使用 Guice servlet 路由子路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8147106/

相关文章:

java - 递归迷宫遍历算法

java - 在java web应用程序中如何从客户端打印服务器文件

java - Ajax js调用、Httpclient java对服务器的影响

java - 依赖注入(inject)在javafx谷歌果汁中抛出空指针异常

java - 使用 Guice,如何注入(inject)父类(super class)的构造函数参数?

java - 我可以将依赖项注入(inject)不是由 DI 框架创建的对象吗

java - 将字符串转换为 int。如果 String 为空,则将 int 设置为 0

Java 查找和替换字符串的最佳方式?

java - 是否需要将传递依赖项作为 bundle 导入到 KURA

java - 何时使用 session Bean