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

标签 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>

但是,当我启动我的网络应用程序并打开 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.jshomepage.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/

相关文章:

python tornado 获取请求 url

url - Codeigniter _remap 函数

iphone - 如何检查连接到互联网的 url?

java - 为什么在处理大型/速度射弹时会出现不准确的情况,是由于欧拉积分吗?

java - 在 Java 中使用没有条件的复合语句

java - Tesseract 不识别阿拉伯字符

javascript - 根据给定值将运算从求和更新为减法,反之亦然

javascript - 获取选定文本javascript的边界矩形

javascript - 使用正则表达式捕获字体标签内的文本

java - 由于 Java 无法运行 SDK Manager