首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让jetty在重新加载修改后的类时阻塞请求?

如何让 Jetty 在重新加载修改后的类时阻塞请求?

Jetty 在重新加载修改后的类时,可以通过在启动时创建一个自定义的 ServletContext,将需要重新加载的类添加到 ServletContext 中,并在 ServletContext 启动时加载这些类。在重新加载类时,可以通过在 ServletContext 上进行阻塞请求,直到类加载完成。

具体实现方法如下:

  1. 在启动 Jetty 时,创建一个自定义的 ServletContext,并将需要重新加载的类添加到 ServletContext 中。public class JettyStartup { public static void main(String[] args) throws Exception { ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); Server server = new Server(8080); context.setResourceBase("."); server.setHandler(context); context.addServlet(new ServletHolder(new MyServlet()), "/myServlet"); server.start(); } }public class MyServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { super.init(config); ServletContext context = config.getServletContext(); context.addInitParameter("myClass", "com.example.MyClass"); } }public class MyServlet extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>My Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>My Servlet</h1>"); try { Class.forName(config.getInitParameter("myClass")); } catch (ClassNotFoundException e) { e.printStackTrace(); } ServletContext context = config.getServletContext(); context.addInitParameter("myClass", "com.example.MyClass"); context.start(); } }在以上示例中,我们通过在 MyServlet 的 init() 方法中添加需要重新加载的类,然后在 doGet() 方法中通过 ServletContext 的 addInitParameter() 方法重新添加需要重新加载的类。在重新加载类时,我们通过在 ServletContext 上进行阻塞请求,直到类加载完成。
  2. 在自定义的 ServletContext 中,添加需要重新加载的类。
  3. 在重新加载类时,通过在 ServletContext 上进行阻塞请求,直到类加载完成。

注意,以上方法仅适用于 Web 项目,并且需要在 Web 项目的 Web.xml 文件中添加相应的配置信息。如果您的应用程序不是 Web 项目,或者不需要在 Web.xml 文件中添加配置信息,那么您需要根据您的应用程序需求进行相应的修改。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Jetty基本介绍 及 与tomcat对比

如果将 Jetty 集成到 Jboss 或者 Apache,那么就可以 Jetty 基于 AJP 模式工作。下面分别介绍 Jetty 如何基于这两种协议工作,并且它们如何建立连接和接受请求。...我们设置 Jetty Connector 实现为 org.eclipse.jetty.server.bi.SocketConnector Jetty 以 BIO 方式工作,Jetty 启动将会创建...实际上 AJP 处理请求相比较 HTTP 唯一不同就是在读取到 socket 数据包如何来转换这个数据包,是按照 HTTP 协议包格式来解析就是 HttpParser,按照 AJP 协议来解析就是...这里需要注意地方,很多人认为监听 SelectionKey.OP_ACCEPT 事件就已经是非阻塞方式了,其实 Jetty 仍然是用一个线程来监听客户端连接请求,当接受到请求后,把这个请求再注册到...,其实从 Jetty 源码中能够发现,真正共享一个线程处理只是监听不同连接数据传送事件上,比如有多个连接已经建立,传统方式是当没有数据传输,线程是阻塞也就是一直等待下一个数据到来,而 NIO

