我有一个 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
与应该从js/jump.js
服务器上加载的 JavaScript 文件链接:
<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
可以稍后更改上下文根路径。所以我不想/myapp
在我的 HTML 文件中到处添加。另外,我的 webapp 中的物理目录布局如下:
WebContent
|
|_____ homepage.html
|
|_____ js
|
|____ jump.js
<script src="js/jump.js"></script>
那么,如果我在homepage.html
物理上使用js/jump.js
并且homepage.html
位于服务器上的同一个 Web 根目录中,为什么它不起作用呢?@Path
如果我以这种方式使用注释,Jersey servlet 是否会更改 HTML 和 JavaScript 文件的相对 URL 路径?我尝试了另一种@Path
没有子资源的使用方式:
@Path("account")
这次我可以<script src="js/jump.js"></script>
在我homepage.html
的中使用,如果我打开.js文件可以成功加载http://localhost:8080/myapp/account
。因此,Jersey 注释中定义的 URL 路径中的子资源似乎@Path("account/home")
会使 JavaScript 相对文件路径无法搜索。
有什么好办法让双方都开心吗?(即,我可以在 URL 路径中使用这两个子资源,例如@Path("account/home")
无需更改js/jump.js
为/myapp/js/jump.js
)