【问题标题】:Serve static content on a relative path Jetty在相对路径 Jetty 上提供静态内容
【发布时间】:2021-10-27 05:44:10
【问题描述】:

我的 Main.java 文件中有以下配置。 我检查 ZKUI_BASEURL 是否设置在 env 或属性文件中,然后相应地设置 contextPath。

当我这样做时,对 src/main/resources/webapp/ 中的以下 css 和 js 文件的 GET 请求返回 404。所有控制器请求都工作正常,只是未加载的静态内容。

我想做的是在 /org/zkui/ 基本路径上提供静态内容和休息 api,以便将来我们可以在反向代理后面运行它。

    String webFolder = "webapp";
    Server server = new Server();

    WebAppContext servletContextHandler = new WebAppContext();
    String serverBaseUrl;
    if( (serverBaseUrl = System.getenv("ZKUI_BASEURL")) == null) {
        if((serverBaseUrl = globalProps.getProperty("baseURL")) == null) {
            serverBaseUrl = "/";
        }
    }
    servletContextHandler.setContextPath(serverBaseUrl);
    servletContextHandler.setResourceBase("src/main/resources/" + webFolder);

    servletContextHandler.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*(/target/classes/|.*.jar)");
    servletContextHandler.setParentLoaderPriority(true);
    servletContextHandler.setInitParameter("useFileMappedBuffer", "false");
    servletContextHandler.setAttribute("globalProps", globalProps);

    ResourceHandler staticResourceHandler = new ResourceHandler();
    staticResourceHandler.setDirectoriesListed(false);
    Resource staticResources = Resource.newClassPathResource(webFolder);
    staticResourceHandler.setBaseResource(staticResources);
    staticResourceHandler.setWelcomeFiles(new String[]{"html/index.html"});

基本上应该发生的是 - /org/zkui/home 应该由控制器处理。

/org/zkui/images/image.png 或 org/zkui/js/bootstrap.min.js 应由 /webapp/images 或 webapp/js 的静态资源处理程序返回。

【问题讨论】:

标签: jetty embedded-jetty staticresource


【解决方案1】:
servletContextHandler.setInitParameter("useFileMappedBuffer", "false")

如果您重视性能(和内存使用),请不要这样做。 此配置仅出于 1 个目的存在,即 Microsoft Windows 上的开发人员正在积极迭代和使用热部署功能。生产环境不应该有这个配置集。

不要混用 ResourceHandlerDefaultServlet

查看过去的答案

至于从不同位置提供备用静态内容,您可以使用另一个 DefaultServlet

也可以在那里查看过去的答案。

您提到 REST API,请确保您的 REST 层没有为所有静态内容提供服务(这是通过您的 REST 配置以及您的 REST 端点 API url-pattern 完成的)

这个问题之前已经回答过了。

【讨论】:

  • 所有答案都有一个目录,而我的项目中不存在 /org/zkui/ 路径。我想为所有请求添加一个上下文(/org/zkui)
  • 上下文和上下文路径不能是多级路径,只有url-patterns可以。
猜你喜欢
  • 1970-01-01
  • 2015-06-13
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
相关资源
最近更新 更多