我有一个愚蠢的问题。我有一个 java web 应用程序和一个带有 jersey 的 rest 接口。我可以在哪里放置初始化代码块?
例如,我有一个单例,带有一个方法“createInstance”。休息服务器运行时如何执行“createInstance”方法。有没有像“Main()”这样的东西来放置初始化的东西?
我在项目中也有 servlet,但是当用户打开网页时它们正在执行。
我想知道是否存在放置我的初始化代码的地方。
我有一个愚蠢的问题。我有一个 java web 应用程序和一个带有 jersey 的 rest 接口。我可以在哪里放置初始化代码块?
例如,我有一个单例,带有一个方法“createInstance”。休息服务器运行时如何执行“createInstance”方法。有没有像“Main()”这样的东西来放置初始化的东西?
我在项目中也有 servlet,但是当用户打开网页时它们正在执行。
我想知道是否存在放置我的初始化代码的地方。
最后我找到了解决方案:
为了执行初始化代码,我可以创建“ServletContextListener”的实现。
通过这种方式,我这样做:
package foopackage;
...
public class ServletContextClass implements ServletContextListener
{
@Override
public void contextInitialized(ServletContextEvent arg0)
{
...
}
@Override
public void contextDestroyed(ServletContextEvent arg0)
{
...
}
}
要在应用程序服务器初始化后使用此侦听器,必须将其放在 web.xml 中。
<listener>
<listener-class>foopackage.ServletContextClass</listener- class>
</listener>
完全不清楚“初始化对象”是什么意思。我想显而易见的答案是你在需要的地方初始化一个对象。
如果你需要创建一个单例,你可以像使用 Java 中的任何其他单例一样创建它,使用静态文件或枚举;你会在你的一个 REST 方法中得到它的一个实例。例如
@GET
@Produces("application/xml")
public String getData() {
Singleton singleton = Singleton.getInstance();
String result = singleton.domSomething();
return result;
}
如果您想要使您的资源(Web 服务)成为单例,那么您可以通过扩展 javax.ws.rs.core.Application 来实现,然后根据您使用的 JAX-RS 实现和服务器,您可能需要配置您的 web.xml 以使用此应用程序定义初始化您的 REST 服务。此类具有名为的方法getSingletons()
,您可以扩展该方法以提供资源的单例。
休息资源就像任何其他类一样。
您可以使用构造函数来初始化您的对象。