Jetty 基本使用样例
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 基本使用样例相关推荐
- YOLOv4 资源环境配置和测试样例效果
YOLOv4 资源环境配置和测试样例效果 基本环境:cuda=10.0,cudnn>=7.0, opencv>=2.4 一.下载yolov4 git clone https://githu ...
- 2021年大数据常用语言Scala(三十二):scala高级用法 样例类
目录 样例类 定义样例类 样例类方法 样例对象 样例类 样例类是一种特殊类,它可以用来快速定义一个用于保存数据的类(类似于Java POJO类),而且它会自动生成apply方法,允许我们快速地创建样例 ...
- 在Ubuntu下构建Bullet以及执行Bullet的样例程序
在Ubuntu下构建Bullet以及执行Bullet的样例程序 1.找到Bullet的下载页,地址是:https://code.google.com/p/bullet/downloads/list 2 ...
- JDBC连接MySQL数据库及演示样例
JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- Oracle简单脚本演示样例
Oracle简单脚本演示样例 1.添加表 --改动日期:2014.09.21 --改动人:易小群 --改动内容:新增採购支付情况表 DECLARE VC_STR VARCHAR2( ...
- 【ZooKeeper Notes 3】ZooKeeper Java API 使用样例
查看PDF版本 转载请注明:@ni掌柜 nileader@gmail.com ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务框架,包含一组简单的原语集合.通过这些原语言的组合使用, ...
- 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 ...
- 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 提示 数组?堆栈 ...
- ACMNO.19 C语言-对角求和 求一个3×3矩阵对角线元素之和。 输入 矩阵 输出 主对角线 副对角线 元素和 样例输入 1 2 3 1 1 1 3 2 1 样例输出 3 7
这个我做了改进,可以实现NXN的矩阵.求出对角线之和! 只需要修改定义的define z的值就好! 接下来,进入正题! 题目描述: 求一个3×3矩阵对角线元素之和. 输入 矩阵 输出 主对角线 副对角 ...
最新文章
- Java老矣,尚能饭否?2020 Java生态系统报告出炉
- python与人工智能编程-Python是人工智能和机器学习的最佳编程语言,证据在此!...
- 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project
- java解析excel的js页面,Java导入Excel文件页面实现JS
- python基础-第三篇-函数编程
- 大数据基础系列 5:Hadoop 实验——熟悉常用的 HDFS 目录操作和文件操作
- 潮流玩具行业趋势与洞察白皮书
- 【Elasticsearch】为什么我在Elasticsearch集群中看到大量的拒绝?
- js的eval代码快速解密
- windows下数据库mysql8.0安装
- .Net6项目部署IIS步骤
- 天刀论剑显示服务器,《天涯明月刀ol》服务器维护公告 天下镖和论剑优化
- 记一次勒索病毒的遭遇
- android textview 字体边框,为TextView添加一个边框的几种办法
- a星地图测试工具_A星算法地图编辑器
- 正则表达式 压缩 HTML 字符串
- 矩阵键盘——按下矩阵按键,数码管显示出位置对应的字符(0123 4567 89Ab CdEF)
- 异构 ? 系统差异应该成为过去式, 专注在应用和数据 - 异构平台整合策略之1 - SSSD
- windows下vscode + code runner + cmake + msbuild.exe搭建C++快速编译环境
- cad图纸怎么看懂_如何看懂CAD图?