package com.doctor.embeddedjetty; import java.util.concurrent.TimeUnit; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; public class EmbeddedJettyServer { private int port ; private Class<?> springConfiguration = null; private Server server; public EmbeddedJettyServer(Class<?> springConfiguration){ this(8080, springConfiguration); } public EmbeddedJettyServer(int port,Class<?> springConfiguration){ this.port = port; this.springConfiguration = springConfiguration; init(); } public void init(){ server = new Server(port); ServletContextHandler context = new ServletContextHandler(); context.setContextPath("/"); server.setHandler(context); AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext(); webApplicationContext.register(springConfiguration); DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext); context.addServlet(new ServletHolder(dispatcherServlet), "/*"); } public void start() throws Exception{ if (server!= null) { if (server.isStarting() || server.isStarted() || server.isRunning() ) { return; } } TimeUnit.SECONDS.sleep(3); server.start(); } public void stop() throws Exception{ if (server != null) { if (server.isRunning()) { server.stop(); } } } public void join() throws InterruptedException{ if (server!=null) { server.join(); } } }
测试代码:
package com.doctor.embeddedjetty; import static org.junit.Assert.*; import static org.hamcrest.core.IsEqual.*; import org.apache.http.client.fluent.Request; import org.apache.http.client.fluent.Response; import org.junit.Test; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; public class EmbeddedJettyForSpringMvcTest { <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>@Test <span style="white-space:pre"> </span>public void test() throws Throwable{ <span style="white-space:pre"> </span>EmbeddedJettyServer jettyServer = new EmbeddedJettyServer(SpringConfiguration.class); <span style="white-space:pre"> </span>jettyServer.start(); <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>Response response = Request.Get("http://localhost:8080/").execute(); <span style="white-space:pre"> </span>assertThat(response.returnContent().asString(), equalTo("hello")); <span style="white-space:pre"> </span>jettyServer.stop(); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>@Configuration <span style="white-space:pre"> </span>@ComponentScan("com.doctor.embeddedjetty") <span style="white-space:pre"> </span>static class SpringConfiguration{ <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>} }
时间: 2024-10-05 16:47:37