Rap*_*vet 8 rest resources servlets jersey
我是使用Java进行Web开发的新手.我正在开发一个Web服务,我选择了REST/Jersey.
我想在启动服务时初始化一些东西,并在服务的整个生命周期中保留它们.
第一个问题:Jersey Servlet 的构造函数是一个好的地方吗?
基本上,我想要做的是加载位于我的WEB-INF目录中的config.ini文件.在这个帮助之后,我理解我需要一个ServletContext来加载我的文件作为资源.
但是,我不清楚如何在Jersey Servlet中获取这个ServletContext,因为它实际上不是servlet的实例,而是带有一些注释的POJO.我想尝试这个技巧,但构造函数中的属性"context"为null.我认为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>";
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.提前致谢,
拉斐尔
小智 9
使用ContextListener不是JAX-RS的方法 - ContextListener是servlet API中的"下一层".
您可以将带注释的声明放在构造函数参数中,然后将其传递给构造函数:
public Servlet(@Context ServletContext context) {
Run Code Online (Sandbox Code Playgroud)
正如您所发现的那样,在构造对象之后,对数据成员使用@Context注释初始化该成员.
另一种方法是将Config对象的初始化移动到某种类型的init调用中,并且只在需要时初始化它,即延迟初始化.然后,ServletContext数据成员已经由Jersey框架设置.
祝好运!
柯克
我不熟悉Jersey,但通常在Java Web应用程序中,我认为正确的做法是创建ContextListener.
上下文侦听器是一个实现接口javax.servlet.ServletContextListener并在web.xml中配置的类.它有一个方法,当应用程序第一次被装入容器时执行,另一个方法在应用程序停止时执行,因此它是放置一些一次性初始化内容和清理之前的理想位置.应用程序已停止.
所以步骤是:
你会在这里找到更多信息:教程
或者在Sun的,呃,Oracle的网站上.
顺便说一句,如果你的文件将在一个JAR文件中,我不确定ServletContext方法是加载它的最佳方法.我认为你最喜欢的事情就像:
this.getClass().getClassLoader().getResourceAsStream("com.company.my.file.properties");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13949 次 |
| 最近记录: |