【问题标题】:Servlet init() method in JAX-RSJAX-RS 中的 Servlet init() 方法
【发布时间】:2017-10-08 09:09:45
【问题描述】:

我正在尝试从我的 web.xml 上的 servlet init-params 中读取一些参数,并通过我的程序中的变量使它们可以访问。我想我可以使用与 HttpServlet 的 init() 方法等效的方法。

这个问题有一个解决方案: init method in jersey jax-rs web service.

我认为第一个解决方案可能对我有用,但问题是 ServletContextEvent 只能访问 context-param 标签中定义的参数,我需要从我自己的 servlet init-params价值观。

我不想将参数从我的 servlet 移动到 context-param 标记中,因为这些参数实际上只与那个特定的 servlet 相关。

有人能指出正确的方向吗?

【问题讨论】:

  • 我很困惑 - 当 JAX-RS 服务不是 servlet 时,为什么你有 servlet 初始化参数?通常一个 servlet 不能访问另一个 servlet 的 init-params。
  • @stdunbar 我说我正在使用 JAX-RS API。我正在使用 jax-rs 的球衣实现。
  • @stdunbar JAX-RS 通常作为 servlet(或 servlet 过滤器)运行

标签: servlets jersey jax-rs jersey-2.0 init


【解决方案1】:

使用 Jersey,所有 init-params 都可以在 Configuration 对象中使用,您几乎可以在任何您想要的地方注入;资源、过滤器等。

@Path("test")
public class SomeResource {

    @Context
    private Configuration configuration;

    @GET
    public String get() {
        return (String) configuration.getProperty(InitParams.MY_INIT_PARAM);
    }
}

另请参阅:

【讨论】:

  • 有什么方法可以在 servlet 启动时获取 InitParams 吗?我只想阅读它们一次,并通过公共变量使它们可以访问。
  • 您可以在 ResourceConfig 子类构造函数中注入配置
  • 我收到警告:检测到未知的 HK2 故障我已经在我的 web.xml 中注册了扩展 ResourcecConfig 的类作为 javax.ws.rs.Application。不知道可能是什么问题。完整日志pastebin.com/RP31S36E
  • 可能还没有。不确定。您可以尝试使用Feature 并获取配置。只需使用featureContext.getConfiguration。请参阅 this post 以获取 Feature 示例(您可以使用 ResourceConfig.register 注册它)。
  • 这似乎有效,虽然我仍然不知道究竟是什么功能,我会研究一下。谢谢。另外,不相关,您为什么引用“通过变量使它们可访问”?我说错了吗?还是有更好的方法来做我的想法?
猜你喜欢
  • 2013-05-24
  • 1970-01-01
  • 2015-01-25
  • 2016-01-22
  • 2016-12-02
  • 1970-01-01
  • 2010-10-05
  • 2017-09-25
  • 2016-05-07
相关资源
最近更新 更多