0

Iを拡張するクラスにサーブレット構成がありますServletContainerInitializer。サーブレットを登録し、そこでマッピングを定義します。統合テストで同じ作業をしたくありません。Ijetty テストで構成を再利用する一般的な方法はありますか?

ので、私は持っています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();

重複せずにそれを行うにはどうすればよいですか?

4

1 に答える 1

1

桟橋のライフサイクルにリスナーを追加する必要があります

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 でテスト済み

于 2013-07-26T14:45:00.587 に答える