75040
  • 【万字长文】Doris FE启动流程源码详细解析

    Doris 中,我们使用 bdbje 完成元数据操作日志持久化、FE 高可用等功能。...使用Nio进行通讯,采用这种方式通信好处是: 同步非阻塞IO IO是面向流,NIO是面向缓冲区 NIO引入了选择器概念,选择器用于监听多个通道事件 FeServer 源码解析 FeServer...THREADED_SELECTOR:非阻塞式I/O模型,即主从 Reactor 模型,该模型能及时响应大量并发连接请求多数场景下有较好表现。...THREAD_POOL:阻塞式I/O模型,使用线程池处理用户连接,并发连接数受限于线程池数量,如果能提前预估并发请求数量,并且能容忍足够多线程资源开销,该模型会有较好性能表现,默认使用该服务模型...五、问题思考 CataLog 如何对Elog进行回放? ELog 日志如何实现数据同步? BDB 如何存储元数据

    1.7K31

    Comet技术详解:基于HTTP长连接Web端实时通信技术前言学习交流概述“服务器推”(Comet技术)应用范围来看看更传统基于客户端套接口“服务器推”技术基于 HTTP 长连接“服务器

    当客户端处理接收数据、重新建立连接,服务器端可能有新数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。 图 2....使用 iframe 请求一个长连接有一个很明显不足之处:IE、Morzilla Firefox 下端进度栏都会显示加载没有完成,而且 IE 上方图标会不停转动,表示加载正在进行。...所以开发长连接应用时, 必须注意在使用了多个 frame 页面中,不要为每个 frame 页面都建立一个 HTTP 长连接,这样会阻塞其它 HTTP 请求设计上考虑多个 frame 更新共用一个长连接...服务器收到关闭请求后首先要从读取数据阻塞状态唤醒,然后释放为这个客户端分配资源,再关闭连接。...所以设计上,我们需要使客户端控制请求和数据请求使用不同 HTTP 连接,才能使控制请求不会被阻塞

    6K11

    自家表兄弟Tomcat和Jetty

    Jetty Server可以有多个Connector不同端口上监听客户请求,而对于请求处理Handler组件,也可以根据具体场景使用不同Handler。...而在回调方法_readCallback里,会调用EndPoint接口去读数据,读完后HTTP解析器去解析字节流,HTTP解析器会将解析后数据,包括请求行、请求头相关信息存到Request对象里。...step1.Acceptor监听连接请求,当有连接请求到达就接受连接,一个连接对应一个Channel,Acceptor将Channel交给ManagedSelector来处理。...这些子类是如何实现Servlet容器功能呢? Jetty中定义了一些默认Handler,并且这些Handler之间继承关系比较复杂,先通过一个全景图来了解一下。对图进行了简化。 ?...那是因为Servlet规范规定Servlet执行过程中是有上下文。那么这些Handler执行过程中如何访问这个上下文呢?这个上下文又存在什么地方呢?

    1.5K40

    Comet:基于 HTTP 长连接“服务器推”技术

    当客户端处理接收数据、重新建立连接,服务器端可能有新数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。 图 2. 基于长轮询服务器推模型 ?...所以开发长连接应用时, 必须注意在使用了多个 frame 页面中,不要为每个 frame 页面都建立一个 HTTP 长连接,这样会阻塞其它 HTTP 请求设计上考虑多个 frame 更新共用一个长连接...服务器收到关闭请求后首先要从读取数据阻塞状态唤醒,然后释放为这个客户端分配资源,再关闭连接。...所以设计上,我们需要使客户端控制请求和数据请求使用不同 HTTP 连接,才能使控制请求不会被阻塞。...流“和”拉“模式使用阻塞方式读事件,如果超时,会发给客户端发送一个没有新信息收到“heartbeat“事件,如果是“拉”模式,会把“heartbeat”与“refresh”事件一起传给客户端,通知客户端重新发出请求

    2.6K30

    Comet:基于 HTTP 长连接“服务器推”技术

    当客户端处理接收数据、重新建立连接,服务器端可能有新数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。 图 2. 基于长轮询服务器推模型 ?...所以开发长连接应用时, 必须注意在使用了多个 frame 页面中,不要为每个 frame 页面都建立一个 HTTP 长连接,这样会阻塞其它 HTTP 请求设计上考虑多个 frame 更新共用一个长连接...服务器收到关闭请求后首先要从读取数据阻塞状态唤醒,然后释放为这个客户端分配资源,再关闭连接。...所以设计上,我们需要使客户端控制请求和数据请求使用不同 HTTP 连接,才能使控制请求不会被阻塞。...流“和”拉“模式使用阻塞方式读事件,如果超时,会发给客户端发送一个没有新信息收到“heartbeat“事件,如果是“拉”模式,会把“heartbeat”与“refresh”事件一起传给客户端,通知客户端重新发出请求

    2.2K70

    薯条 SpringBoot IDEA中实现热部署 (JRebel实用版)「建议收藏」

    大家好,又见面了,我是你们朋友全栈君。 ---- JRebel简介: JRebel是与应用程序服务器集成JVM Java代理,可使用现有的加载重新加载。...只有更改重新编译并立即重新加载到正在运行应用程序中,JRebel特别不依赖任何IDE或开发工具(除编译器外)。但是,与您IDE紧密集成仍然很不错。...请记住:只要您用新文件覆盖旧文件,JRebel就会重新加载更改并减少重新部署时间。...顺便整理下步骤防止以后忘记: Java开发过程选择一个适合自己IDE是很重要,每次修改代码都需要重新编译、重启,如何解决这个问题?。...因此我参考网上教程将这三个工具结合起来,完成静态资源修改、java代码修改后加载

    35210

    浏览器与服务器消息通信

    最近工作中遇到一个场景,商家商家后台需要实时获取到有没有新订单,有的话是几个;这个需求类似与日常中使用QQ或者微信新信息提醒一样,只要有新信息就需要提醒;商家基本PC上使用,各式浏览器都有:如...客户端 JavaScript 响应处理函数会在处理完服务器返回信息后,再次发出请求重新建立连接;如此循环。...优点: 这种方式每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建关闭(一些防火墙常被设置为丢弃过长连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来连接...默认情况下,可以 Jetty 6、Jetty 7、和 Jetty 8 中以及其他所有支持 Servlet 3.0 Specification 服务中使用 CometD。 ?...服务器端阻塞读时会设置一个时限,超时后阻塞读调用会返回,同时发给客户端没有新数据到达心跳信息。此时如果客户端已经关闭,服务器往通道写数据会出现异常,服务器端就会及时释放为这个客户端分配资源。

    1.7K30

    浏览器与服务器消息通信

    最近工作中遇到一个场景,商家商家后台需要实时获取到有没有新订单,有的话是几个;这个需求类似与日常中使用QQ或者微信新信息提醒一样,只要有新信息就需要提醒;商家基本PC上使用,各式浏览器都有:如...客户端 JavaScript 响应处理函数会在处理完服务器返回信息后,再次发出请求重新建立连接;如此循环。...优点: 这种方式每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建关闭(一些防火墙常被设置为丢弃过长连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来连接...默认情况下,可以 Jetty 6、Jetty 7、和 Jetty 8 中以及其他所有支持 Servlet 3.0 Specification 服务中使用 CometD。 ?...服务器端阻塞读时会设置一个时限,超时后阻塞读调用会返回,同时发给客户端没有新数据到达心跳信息。此时如果客户端已经关闭,服务器往通道写数据会出现异常,服务器端就会及时释放为这个客户端分配资源。

    1.7K60

    浏览器与服务器消息通信

    最近工作中遇到一个场景,商家商家后台需要实时获取到有没有新订单,有的话是几个;这个需求类似与日常中使用QQ或者微信新信息提醒一样,只要有新信息就需要提醒;商家基本PC上使用,各式浏览器都有:如...客户端 JavaScript 响应处理函数会在处理完服务器返回信息后,再次发出请求重新建立连接;如此循环。...优点: 这种方式每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建关闭(一些防火墙常被设置为丢弃过长连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来连接...默认情况下,可以 Jetty 6、Jetty 7、和 Jetty 8 中以及其他所有支持 Servlet 3.0 Specification 服务中使用 CometD。 ?...服务器端阻塞读时会设置一个时限,超时后阻塞读调用会返回,同时发给客户端没有新数据到达心跳信息。此时如果客户端已经关闭,服务器往通道写数据会出现异常,服务器端就会及时释放为这个客户端分配资源。

    1.8K50

    Spring Boot 2.4.4、Spring Cloud 2020.0.2 发布

    小编来帮你说一说 首先是Spring Cloud 2020.0.2,是一个常规小版本升级,主要是修复一些之前提出bug以及升级依赖。...) 阻塞LoadBalancer客户端中添加了基于 sticky-session 请求支持(#901) Spring Cloud Config 使用ConfigData添加TLS支持(#1689...,则无法判断哪个位置有故障 #25692 @ConfigurationProperties默认值传递给错误实例中不可见验证程序 #25614 EmbeddedDatabaseConnection...#h2不应指定主机名 #25569 如果没有SpringWeb,RSocketEmbeddedServerAutoConfiguration不会后退 #25555 从包含同一组属性json文件加载...路径上使用devtools创建以ServerHttpSecurity为目标的方面启动失败 #19010 Documentation management.metrics.export.influx.db

    1.7K20

    深入拆解Tomcat和Jetty之通用组件

    这样就可以大量日志需要写入时候起到缓冲作用,防止都阻塞在写日志这个动作上。...日常工作使用中,我们使用到了 Tomcat 和 Jetty 提供功能,我希望通过学习专栏,还能帮你了解这些功能是如何实现,以及 Tomcat 和 Jetty 设计时都考虑了哪些地方。...所以在学习专栏,你不妨思考这样一个问题,假如你来设计并实现一个 Web 容器,你会怎么做呢?如何合理设计顶层模块?...但是,我之所以设计了这部分内容,就是希望能够揭开 Tomcat 和 Jetty 内部细节,因为任何一个优秀中间件之所以可以用户使用比较容易,其内部一定都是很复杂。...比如学习了 Tomcat 线程池实现,我们就可以自己写一个定制版线程池;学习了 Tomcat 加载器,我们也可以自己动手写一个加载器。

    49520

    Spring Boot 2.0 WebFlux 框架介绍

    :rxjava 和io.reactivex:rxjava-reactive-streams`(RxJava 和 Reactive Streams 之间适配器)依赖关系路径上,支持 RxJava...1.x 例如,请求体可以是以下方式之一,它将在注解和功能编程模型中自动解码: Accountaccount - 调用控制器之前,account 将无阻塞地被反序列化。...Mono - 当 Mono 完成请求处理完成。 Account - 序列化而不阻塞给定Account; 意味着同步、非阻塞 Controller 方法。...Void - 特定于基于注解编程模型,方法返回请求处理完成; 意味着同步、非阻塞 Controller 方法。...当使用像 Flux 或 Observable 这样流类型请求/响应或映射/路由级别中指定媒体类型用于确定数据应如何序列化和刷新。

    2K00

    Spring Boot 2.0 - WebFlux framework

    :rxjava 和io.reactivex:rxjava-reactive-streams`(RxJava 和 Reactive Streams 之间适配器)依赖关系路径上,支持 RxJava...1.x 例如,请求体可以是以下方式之一,它将在注解和功能编程模型中自动解码: Accountaccount - 调用控制器之前,account 将无阻塞地被反序列化。...Mono - 当 Mono 完成请求处理完成。 Account - 序列化而不阻塞给定Account; 意味着同步、非阻塞 Controller 方法。...Void - 特定于基于注解编程模型,方法返回请求处理完成; 意味着同步、非阻塞 Controller 方法。...当使用像 Flux 或 Observable 这样流类型请求/响应或映射/路由级别中指定媒体类型用于确定数据应如何序列化和刷新。

    7.5K70

    Java系列 | 远程热部署美团落地实践

    此外,因为很多开发者开发、测试阶段已逐渐形成了“固化动作”,如何改变这些用户行为,他们拥抱新产品,也是Sonic面临艰巨挑战之一。...//对于已经加载,可以执行retransformClasses来重新触发这个Transformer拦截。加载字节码被修改后,除非再次被retransform,否则不会恢复。     ...();     //此方法用于替换定义,而不引用现有的文件字节,就像从源代码重新编译以进行修复和继续调试所做那样。     ...因此,Spring初始化过程中,需要维护父子上下文对应关系,当子上下文变若变更范围涉及到Bean B,需要重新更新子上下文中依赖关系,当有多上下文关联需要维护多上下文环境,且当前上下文环境入口需要...XML去匹配Configuration,从而重新加载Configuration以达到热部署目的。

    1.9K70

    SpringBootWeb容器配置:JAX-RS和Jersey框架、内嵌容器配置

    Servlet容器主要基于同步阻塞I/O架构,HTTP请求和线程是一对一关系,主要是TPR模型,即一个请求对应一个线程。主要业务逻辑也是基于命令式编程模式。...Spring Boot 2.X主要基于异步非阻塞I/O架构,HTTP请求基于收敛线程模型,网络层使用基于ReactorI/O多路复用模式,业务逻辑基于函数式编程模式,以Spring WebFlux为主要框架...Servlet 和 Filter 注 册 都 可 以 使 用 spring.jersey.init.*定义一个属性集合并将其传递给init参数进行 初始化。...加载Bean后开始初始化配置项PostProcessor处理逻辑: 4.配置文件加载 从配置文件中,你可以加载配置文件对象配置值。...我们最新Spring Boot下查看Tomcat相关配置,发现有两个自动装配,分别包含了三个定制器,还有一个工厂

    80910
    领券