【发布时间】:2024-05-29 14:30:02
【问题描述】:
我有一个 Jersey REST Web 服务,这是我的 URL 路径 http://localhost:8080/myapp/account/home 的资源类。
@Path("account/home")
public class AccountResources {
@GET
@Produces(MediaType.TEXT_HTML)
public Viewable displayForm() {
return new Viewable("/homepage.html");
}
}
HTML 文件 homepage.html 与 JavaScript 文件链接,该文件应从服务器上的 js/jump.js 加载:
<script src="js/jump.js"></script>
但是,当我启动我的 web 应用程序并打开 http://localhost:8080/myapp/account/home(基本上是 homepage.html)时,JavaScript 文件 js/jump.js 没有加载。所以我必须添加上下文根路径/myapp/ 才能使其工作:
<script src="/myapp/js/jump.js"></script>
这并不漂亮,因为上下文根路径/myapp 可以稍后更改。所以我不想在我的 HTML 文件中到处添加/myapp。另外,我的 webapp 中的物理目录布局如下:
WebContent
|
|_____ homepage.html
|
|_____ js
|
|____ jump.js
那么为什么我在homepage.html 中使用<script src="js/jump.js"></script> 却不起作用,即使物理上js/jump.js 和homepage.html 在服务器上的同一个Web 根目录中?如果我以这种方式使用 @Path 注释,Jersey servlet 是否会更改 HTML 和 JavaScript 文件的相对 URL 路径?我尝试了另一种在没有子资源的情况下使用@Path 的方式:
@Path("account")
这次我可以在我的homepage.html中使用<script src="js/jump.js"></script>,如果我打开http://localhost:8080/myapp/account就可以成功加载JS文件。因此,Jersey 的 @Path("account/home") 注释中定义的 URL 路径中的子资源似乎会使 JavaScript 相对文件路径无法搜索。
有什么好办法让双方都开心吗? (即,我可以在 URL 路径中使用这两个子资源,例如 @Path("account/home"),而无需将 js/jump.js 更改为 /myapp/js/jump.js)
【问题讨论】:
标签: java javascript url servlets jersey