2019独角兽企业重金招聘Python工程师标准>>>

package com.jetty.example;import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;import javax.servlet.DispatcherType;
import javax.servlet.http.HttpServlet;import org.eclipse.jetty.server.ConnectionFactory;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.ErrorHandler;
import org.eclipse.jetty.server.handler.gzip.GzipHandler;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.util.thread.QueuedThreadPool;
import org.eclipse.jetty.util.thread.ScheduledExecutorScheduler;/*** <pre>*   样例:*         JettyServer server = new JettyServer("demo");*       server.addHttpServlet("", "/h1", new HelloServlet("h1"));*        server.addHttpServlet("", "/h2", new HelloServlet("h2"));*        server.addFilter("com.jetty.example.MyFilter", null);*        server.start("127.0.0.1", 8080);*         server.awaitUninterruptibly();* * </pre>* * Created by 黄坤平 on 2018/1/20.*/
public class JettyServer {private String serverName;private Server server;private QueuedThreadPool pool;private ScheduledExecutorScheduler serverExecutor;private volatile boolean running = false;private List<ServletContextHandler> handlers = new ArrayList<ServletContextHandler>();private List<FilterHolder> filters = new ArrayList<FilterHolder>();public JettyServer(String serverName) throws Exception {this.serverName = serverName;pool = new QueuedThreadPool();if (serverName == null) {serverName = "";}if (!serverName.isEmpty()) {pool.setName(serverName);}pool.setDaemon(true);server = new Server(pool);ErrorHandler errorHandler = new ErrorHandler();errorHandler.setShowStacks(true);errorHandler.setServer(server);server.addBean(errorHandler);serverExecutor = new ScheduledExecutorScheduler(serverName + "-JettyScheduler", true);}public void start(String hostName, int port) throws Exception {start(hostName, port, null);}public void start(String hostName, int port, String[] virtualHosts) throws Exception {for (FilterHolder filter : filters) {EnumSet<DispatcherType> enumDispatcher = EnumSet.of(DispatcherType.ASYNC, DispatcherType.ERROR,DispatcherType.FORWARD, DispatcherType.INCLUDE, DispatcherType.REQUEST);for (ServletContextHandler handler: handlers) {handler.addFilter(filter, "/*", enumDispatcher);}}ContextHandlerCollection collection = new ContextHandlerCollection();server.setHandler(collection);try {server.start();int minThreads = 1;ServerConnector connector = newConnector(server, serverExecutor, new ConnectionFactory[]{ new HttpConnectionFactory()},hostName, port);connector.setName(serverName);minThreads += connector.getAcceptors() * 2;server.addConnector(connector);for (ServletContextHandler handler : handlers) {if (virtualHosts != null) {handler.setVirtualHosts(virtualHosts);}GzipHandler gzipHandler = new GzipHandler();gzipHandler.setHandler(handler);collection.addHandler(gzipHandler);gzipHandler.start();}pool.setMaxThreads(Math.max(pool.getMaxThreads(), minThreads));running = true;} catch (Exception e) {server.stop();if (serverExecutor.isStarted()) {serverExecutor.stop();}if (pool.isStarted()) {pool.stop();}throw e;}}public void awaitUninterruptibly() throws InterruptedException {server.join();}public void stop() throws Exception {if(!running) {return;}server.stop();if (serverExecutor.isStarted()) {serverExecutor.stop();}if (pool.isStarted()) {pool.stop();}}public void addHttpServlet(String basePath, String path, HttpServlet servlet) {ServletContextHandler handler = createServletHandler(basePath, path, servlet);handlers.add(handler);}private ServletContextHandler createServletHandler(String basePath, String path, HttpServlet servlet) {String prefixedPath = "";if("".equals(basePath) && "/".equals(path)) {prefixedPath = path;} else {prefixedPath = basePath + path;}ServletContextHandler contextHandler = new ServletContextHandler();ServletHolder holder = new ServletHolder(servlet);contextHandler.setContextPath(prefixedPath);contextHandler.addServlet(holder, "/");return contextHandler;}public void addFilter(String filterClassName, Map<String, Object> params) {FilterHolder holder = new FilterHolder();holder.setClassName(filterClassName);if (params != null && !params.isEmpty()) {for (Entry<String, Object> entry : params.entrySet()) {holder.setInitParameter(entry.getKey(), entry.getValue().toString());}}filters.add(holder);}private ServerConnector newConnector(Server server,ScheduledExecutorScheduler serverExecutor,ConnectionFactory[] connectionFactories, String hostName, int port)throws Exception {ServerConnector connector = new ServerConnector(server,null,serverExecutor,null,-1,-1,connectionFactories);connector.setPort(port);connector.start();connector.setAcceptQueueSize(Math.min(connector.getAcceptors(), 8));connector.setHost(hostName);return connector;}}

