java - 使用 com.sun.net.httpserver.HttpServer 时不会调用 ServletContextListener

标签 java tomcat servlets httpserver

我在集成测试中使用 com.sun.net.httpserver.HttpServer。它完成了它的工作,但我注意到 ServletContextListener 的 方法在测试期间没有被调用。 当我将应用程序部署到真正的 Tomcat 服务器时,我可以看到它的方法被调用。

下面是监听类:

package abc;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class StartupListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        System.out.println("########################################");
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("########################################");
    }
}

下面是我在测试中启动 HttpServer 的方式:

@BeforeClass
public static void startServer() {
    URI uri = UriBuilder.fromUri("http://localhost/").port(8080).build();

    // Create an HTTP server listening at port 8080
    try {
        server = HttpServer.create(new InetSocketAddress(uri.getPort()), 0);
    } catch (IOException e) {
        e.printStackTrace();
        fail();
    }

    // Create a handler wrapping the JAX-RS application
    HttpHandler handler = RuntimeDelegate.getInstance().createEndpoint(new ApplicationConfig(), HttpHandler.class);
    // Map JAX-RS handler to the server root
    server.createContext(uri.getPath(), handler);
    // Start the server
    server.start();
}

Maven 依赖:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

我删除了 @WebListener 并插入了

metadata-complete="false"

<listener>
        <listener-class>abc.StartupListener</listener-class>
</listener>

web.xml 中,但它没有帮助

问题是什么?有什么需要设置的吗?

最佳答案

What is the problem?

HttpServer 不是 servlet 容器,不了解 servlet api。

Is there anything that needs to be setup?

You need to setup a servlet container例如 jetty,它经常用于单元测试基于 Java 的 Web 应用程序。

关于java - 使用 com.sun.net.httpserver.HttpServer 时不会调用 ServletContextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53847095/

相关文章:

java - 使用java控制在html img标签中渲染哪个图像

java - 多态性、转换为对象和类型删除

tomcat - 更改 Tomcat 上的 WebDav 文件夹

java - Apache 与 Tomcat 配置问题

java - 使访问数据库表线程安全的函数的最佳方法?

java - Servlet eclipse 无法识别制表符

java - ajax 中的响应文本 java servlet

java - E : Package 'oracle-java8-installer' has no installation candidate in Docker Ubuntu

java - 使用 IKVM.Net 将 Apache POI .jar 转换为 .dll

java - 如何使用 java poi 读取 ppt 文件中的自动形状