View Javadoc
1   package com.ziesemer.utils.web;
2   
3   import java.text.DateFormat;
4   import java.text.SimpleDateFormat;
5   import java.util.TimeZone;
6   
7   import org.eclipse.jetty.server.Connector;
8   import org.eclipse.jetty.server.Server;
9   import org.eclipse.jetty.server.nio.AbstractNIOConnector;
10  import org.eclipse.jetty.server.nio.BlockingChannelConnector;
11  import org.eclipse.jetty.servlet.ServletContextHandler;
12  import org.eclipse.jetty.webapp.WebAppContext;
13  
14  /**
15   * @author Mark A. Ziesemer
16   * <a href="http://www.ziesemer.com.">&lt;www.ziesemer.com&gt;</a>
17   */
18  public class ServletTester{
19  	protected final Server server;
20  	protected final AbstractNIOConnector connector;
21  	protected final ServletContextHandler handler;
22  	protected final String baseUrl;
23  	
24  	/**
25  	 * NOT thread-safe.
26  	 */
27  	protected final DateFormat rfc1123DateFormat;
28  	
29  	public ServletTester() throws Exception{
30  		rfc1123DateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
31  		rfc1123DateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
32  		
33  		server = new Server();
34  		// SelectChannelConnector causes intermittent deadlocks.
35  		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=357318
36  		connector = new BlockingChannelConnector();
37  		connector.setHost("127.0.0.1");
38  		server.addConnector(connector);
39  		handler = initHandler();
40  		server.setHandler(handler);
41  		server.start();
42  		baseUrl = "http://localhost:" + connector.getLocalPort() + "/";
43  	}
44  	
45  	protected ServletContextHandler initHandler(){
46  		return new WebAppContext();
47  	}
48  	
49  	public Server getServer(){
50  		return server;
51  	}
52  	
53  	public Connector getConnector(){
54  		return connector;
55  	}
56  	
57  	public ServletContextHandler getHandler(){
58  		return handler;
59  	}
60  	
61  	public String getBaseUrl(){
62  		return baseUrl;
63  	}
64  	
65  	public void close() throws Exception{
66  		server.stop();
67  	}
68  	
69  	/**
70  	 * NOT thread-safe.
71  	 */
72  	public DateFormat getDateFormat(){
73  		return rfc1123DateFormat;
74  	}
75  }