pom.xml

<jetty.version>9.3.20.v20170531</jetty.version><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-http</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-continuation</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-servlet</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-servlets</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-proxy</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-client</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-util</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-security</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-plus</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId><version>${jetty.version}</version><scope>provided</scope></dependency>

转载于:https://my.oschina.net/u/3209870/blog/1610120

Jetty 基本使用样例相关推荐

  1. YOLOv4 资源环境配置和测试样例效果

    YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...

  2. 2021年大数据常用语言Scala(三十二):scala高级用法 样例类

    目录 样例类 定义样例类 样例类方法 样例对象 样例类 样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),而且它会自动生成apply方法,允许我们快速地创建样例 ...

  3. 在Ubuntu下构建Bullet以及执行Bullet的样例程序

    在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...

  4. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  5. Oracle简单脚本演示样例

    Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR           VARCHAR2( ...

  6. 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例

    查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...

  7. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例

    题目描述 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换. 输入 一个3x3的矩阵 输出 转置后的矩阵 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 ...

  8. ACMNO.21 C语言-逆序输出 输入10个数字,然后逆序输出。 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0

    题目描述 输入10个数字,然后逆序输出. 输入 十个整数 输出 逆序输出,空格分开 样例输入 1 2 3 4 5 6 7 8 9 0 样例输出 0 9 8 7 6 5 4 3 2 1 提示 数组?堆栈 ...

  9. ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7

    这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...

最新文章

  1. Java老矣,尚能饭否?2020 Java生态系统报告出炉
  2. python与人工智能编程-Python是人工智能和机器学习的最佳编程语言,证据在此!...
  3. 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
  4. java解析excel的js页面,Java导入Excel文件页面实现JS
  5. python基础-第三篇-函数编程
  6. 大数据基础系列 5:Hadoop 实验——熟悉常用的 HDFS 目录操作和文件操作
  7. 潮流玩具行业趋势与洞察白皮书
  8. 【Elasticsearch】为什么我在Elasticsearch集群中看到大量的拒绝?
  9. js的eval代码快速解密
  10. windows下数据库mysql8.0安装
  11. .Net6项目部署IIS步骤
  12. 天刀论剑显示服务器,《天涯明月刀ol》服务器维护公告 天下镖和论剑优化
  13. 记一次勒索病毒的遭遇
  14. android textview 字体边框,为TextView添加一个边框的几种办法
  15. a星地图测试工具_A星算法地图编辑器
  16. 正则表达式 压缩 HTML 字符串
  17. 矩阵键盘——按下矩阵按键,数码管显示出位置对应的字符(0123 4567 89Ab CdEF)
  18. 异构 ? 系统差异应该成为过去式, 专注在应用和数据 - 异构平台整合策略之1 - SSSD
  19. windows下vscode + code runner + cmake + msbuild.exe搭建C++快速编译环境
  20. cad图纸怎么看懂_如何看懂CAD图?

热门文章

  1. 编程之法:面试和算法心得
  2. LVS nat 是否需要借助iptables 的snat实现负载均衡
  3. (一)ubuntu 12.04 安装php5.5
  4. freemarker-ide eclipse安装地址 安装方法 页面静态化
  5. 文件管理器-android源代码
  6. 杂志大片:摩登都市 爱之城堡
  7. #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队
  8. 百度正在加速小程序的开放趋势
  9. SQL Server查询备份日期和备份设备名
  10. Android特色开发之Google MAP