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

时间:2013-09-18 20:19:44

标签: 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.html");
    }
}

HTML文件homepage.html与JavaScript文件链接,该文件应从服务器上的js/jump.js加载:

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

但是,当我启动我的webapp并打开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

那么,如果我在<script src="js/jump.js"></script>中使用homepage.html,即使物理js/jump.jshomepage.html位于服务器上的同一个网络根目录中,为什么它不起作用?如果我以这种方式使用@Path注释,Jersey servlet是否会更改HTML和JavaScript文件的相对URL路径?我尝试了另一种使用@Path而没有子资源的方法:

@Path("account")

这次我可以在<script src="js/jump.js"></script>中使用homepage.html,如果我打开http://localhost:8080/myapp/account,则可以成功加载JS文件。因此,似乎泽西岛@Path("account/home")注释中定义的URL路径中的子资源将使JavaScript相对文件路径无法搜索。

有什么好方法可以让他们开心吗? (即,我可以在@Path("account/home")这样的网址路径中使用这两个子资源,而不会将js/jump.js更改为/myapp/js/jump.js

1 个答案:

答案 0 :(得分:1)

尝试写作

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

在第一个示例中,服务器评估http://localhost:8080/myapp/account/js/jump.js

的相对路径

但你需要的是:

http://localhost:8080/myapp/js/jump.js

所以,让浏览器知道查找一条路径。 祝你好运!