jetty 9 嵌入式开发示例

简介: jetty 9 嵌入应用程序后,小型的web应用直接打成一个单独的jar包,就可以直接运行,非常适合做Demo演示或云端集群部署。 主要代码: JettyServer的封装类 1 package yjmyzz.

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 }
View Code

启动代码示例:

  1 package yjmyzz.jetty.demo.main;
  2 
  3 import org.slf4j.Logger;
  4 import org.slf4j.LoggerFactory;
  5 import org.springframework.util.StringUtils;
  6 import yjmyzz.jetty.demo.server.JettyWebServer;
  7 import yjmyzz.jetty.demo.util.FileUtil;
  8 import yjmyzz.jetty.demo.util.JarUtils;
  9 
 10 import java.util.HashMap;
 11 import java.util.Map;
 12 
 13 public class JettyApp {
 14 
 15     private static final String PORT = "port";
 16     private static final String WEB_DIR = "web";
 17     private static final String LOG_DIR = "log";
 18     private static final String TEMP_DIR = "temp";
 19     private static final String CONTEXT_PATH = "context";
 20     private static final String HOST = "host";
 21     private static final Map<String, String> param = new HashMap<>();
 22     private static Logger logger = LoggerFactory.getLogger(JettyWebServer.class);
 23 
 24 
 25     public static void main(String... anArgs) throws Exception {
 26 
 27         if (anArgs.length == 0) {
 28             param.put(PORT, "8080");
 29             param.put(WEB_DIR, "web");
 30             param.put(LOG_DIR, "logs");
 31             param.put(TEMP_DIR, "temp");
 32             param.put(CONTEXT_PATH, "/demo");
 33             param.put(HOST, "localhost");
 34         }
 35 
 36 
 37         for (String arg : anArgs) {
 38             System.out.println(arg);
 39             if (!StringUtils.isEmpty(arg) && arg.contains("=")) {
 40                 String[] t = arg.trim().split("=");
 41                 param.put(t[0], t[1]);
 42             }
 43         }
 44 
 45         initParam();
 46 
 47         unzipSelf();
 48 
 49         new JettyApp().start();
 50     }
 51 
 52 
 53     private static void initParam() {
 54 
 55 
 56         String logDir = FileUtil.currentWorkDir + param.get(LOG_DIR);
 57         String tempDir = FileUtil.currentWorkDir + param.get(TEMP_DIR);
 58         String webDir = FileUtil.currentWorkDir + param.get(WEB_DIR);
 59 
 60         logger.debug(logDir);
 61         logger.debug(tempDir);
 62         logger.debug(webDir);
 63 
 64         String temp = "x.x";//占位
 65         FileUtil.createDirs(logDir + "/" + temp);
 66         FileUtil.createDirs(tempDir + "/" + temp);
 67         FileUtil.createDirs(webDir + "/" + temp);
 68 
 69         param.put(LOG_DIR, logDir);
 70         param.put(TEMP_DIR, tempDir);
 71         param.put(WEB_DIR, webDir);
 72     }
 73 
 74     private JettyWebServer server;
 75 
 76     public JettyApp() {
 77         server = new JettyWebServer(
 78                 Integer.parseInt(param.get(PORT).toString()),
 79                 param.get(HOST),
 80                 param.get(TEMP_DIR),
 81                 param.get(WEB_DIR),
 82                 param.get(LOG_DIR),
 83                 param.get(CONTEXT_PATH));
 84     }
 85 
 86     public void start() throws Exception {
 87         server.start();
 88         server.join();
 89     }
 90 
 91     private static void unzipSelf() {
 92         //将jar自身解压
 93 
 94         String selfPath = FileUtil.getJarExecPath(JettyApp.class);
 95         if (selfPath.endsWith(".jar")) {
 96             // 运行环境
 97             try {
 98                 logger.info("正在将\n" + selfPath + "\n解压至\n" + param.get(WEB_DIR));
 99                 JarUtils.unJar(selfPath, param.get(WEB_DIR));
100             } catch (Exception e) {
101                 logger.error("解压web内容失败!", e);
102             }
103         } else {
104             // IDE环境
105             param.put(WEB_DIR, selfPath);
106         }
107         logger.info(selfPath);
108     }
109 }
View Code

我在github上开源了一个jetty9 + spring mvc4 + velocity2的示例项目,地址:https://github.com/yjmyzz/jetty-embed-demo

目录
相关文章
|
7月前
|
数据安全/隐私保护
jetty嵌入式如何实现https
jetty嵌入式如何实现https
129 1
|
XML Java 数据格式
jetty之嵌入式开发
  一、Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
2985 0
|
Java Maven 开发框架
|
测试技术 Docker 容器
docker下开发,修改环境变量启动jetty
1,本地测试docker程序 遇到问题:docker程序使用系统的环境变量启动的。 在服务器运行的时候是可以的,但是在本地启动的时候就补行了。 因为本地没有配置环境变量。 一种办法直接设置系统的环境变量,但是切换起来比较麻烦。 于是研究下jetty还是有参数可以进行配置的。 http://stackoverflow.com/questions/3231797/sp
1467 0
|
Java Maven
jetty 嵌入式web服务器使用
要说嵌入式运行Jetty,最常用的还应该是运行一个标准的war文件或者指定一个webapp目录。 0. 首先需要添加Jetty运行时webapp的依赖包,下面是一个完整的pom.xml文件 [html] view plain copy  print? &lt;project xmlns="http://maven.apache.o
2091 0
|
网络协议 Java 数据库连接
Jetty JNDI开发实战(上)
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/48108677 Jetty JNDI开发实战(上) 作者:chszs,版权所有,未经同意,不得转载。
1160 0
|
网络协议 Java 数据库连接
Jetty JNDI开发实战(上)
Jetty JNDI开发实战(上) 一、JNDI介绍 JNDI即Java Naming and Directory Interface,Java命名和目录接口,是Oracle公司提供的一种标准的Java命名系统接口,允许Java客户端根据命名发现或查询数据和对象。
1184 0

相关实验场景

更多