Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注册jersey的上下文侦听器_Java_Servlets_Jersey - Fatal编程技术网

Java 注册jersey的上下文侦听器

Java 注册jersey的上下文侦听器,java,servlets,jersey,Java,Servlets,Jersey,关闭jersey服务器后,我需要执行一些清理步骤。在我看来,通过实现一个。当然,问题是如何将此侦听器添加到应用程序中。我在文件web.xml中看到过这样的例子: <listener> <listener-class>org.SomeCompany.SomePackage.server.MyListener</listener-class> </listener> 问题是,这种方法只适用于作为war文件进行部署。但是,我也将我的软件作为一个独立

关闭jersey服务器后,我需要执行一些清理步骤。在我看来,通过实现一个。当然,问题是如何将此侦听器添加到应用程序中。我在文件
web.xml
中看到过这样的例子:

<listener>
  <listener-class>org.SomeCompany.SomePackage.server.MyListener</listener-class>
</listener>
问题是,这种方法只适用于作为war文件进行部署。但是,我也将我的软件作为一个独立的jar文件提供,它创建了一个Grizzly web服务器来部署servlet:

HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(BASE_URI,
                new MyServerConfig());

MyServerConfig
子类来自并使用各种
register
方法。我也想以编程方式添加侦听器,但调用
register
似乎无法完成这项工作。有没有办法解决这个问题?

首先需要将Grizzly配置为servlet容器。这不是默认行为。您只是在创建一个HTTP服务器。因此,您需要做的第一件事是Grizzly servlet依赖关系

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-servlet</artifactId>
    <version>${jersey2.version}</version>
</dependency>
然后只需调用HttpServer=create(BASE_URI,newservletcontainer(resourceConfig))



另外,对于您的用例(我刚刚重新阅读了问题:-),Jersey也有。您可以编写一个
应用程序EventListener
并侦听destroy事件,并在那里执行所有处理。

我确实选择了一个事件侦听器,它解决了我遇到的问题。但是使用grizzly作为ServletContainer可能也会起作用。。。
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-grizzly2-servlet</artifactId>
    <version>${jersey2.version}</version>
</dependency>
private static HttpServer create(URI u, Servlet servlet) throws IOException {

    String path = u.getPath();
    path = String.format("/%s", UriComponent.decodePath(u.getPath(), true)
                 .get(1).toString());

    WebappContext context = new WebappContext("GrizzlyContext", path);
    context.addListener(MyListener.class);
    ServletRegistration registration;
    registration = context.addServlet(servlet.getClass().getName(), servlet);
    registration.addMapping("/*");

    HttpServer server = GrizzlyHttpServerFactory.createHttpServer(u);
    context.deploy(server);
    return server;
}