rest - Jersey/ServletContext 和启动时的资源加载

标签 rest resources jersey servlets

我是使用 Java 进行 Web 开发的新手。
我正在开发一个 Web 服务,我为此选择了 REST/Jersey。

我想在服务启动时初始化一些东西并保留它们
服务的整个生命周期。

第一个问题:Jersey Servlet 的构造函数是做这件事的好地方吗?

基本上,我想做的是加载位于我的 WEB-INF 目录中的 config.ini 文件。
关注 this help , 我知道我需要 Servlet上下文 将我的文件加载为资源。

但是,我不清楚如何获得 Servlet上下文 在 Jersey Servlet 中,因为它实际上不是 servlet 的实例,而是带有一些注释的 POJO。
我想试试this tip ,但构造函数中的属性“context”为空。我认为 Jersey 可能会在构造函数之后填充它。对 ?

那么正确的方法是如何做到这一点的呢?

到目前为止,这是我的代码:

/** Main REST servlet */
@Path("/")
public class Servlet {

    // ---------------------------------------------------- 
    // Constants                     
    // ---------------------------------------------------- 

    static private final String CONFIG_PATH = "/WEB-INF/config.ini";

    // ---------------------------------------------------- 
    // Attributes                     
    // ---------------------------------------------------- 

    /** Context */
    @Context ServletContext context;

    // ---------------------------------------------------- 
    // Constructor                     
    // ---------------------------------------------------- 

    /** Init the servlet */
    public Servlet() {

        // Load config.ini from WEB-INF
        Config.config = new Config(
                this.context.getResourceAsStream(CONFIG_PATH));

        // FAIL! this.context is null ...

    }

    // ---------------------------------------------------- 
    // URI Handlers                    
    // ---------------------------------------------------- 

    /** Welcome page */
    @GET
    @Path("/")
    @Produces(MediaType.TEXT_HTML)
    public String welcome() {
        return "<h1>Hi there.</h1>";
    }
}

任何帮助将非常感激。
提前致谢,

拉斐尔

最佳答案

使用 ContextListener 不是 JAX-RS 执行此操作的方法—— ContextListener 是 servlet API 中的“下一层”。

您可以将带注释的声明放在构造函数参数中,它将传递给构造函数:

public Servlet(@Context ServletContext context) {

正如您所发现的,在构造对象之后,对数据成员使用 @Context 注释会初始化该成员。

另一种方法是将 Config 对象的初始化移动到某种 init 调用中,并且仅在需要时对其进行初始化,即延迟初始化。然后 ServletContext 数据成员将已经由 Jersey 框架设置。

祝你好运!

柯克

关于rest - Jersey/ServletContext 和启动时的资源加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2942584/

相关文章:

java - Jersey 更新实体属性 MessageBodyWriter

java - JAXB/Jersey - Feed 不显示我的嵌套列表 - 知道吗?

java - 将对象转换为 HTTP 请求参数(键/值对)

c# - 资源 (.resx) 文件是否存在任何性能问题或注意事项?

java - 从 eclipse rcp 引用链接资源

java - 将资源放在jar文件中并暴露给网络

rest - 在 jersey 1.8 和 tomcat 7 Resful 和 eclipse 中找不到 404

rest - 使用 Ruby OAuth 连接到 Yahoo Contacts API

rest - Tomcat 不会取消部署 ROOT.war

javascript - 从 JavaScript Web 服务客户端发送 CORS POST 请求返回 http 405 错误