Jetty 9(嵌入式):在运行时添加处理程序

2023-12-11

有没有办法将处理程序添加到正在运行的嵌入式 Jetty 实例?我们已将旧的基于 Jetty 6 的项目迁移到 Jetty 9,我们的插件系统需要能够添加和删除动态处理程序...

请参阅下面的示例...

Server server = new Server();
[...]
server.start();
[...]
Handler[] existingHandler = server.getHandlers();

// There is no more
server.addHandler(newHandler);

// only this you can do, but only if the server is stopped
server.setHandler(newHandler)

Note: newHandler is a HandlerCollection...


这是完整的代码示例。接下来使用HandlerCollection(true),显式启动新的上下文处理程序也很重要。

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;

public class DynamicContextHandlers {
    public static void main(String[] args) throws Exception {
        new DynamicContextHandlers().run();
    }

    public void run() throws Exception {
        int port = 8080;
        Server server = new Server(port);

        ContextHandler contextHandler = new ContextHandler();
        contextHandler.setContextPath("/hello");
        contextHandler.setResourceBase(".");
        contextHandler.setClassLoader(Thread.currentThread().getContextClassLoader());
        contextHandler.setHandler(new HelloHandler(""));

        HandlerCollection contextHandlerCollection = new HandlerCollection(true); // important! use parameter
                                                                                    // mutableWhenRunning==true

        // add context handler before starting server (started implicitly)
        contextHandlerCollection.addHandler(contextHandler);
        server.setHandler(contextHandlerCollection);

        server.start();
        System.out.println("Server started at port " + port + " with context handler for /hello");

        System.out.println("Press enter to add context handler for /hello2");
        System.in.read();

        ContextHandler contextHandler2 = new ContextHandler();
        contextHandler2.setContextPath("/hello2");
        contextHandler2.setResourceBase(".");
        contextHandler2.setClassLoader(Thread.currentThread().getContextClassLoader());
        contextHandler2.setHandler(new HelloHandler("2"));

        // add handler after starting server.
        contextHandlerCollection.addHandler(contextHandler2);
        // important! start context explicitly.
        contextHandler2.start();

        System.out.println("Press enter to exit.");
        System.in.read();

        server.stop();

    }

    public class HelloHandler extends AbstractHandler {
        String string;

        public HelloHandler(String string) {
            this.string = string;
        }

