gpt4 book ai didi

java - 在 Jetty 测试中重用 ServletContainerInitializer

转载 作者:行者123 更新时间:2023-11-28 21:32:16 25 4
gpt4 key购买 nike

我在 I 类中有我的 servlet 配置,它扩展了 ServletContainerInitializer。我在那里注册 servlet 并定义映射。我不想在我的集成测试中做同样的工作。有没有常见的方法可以在我的 jetty 测试中重用 I 配置?

所以我有

public class I implements ServletContainerInitializer {
public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
Servlet servlet = new MyServlet();
ctx.addServlet("foo", servlet).addMapping("/*");
}
}

和测试一样

    Server server = new Server(0);
Context servletContext = new Context(server, "/", Context.SESSIONS);


Servlet servlet = new MyServlet(); //Duplicated
servletContext.addServlet(new ServletHolder(servlet), "/*"); //Duplicated

server.start();

我怎样才能做到不重复?

最佳答案

需要给jetty的生命周期添加一个监听器

public class JettyStartingListener extends AbstractLifeCycleListener {

private final ServletContext sc;

public JettyStartingListener(ServletContext sc){
this.sc = sc;
}

@Override
public void lifeCycleStarting(LifeCycle event) {
try {
new I().onStartup(new HashSet<Class<?>>(), sc);
} catch (ServletException e) {
throw new RuntimeException(e);
}
}

}

Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.addLifeCycleListener(new JettyStartingListener(context.getServletContext()));
server.start();
server.join();

在 jetty-8.1.5.v20120716 上测试

关于java - 在 Jetty 测试中重用 ServletContainerInitializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com