使用 com.sun.net.httpserver.HttpServer 时不会调用 ServletContextListener
ServletContextListener isn't invoked when using com.sun.net.httpserver.HttpServer
我在集成测试中使用 com.sun.net.httpserver.HttpServer
。它完成了它的工作,但我注意到 ServletContextListener's
方法在测试期间没有被调用。
当我将应用程序部署到真正的 Tomcat 服务器时,我可以看到它的方法被调用。
下面是监听器class:
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 应用程序的单元测试。
我在集成测试中使用 com.sun.net.httpserver.HttpServer
。它完成了它的工作,但我注意到 ServletContextListener's
方法在测试期间没有被调用。
当我将应用程序部署到真正的 Tomcat 服务器时,我可以看到它的方法被调用。
下面是监听器class:
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 应用程序的单元测试。