jetty 9 嵌入应用程序后,小型的web应用直接打成一个单独的jar包,就可以直接运行,非常适合做Demo演示或云端集群部署。
主要代码:
JettyServer的封装类
1 package yjmyzz.jetty.demo.server; 2 3 import org.eclipse.jetty.server.*; 4 import org.eclipse.jetty.server.handler.HandlerCollection; 5 import org.eclipse.jetty.server.handler.RequestLogHandler; 6 import org.eclipse.jetty.server.handler.gzip.GzipHandler; 7 import org.eclipse.jetty.util.thread.QueuedThreadPool; 8 import org.eclipse.jetty.util.thread.ThreadPool; 9 import org.eclipse.jetty.webapp.WebAppContext; 10 import org.slf4j.LoggerFactory; 11 12 import java.io.File; 13 14 public class JettyWebServer { 15 16 private static org.slf4j.Logger logger = LoggerFactory.getLogger(JettyWebServer.class); 17 18 private Server server; 19 private int port; 20 private String host; 21 private String tempDir; 22 private String logDir; 23 private String webDir; 24 private String contextPath; 25 26 27 public JettyWebServer(int port, String host, String tempDir, String webDir, String logDir, String contextPath) { 28 29 logger.info("port:{},host:{},tempDir:{},webDir:{},logDir:{},contextPath:{}", port, host, tempDir, webDir, logDir, contextPath); 30 31 this.port = port; 32 this.host = host; 33 this.tempDir = tempDir; 34 this.webDir = webDir; 35 this.contextPath = contextPath; 36 this.logDir = logDir; 37 } 38 39 public void start() throws Exception { 40 server = new Server(createThreadPool()); 41 server.addConnector(createConnector()); 42 server.setHandler(createHandlers()); 43 server.setStopAtShutdown(true); 44 server.start(); 45 } 46 47 public void join() throws InterruptedException { 48 server.join(); 49 } 50 51 52 private ThreadPool createThreadPool() { 53 QueuedThreadPool threadPool = new QueuedThreadPool(); 54 threadPool.setMinThreads(10); 55 threadPool.setMaxThreads(100); 56 return threadPool; 57 } 58 59 60 private NetworkConnector createConnector() { 61 ServerConnector connector = new ServerConnector(server); 62 connector.setPort(port); 63 connector.setHost(host); 64 return connector; 65 } 66 67 private HandlerCollection createHandlers() { 68 WebAppContext context = new WebAppContext(); 69 context.setContextPath(contextPath); 70 context.setWar(webDir); 71 context.setTempDirectory(new File(tempDir)); 72 73 74 RequestLogHandler logHandler = new RequestLogHandler(); 75 logHandler.setRequestLog(createRequestLog()); 76 GzipHandler gzipHandler = new GzipHandler(); 77 HandlerCollection handlerCollection = new HandlerCollection(); 78 handlerCollection.setHandlers(new Handler[]{context, logHandler, gzipHandler}); 79 return handlerCollection; 80 } 81 82 private RequestLog createRequestLog() { 83 //记录访问日志的处理 84 NCSARequestLog requestLog = new NCSARequestLog(); 85 requestLog.setFilename(logDir + "/yyyy-mm-dd.log"); 86 requestLog.setRetainDays(90); 87 requestLog.setExtended(false); 88 requestLog.setAppend(true); 89 //requestLog.setLogTimeZone("GMT"); 90 requestLog.setLogTimeZone("Asia/Shanghai"); 91 requestLog.setLogDateFormat("yyyy-MM-dd HH:mm:ss SSS"); 92 requestLog.setLogLatency(true); 93 return requestLog; 94 } 95 96 }