View Javadoc

1   package net.sf.crispy.impl;
2   
3   import java.util.Hashtable;
4   import java.util.Iterator;
5   import java.util.Map;
6   
7   import net.sf.crispy.util.Util;
8   
9   import org.apache.commons.logging.Log;
10  import org.apache.commons.logging.LogFactory;
11  import org.mortbay.http.HttpContext;
12  import org.mortbay.http.HttpServer;
13  import org.mortbay.http.handler.ResourceHandler;
14  import org.mortbay.jetty.servlet.ServletHandler;
15  import org.mortbay.jetty.servlet.ServletHolder;
16  import org.mortbay.util.InetAddrPort;
17  
18  /**
19   * This server is to set a web context and add servlets with mapping path.
20   * 
21   * @author Linke
22   *
23   */
24  public class MiniHttpServer implements MiniServer {
25  
26  	protected static final Log log = LogFactory.getLog (MiniHttpServer.class);
27  	
28  	public static final int DEFAULT_PORT = 8123;
29  	
30  	private HttpServer server = null;
31  	private String context = "";
32  	private Map servlets = new Hashtable();
33  	private int id = 0;
34  	private int port = DEFAULT_PORT;
35  	
36  	public MiniHttpServer() {
37  		this(DEFAULT_PORT);
38  	}
39  	
40  	public MiniHttpServer(int pvPort) {
41  		try {
42  			port = pvPort;
43  			server = new HttpServer();
44  			server.addListener(new InetAddrPort(pvPort));
45  		} catch (Exception e) {
46  			if (ServiceManager.DEBUG_MODE_ON) {
47  				e.printStackTrace();
48  			}			
49  		}
50  	}
51  	
52  	public void addService (String pvServiceInterface, String pvServiceObject) {
53  		if (log.isDebugEnabled()) { log.debug("The method addService in the MiniHttpServer class do nothing!"); }
54  	}
55  	
56  	public void setContext(String pvContext) { context = pvContext; }
57  	public String getContext() {
58  		if (context == null) { context = "/"; }
59  		if (!context.startsWith("/")) { context = "/" + context; }
60  		return context; 
61  	}
62  	
63  	public void addServlet(String pvPath, String pvServletClassName) {
64  		servlets.put(pvPath, pvServletClassName);
65  	}
66  
67  	public void addServlet(String pvPath, String pvServletClassName, String pvParam, String pvParamValue) {
68  		String lvStrArray[] = new String[] { pvPath, pvServletClassName, pvParam, pvParamValue };
69  		servlets.put(Integer.toString(++id), lvStrArray);
70  	}
71  	
72  	
73  	public void start() {
74  		try {
75  			if (log.isDebugEnabled()) { log.debug("Context: " + getContext()); }
76  			HttpContext context = server.getContext(getContext());			
77  			context.addHandler(new ResourceHandler());
78  			ServletHandler handler= new ServletHandler();
79  			
80  			Iterator it = servlets.keySet().iterator();
81  			while (it.hasNext()) {
82  				String lvKey = (String) it.next();
83  				Object lvValue = servlets.get(lvKey);
84  				if (lvValue instanceof String) {
85  					if (log.isDebugEnabled()) { log.debug("Path: " + lvKey + " Servlet: " + lvValue); }
86  					handler.addServlet(lvKey, (String) lvValue);
87  				}
88  				else if (lvValue instanceof String[]) {
89  					String lvStrArray[] = (String[]) lvValue;
90  					ServletHolder lvHolder = handler.addServlet(lvStrArray[0], lvStrArray[1]);
91  					lvHolder.setInitParameter(lvStrArray[2], lvStrArray[3]);
92  				}
93  			}
94  			
95  			context.addHandler(handler);
96  			handler.setAutoInitializeServlets(true);
97  			handler.initializeServlets();
98  		
99  			boolean isFree = Util.isPortFree(port);
100 			if (isFree == true) {
101 				server.start();
102 			}
103 			
104 		} catch (Exception e) { 
105 			if (ServiceManager.DEBUG_MODE_ON) {
106 				e.printStackTrace();
107 			}			
108 		}
109 	}
110 
111 	public void stop() {
112 		try { 
113 			server.stop(); 
114 		} catch (Exception e) { 
115 			if (ServiceManager.DEBUG_MODE_ON) {
116 				e.printStackTrace();
117 			}			 
118 		}
119 	}
120 
121 
122 }