嵌入 Jetty 并在 ServletContext 上设置默认属性

Posted

技术标签:

【中文标题】嵌入 Jetty 并在 ServletContext 上设置默认属性【英文标题】:Embed Jetty and set default attributes on the ServletContext 【发布时间】:2015-04-24 04:49:21 【问题描述】:

我想将 Jetty 嵌入到我正在编写的服务器应用程序中。 Embbeded Jetty 引擎将用于托管各种 Web 应用程序,这些应用程序将直接与服务器应用程序内部集成。我想将 Web 应用程序打包成单独的 WAR 文件并编写它们,以便它们独立于服务器。仅共享他们与服务器共同使用的代码。

如何使用来自服务器的对象配置每个 ServletContext,而不需要 Web App 知道如何从嵌入 Jetty 的进程中获取它们?

服务器进程生命周期示例大纲:

    引导和加载配置 设置在整个过程中存在的内部对象 创建 Web 应用可用于访问内部状态的句柄 启动嵌入式 Jetty 引擎 通过某种形式的配置公开 Web 应用程序请求的句柄。 (我该怎么做??) 处理传入连接 等待终止/关闭信号 清理资源 退出

这个想法是在 Jetty 中部署 Web 应用程序。当 Web 应用程序初始化时,服务器将读取 Web 应用程序的一些配置,然后公开句柄以访问他们感兴趣的数据。

问题是服务器不是 J2EE 应用程序,所以 EJB 已经出局了。

【问题讨论】:

不清楚你在问什么。如果您想要 WAR 文件,则不要使用 ServletContext,而是使用 WebAppContext。您在第 5 步中提到的“句柄”是什么?请更详细地描述“配置”步骤/技术。 如果您可以编辑您的问题并添加我们需要的详细信息,那将是理想的。 【参考方案1】:

我想通了,事实证明你可以在WebAppContext 上设置属性。稍后在Servlet 中,您可以使用SpecialResource sr = ( SpecialResource ) getServletContext ().getAttribute ( "com.example.SpecialResource" ); 检索值

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public final class ExampleDriver

  public static void main ( String args[] ) throws Exception
  
    SpecialResource specialResource = new SpecialResource ();

    Server server = new Server ( 19080 );

    WebAppContext waCtx = new WebAppContext ();
    waCtx.setAttribute ( "com.example.SpecialResource", SpecialResource );
    waCtx.setWar ( "path/to/war/file.war" );

    server.setHandler ( waCtx );
    server.start ();
    server.join ();
  

【讨论】:

以上是关于嵌入 Jetty 并在 ServletContext 上设置默认属性的主要内容,如果未能解决你的问题,请参考以下文章

Jetty实战之 嵌入式运行Jetty 配置Https

Jetty 9.0 SPDY 嵌入式配置

Jetty 嵌入式开发(实例)

Undertow和jetty做嵌入式,哪个更好

使用 jetty-maven-plugin 运行 Jetty,并在 jetty 运行时完成构建

嵌入式jetty的HTTP实现