0

我有一个 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.htmlJavaScript 文件。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

4

1 回答 1

1

尝试写作

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

在您的第一个示例中,服务器评估到的相对路径http://localhost:8080/myapp/account/js/jump.js

但你需要的是:

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

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

于 2013-09-18T20:31:43.333 回答