我有一个 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>
但是,当我启动我的网络应用程序并打开 http://localhost:8080/myapp/account/home
时(基本上这是 homepage.html
),JavaScript 文件 js/jump.js
未加载。所以我必须添加上下文根路径 /myapp/
使其发挥作用:
<script src="/myapp/js/jump.js"></script>
这不太漂亮,因为上下文根路径 /myapp
可以稍后更改。所以我不想添加/myapp
我的 HTML 文件中随处可见。另外,我的web应用程序中的物理目录布局如下:
WebContent
|
|_____ homepage.html
|
|_____ js
|
|____ jump.js
那么为什么如果我使用 <script src="js/jump.js"></script>
就不起作用呢?在homepage.html
即使 body 上js/jump.js
和homepage.html
是否位于服务器上的同一 Web 根目录中?如果我使用@Path
,Jersey servlet 是否会更改 HTML 和 JavaScript 文件的相对 URL 路径是这样注释的吗?我尝试了另一种使用 @Path
的方法没有子资源:
@Path("account")
这次我可以使用<script src="js/jump.js"></script>
在我的homepage.html
打开http://localhost:8080/myapp/account
就可以成功加载JS文件。所以看来Jersey的@Path("account/home")
中定义的URL路径中的子资源注释将使 JavaScript 相对文件路径不可搜索。
有什么能让双方都开心的好办法吗? (即,我可以在 URL 路径中使用两个子资源,如 @Path("account/home")
,而无需将 js/jump.js
更改为 /myapp/js/jump.js
)
最佳答案
尝试写作
<script src="../js/jump.js"></script>
在第一个示例中,服务器评估 http://localhost:8080/myapp/account/js/jump.js
但是你需要的是:
http://localhost:8080/myapp/js/jump.js
因此,只需让浏览器知道查找一条路径即可。 祝你好运!
关于如果我在 Jersey 的 @Path 注释中使用子资源,则找不到 JavaScript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881617/