gpt4 book ai didi

java - 修复 java servlet 服务的 HTML 中的相对路径(对于 HTML5 pushstate)

转载 作者:搜寻专家 更新时间:2023-11-01 03:46:11 24 4
gpt4 key购买 nike

我正在尝试修改具有 servlet (RootResource.java) 的 Jetty 服务器,它以某种方式神奇地获取并使用:

@Singleton
@Path("/")
public class RootResource {
@Context
private ServletContext servletContext;

@GET
@Path("react-client/{path: .*\\..+$}")
public Response serveReactClientContent(@Context HttpServletRequest httpServletRequest) {
// This doesn't work, a resolved relative resource is not relative
// to the /react-client base. See description of problem.
final String pathToResource = httpServletRequest.getRequestURI();
return serveStaticContent(pathToResource);
}

@GET
@Path("react-client/{path: .*$}")
public Response serveReactClientIndexPage(@Context HttpServletRequest httpServletRequest) {
return serveStaticContent("/react-client/index.html");
}

private Response serveStaticContent(String pathToResource) {
final String type = this.servletContext.getMimeType(pathToResource);
final Response.ResponseBuilder response = Response.ok(servletContext.getResourceAsStream(pathToResource)).type(type);
return response.build();
}
}

想法是向 react-client/some/path 发送 GET 请求并返回 react-client/index.html 的内容。本质上使 Jetty 表现得像一个使用客户端路由的 webapp 服务器。

我遇到的问题是 index.html 中的相对路径 只有在路径深度为一层时才有效 例如react-client/products.

<script src="./webapp.js"></script>

在这种情况下,在 index.html 中找到了上面的 javascript 文件,因为 webapp.js 是一个存在于 react-client/webapp.js 的文件。

一旦我尝试更深层次的链接,例如react-client/products/97357361 失败,因为 servlet 试图在 react-client/products/webapp.js 中找到 webapp.js不存在。

我怎样才能让它始终像从 /react-client 一样请求资源?谢谢

最佳答案

由于您的 index.html可以通过多个 url 访问,例如

  • / react 客户端/产品
  • /react-client/products/97357361
  • / react 客户端/一些
  • /react-client/一些/路径

添加 <base> 可能是明智的HTML 页面标题处的标记。

<head>
...
<base href="https://www.yourwebsite.com/react-content/" />
<script src="./script.js"></script>
...
</head>

这将告诉浏览器将页面中找到的任何相对路径解析为相对于 https://www.yourwebsite.com/react-content/

所以,根据上面的例子,<script src="./script.js"></script>将作为 "https://www.yourwebsite.com/react-content/script.js" 向服务器请求无论当前用于访问此页面的 URL 是什么。

然后,您可以在 Jetty 上恢复这些设置并保持简单。

关于java - 修复 java servlet 服务的 HTML 中的相对路径(对于 HTML5 pushstate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53504483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com