我有一个基于 JAX-RS 和 Jersey 的RESTful Web服务。我有一堆GET和POST方法,其中我需要" global"变量
我有一个使用 ServletContextListener 的初始化方法,它有一个contextInitialized-Method用于编写一些日志文件并执行其他操作。在这个方法中,我想声明我可以从我的应用程序中的任何地方访问的变量。
这是我的代码:
@WebListener
public class MyServletContextListener implements ServletContextListener {
//these are the variables I need in my other methods
public String imagePath;
public int entryCount;
public int registeredUsers;
public Connection connection;
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("initialization of service stared");
System.out.println("reading config...");
Configuration config = ConfigManager.readConfig("../service_config.xml");
this.imagePath = config.getImagePath();
System.out.println("try to get databse connection");
connection = ConnectionHelper.getConnection(config.getDbName(),
config.getDbPassword(),
config.getDbUser());
System.out.println("database connection successful established");
// here are some db actions...
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("shutdown service");
}
}
例如: 在init,我读取一个配置文件,从数据库中计算一些统计数据,并从我的配置文件中读取一个目录的图像路径字符串。
当调用GET方法时,我想读取图像路径的String变量并将计数器增加1.
@Path("/entries")
public class EntryService {
@GET
@Path("/images/{imageId}")
@Produces({"image/png"})
public Response getEntryImage(@PathParam("imageId") long imageId) {
String filePath = <* HERE I NEED THE IMAGE PATH FROM INIT *>;
File file = new File(filePath + imageId + ".png");
if (file.exists()) {
Response.ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=image_from_server.png");
return response.build();
} else {
Response.ResponseBuilder response = Response.status(204);
return response.build();
}
}
}
我怎么意识到这一点? (我读了一些关于EJB和Singleton-Annotation的内容,但没有让它工作)。
如果库或组件在我的pom.xml文件中需要一些额外的依赖项,请告诉我如何实现它。