        public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException {
            response.setContentType("text/html;charset=utf-8");
            response.setStatus(HttpServletResponse.SC_OK);
            baseRequest.setHandled(true);
            response.getWriter().println("<h1>Hello World" + string + "</h1>");
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetty 9(嵌入式):在运行时添加处理程序 的相关文章

随机推荐

  • 在 ajax 加载的页面中无限滚动

    我有一个页面 我们称之为 1 php 它使用 jQuery ajax 将 2 php 加载到 div 框中 2 php 从我的数据库打印 20 条记录 当我滚动到达 div 框的底部时 我希望它加载接下来的 20 条记录 就像 Facebo
  • JSONObject 无法转换为 JSONArray

    我的 Android 应用程序需要使用以下 Java 从我的 WCF 服务获取用户名数组 然后填充微调器 JSONArray mtUsers new JSONArray new String buffer 但当我收到以下错误时 它似乎正在获
  • 在android上使用smsManager.sendTextManager发送短信的问题

    我正在从我的应用程序向使用 5 位数手机号码的服务器发送一条短信 在 4 2 2 操作系统上 它会在下面弹出窗口询问我 Edited 问 如何处理取消 确定按钮 这应该有效 switch getResultCode if cancel pr
  • 删除目录中的所有文件和文件夹

    我想要一个批处理文件 该文件将删除我的无线工具包的缓存文件夹中的所有文件夹和文件 目前我有以下内容 cd C Users tbrollo j2mewtk 2 5 2 appdb RMS del db 这将删除我的所有 db 文件RMS目录
  • fwrite() 性能远低于磁盘容量

    我有一个动态分配的数组struct拥有 1700 万个元素 为了将其保存到磁盘 我写 fwrite StructList sizeof Struct NumStructs FilePointer 在稍后的步骤中 我用等效的内容阅读了它fre
  • 在 Tensorflow 中重用 LSTM 的重用变量

    我正在努力使RNN using LSTM 我做了LSTM模型 后面有两个DNN网络和一个回归输出层 我训练了我的数据 最终的训练损失约为0 009 然而 当我将模型应用于测试数据时 损失变为大约0 5 第 1 轮训练损失约为0 5 所以 我
  • Jquery 从文本中提取 URL

    我需要使用 jquery 从文本中提取 URL 可以说我在页面上的某个地方遵循文本区域代码
  • 多视图应用程序的knockoutjs模式示例[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在构建一个应用程序 其中包含两个复杂的 显着不同的 但具有一些共享组件 视图 一个视图允许用户运行查询并查看搜索结果 另一个视图提供最近活动的概述 相关示例可能是具有电子邮件屏幕
  • Android Studio-Java.exe 已完成,退出值非零 2

    当我尝试运行我的应用程序时 我收到此错误 Error Execution failed for task app dexDebug gt com android ide common process ProcessException org
  • 在 Ajax Adob​​e AIR 应用程序中与 API 共享机密

    我对开发 AIR 应用程序还很陌生 所以也许这是一个愚蠢的问题 但我似乎无法从 Google 找到任何答案 非常感谢您能给我的任何帮助 我正在使用 Ajax 构建一个 AIR 应用程序 使用的 API 与 flickr 的 API 相同 并
  • Google 地图地理编码(GLatLng 地址)

    我正在尝试使用 Google Maps JavaScript API 从两个位置绘制测地折线address点 var polyOptions geodesic true var polyline new GPolyline new GLat
  • 无法写入从两个压缩数据帧创建的 PySpark 数据帧

    我正在尝试跟随这里给出的例子用于组合两个数据框没有共享连接密钥 通过数据库表或 pandas 数据框中的 索引 进行组合 但 PySpark 没有该概念 My Code left df left df repartition right d
  • 安装了 Ruby on Rails,但是当我尝试运行 Rails Sever 时它没有加载 WEBrick?

    我今天在我的 mac 上安装了 Ruby on Rails 以及 Gems 和 MYsql 我正在尝试遵循 lynda com 教程 但遇到了困难 当我尝试运行 Rails 服务器时 由于某种原因它没有加载 WEBrick 这是我得到的错误
  • Pandas Dataframe - 根据两列找到最小值但大于0的行

    我有一个包含 3 列的数据框 x y 时间 有几千行 我想要做的是检索时间最短的行 但我希望最小值不应该为 0 e g x y time 240 1 28 5 240 2 19 3 240 240 0 240 19 9 7 到目前为止我已经
  • dyld:找不到符号:__TMPdCSs12AnyGenerator

    当我尝试构建并运行我的项目时 它给了我一个错误symbol not found TMPdCSs12AnyGenerator 我已经在我的系统上安装了 Xcode 7 beta 当我安装时它给我一个错误未找到领域模块所以我只是删除了领域框架
  • 如何对合并光标进行排序?

    任务是将来自 2 个具有相似列的不同表的数据组合起来 并按一列排序 看起来 MergeCursor 可能会有所帮助 但不知道如何对项目进行排序 我现在看到的唯一解决方案是手动转换为 ArrayAdapter 或者进行偷偷摸摸的 JOIN 尚
  • 为什么只允许UI线程修改UI?

    我知道 如果我从不同的线程修改控件 我应该小心 因为 WinForms 和 WPF 不允许从其他线程修改控件的状态 为什么会有这样的限制 如果我可以编写线程安全代码 我应该能够安全地修改控件状态 那么为什么会有这样的限制呢 一些 GUI 框
  • 如何获取从 FileProvider 类获取的图像文件的方向?

    背景 针对API 24或更高版本 开发人员需要使用FileProvider 或他们自己的ContentProvider 而不是使用简单的 Uri fromFile 命令 以便让其他应用程序访问该应用程序的文件 问题 我尝试使用以下代码打开相
  • MySQL 查询使用 JOIN 不使用 INDEX

    我在 MySQL 简化 中有以下两个表 clicks InnoDB 包含约 70 000 000 条记录 有一个索引date added column 有专栏link id它指的是记录links table links MyISAM 包含的
  • Jetty 9(嵌入式):在运行时添加处理程序

    有没有办法将处理程序添加到正在运行的嵌入式 Jetty 实例 我们已将旧的基于 Jetty 6 的项目迁移到 Jetty 9 我们的插件系统需要能够添加和删除动态处理程序 请参阅下面的示例 Server server new Server