这段代码几百年前就已经写了,可一直都没拿出来(给忘了),OK,今就拿出来给各位做参考啊,没准什么时候你也会需要 Jetty Embeded Container
package net.hupoo;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.hupoo.util.HSXBGlobals;
import net.hupoo.util.IdentityUtil;
import net.hupoo.xmpp.WebClientDataForm;
import net.hupoo.xmpp.WebClientMetadata;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.servlet.ServletHandler;
import edu.emory.mathcs.backport.java.util.concurrent.BlockingQueue;
/**
*
* Embeded servlet container for jetty 6.0
*
* @author <a href="zhuaming@gmail.com">Ben </a>
*
*/
public class EmbededContainer implements Runnable
{
private static Log log = LogFactory.getLog(EmbededContainer.class);
private static int port = 80;
private static Map kvMap;
private static Map aiMap;
private static BlockingQueue kvQueue;
static{
HSXBGlobals.setHomeDirectory(System.getProperty("user.dir"));
port = Integer.parseInt(HSXBGlobals.getXMLProperty("httpServerPort"));
}
public EmbededContainer(Map keepAliveMap, BlockingQueue keepAliveQueue, Map agentInviteMap){
this.kvMap = keepAliveMap;
this.kvQueue = keepAliveQueue;
this.aiMap = agentInviteMap;
}
public void run()
{
try{
Server server = new Server();
Connector connector=new SelectChannelConnector();
connector.setPort(port);
server.setConnectors(new Connector[]{connector});
ServletHandler handler=new ServletHandler();
server.setHandler(handler);
handler.addServletWithMapping("net.hupoo.EmbededContainer$KeepAliveServlet", "/webclient/keepalive");
handler.addServletWithMapping("net.hupoo.EmbededContainer$StartTalkServlet", "/webclient/starttalk");
handler.addServletWithMapping("net.hupoo.EmbededContainer$StopTalkServlet", "/webclient/stoptalk");
handler.addServletWithMapping("net.hupoo.EmbededContainer$AssignCidServlet", "/webclient/assigncid");
server.start();
server.join();
}catch(Exception e){
log.error(e);
}
}
private static String handleKeepAlive(WebClientMetadata metadata){
if (!kvMap.containsKey(metadata.getCid())) {
WebClientDataForm wcDataForm = new WebClientDataForm();
wcDataForm.setWebClientMetadata(metadata);
wcDataForm.setStatus(WebClientDataForm.WebStatus.WEB_ONLINE);
kvQueue.offer(wcDataForm);
}
kvMap.put(metadata.getCid(), metadata);
if (aiMap.containsKey(metadata.getCid())){
aiMap.remove(metadata.getCid());
return metadata.getCid();
}
return "OK";
}
private static String handleStartTalk(WebClientMetadata metadata){
WebClientDataForm wcDataForm = new WebClientDataForm();
wcDataForm.setWebClientMetadata(metadata);
wcDataForm.setStatus(WebClientDataForm.WebStatus.WEB_TALKING);
kvQueue.offer(wcDataForm);
return "OK";
}
private static String handleStopTalk(WebClientMetadata metadata){
WebClientDataForm wcDataForm = new WebClientDataForm();
wcDataForm.setWebClientMetadata(metadata);
wcDataForm.setStatus(WebClientDataForm.WebStatus.WEB_ONLINE);
kvQueue.offer(wcDataForm);
return "OK";
}
private static String handleAssignCid(){
return String.valueOf(IdentityUtil.getIdentity());
}
/* ------------------------------------------------------------ */
public static class KeepAliveServlet extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
log.info("KeepAliveServlet ..");
WebClientMetadata metadata = new WebClientMetadata();
metadata.setCid(request.getParameter("cid"));
metadata.setWorkgroupId(request.getParameter("workgroupid"));
metadata.setIp(request.getRemoteHost());
metadata.setDateTime(System.currentTimeMillis());
metadata.setTitle(request.getParameter("title"));
metadata.setLink(request.getParameter("link"));
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(handleKeepAlive(metadata));
}
}
/* ------------------------------------------------------------ */
public static class StartTalkServlet extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doGet(request, response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
log.info("StartTalkServlet");
WebClientMetadata metadata = new WebClientMetadata();
metadata.setCid(request.getParameter("cid"));
metadata.setWorkgroupId(request.getParameter("workgroupid"));
metadata.setIp(request.getRemoteHost());
metadata.setDateTime(System.currentTimeMillis());
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(handleStartTalk(metadata));
}
}
/* ------------------------------------------------------------ */
public static class StopTalkServlet extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
log.info("StopTalkServlet");
WebClientMetadata metadata = new WebClientMetadata();
metadata.setCid(request.getParameter("cid"));
metadata.setWorkgroupId(request.getParameter("workgroupid"));
metadata.setIp(request.getRemoteHost());
metadata.setDateTime(System.currentTimeMillis());
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(handleStopTalk(metadata));
}
}
/* ------------------------------------------------------------ */
public static class AssignCidServlet extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
log.info("AssignCidServlet");
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(handleAssignCid());
}
}
}