[英]Serve static content on a relative path Jetty
我的 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 的靜態資源處理程序返回。
servletContextHandler.setInitParameter("useFileMappedBuffer", "false")
如果您重視性能(和內存使用),請不要這樣做。 此配置僅用於 1 個目的,即 Microsoft Windows 上正在積極迭代和使用熱部署功能的開發人員。 生產永遠不應該設置此配置。
不要混合使用ResourceHandler
和DefaultServlet
。
查看過去的答案
至於從不同位置提供備用靜態內容,您可以為此使用另一個DefaultServlet
。
也可以在那里查看過去的答案。
您提到了 REST API,請確保您的 REST 層沒有提供所有靜態內容(這是通過您的 REST 配置以及您的 REST 端點 API url-pattern 完成的)
這個之前已經回答過了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.