您的位置:首页 > 编程语言 > Java开发

.嵌入式jetty启动spring(java配置方式),junit测试用.标准spring 配置(java config) 嵌入式jetty9启动

2014-12-08 21:37 519 查看
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.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

/**
 * 标准spring 配置(java config) 嵌入式jetty9启动
 * @author doctor
 *
 * @time   2014年12月8日 下午4:07:40
 */
public class EmbeddedJettyServer2 {
	private int port ;
	private Class<?> springRootConfiguration = null;
	private Class<?> springMvcConfiguration = null;
	
	private Server server;
	
	public EmbeddedJettyServer2(Class<?> springRootConfiguration,Class<?> springMvcConfiguration){
		this(8080, springRootConfiguration,springMvcConfiguration);
	}
	public EmbeddedJettyServer2(int port,Class<?> springRootConfiguration,Class<?> springMvcConfiguration){
		this.port = port;
		this.springRootConfiguration = springRootConfiguration;
		this.springMvcConfiguration = springMvcConfiguration;
		init();
	}
	
	public void init(){
		server = new Server(port);
		ServletContextHandler context = new ServletContextHandler();
		context.setContextPath("/");
		server.setHandler(context);
		
		AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
		rootContext.register(this.springRootConfiguration);
		context.addEventListener(new ContextLoaderListener(rootContext));
		
		AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext();
		mvcContext.register(springMvcConfiguration);
		DispatcherServlet dispatcherServlet = new DispatcherServlet(mvcContext);
		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.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.*;

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;

/**
 * 标准spring 配置(java config) 嵌入式jetty9启动 测试
 * 
 * @author doctor
 *
 * @time   2014年12月8日 下午4:06:41
 */
public class EmbeddedJettyServer2Test {

	@Test
	public void test() throws Throwable{
		EmbeddedJettyServer2 embeddedJettyServer = new EmbeddedJettyServer2(SpringRootConfiguration.class, SpringMvcConfiguration.class);
		embeddedJettyServer.start();
		
		Response response = Request.Get("http://localhost:8080/embeddedJettyServer2Test").execute();
		assertThat(response.returnContent().asString(), equalTo("SimpleServiceImpl"));
		embeddedJettyServer.stop();
	}
	
	@Configuration
	@ComponentScan("com.doctor.embeddedjetty")
	public static class SpringRootConfiguration{
		
	}
	
	@Configuration
	@ComponentScan("com.doctor.embeddedjetty")
	public static class SpringMvcConfiguration{
		
	}

}


package com.doctor.embeddedjetty;

public interface SimpleService {
	public String getMessage();
}
package com.doctor.embeddedjetty;

import org.springframework.stereotype.Component;

@Component("simpleService")
public class SimpleServiceImpl implements SimpleService {

	@Override
	public String getMessage() {
		return "SimpleServiceImpl";
	}

}


package com.doctor.embeddedjetty;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SImpleController2 {
	
	@Autowired
	@Qualifier("simpleService")
	private SimpleService simpleService;
	
	@RequestMapping(value="/embeddedJettyServer2Test",method=RequestMethod.GET)
	@ResponseBody
	public String getMessage(){
		return simpleService.getMessage();
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: