如果在Jersey';中使用子资源,则找不到JavaScript文件;s@Path注释

如果在Jersey';中使用子资源,则找不到JavaScript文件;s@Path注释,java,javascript,url,servlets,jersey,Java,Javascript,Url,Servlets,Jersey,我有一个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.

我有一个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>
这并不完美,因为可以稍后更改上下文根路径
/myapp
。所以我不想在HTML文件的任何地方添加
/myapp
。此外,my webapp中的物理目录布局如下所示:

WebContent
    |
    |_____ homepage.html
    |
    |_____ js
            |
            |____ jump.js
那么,如果我在
homepage.html
中使用
,即使
js/jump.js
homepage.html
在服务器的同一个web根目录中,为什么它不起作用呢?如果我以这种方式使用
@path
注释,Jersey servlet是否会更改HTML和JavaScript文件的相对URL路径?我尝试了另一种不使用子资源的方式使用
@Path

@Path("account")
这次我可以在我的
主页.html中使用
,如果我打开
http://localhost:8080/myapp/account
。因此,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

因此,只需让浏览器知道向上查找一条路径即可。
祝你好运

魔法!这个很好用。但是这不是有点奇怪吗,因为HTML文件
homepage.HTML
与服务器上同一web根目录
WebContent
下的
js
文件夹处于同一目录级别。为什么服务器会对相对路径进行不同的评估?服务器上的homepage.html位于何处并不重要。就URL而言,它位于myapp/account/home上。js在myapp/js/jump.js上。相对路径删除last/之后的最后一个单词,并在新路径处连接。因此,您需要删除帐户路径。
<script src="../js/jump.js"></script>