我有一个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.js
和homepage.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
)
答案 0 :(得分:1)
尝试写作
<script src="../js/jump.js"></script>
在第一个示例中,服务器评估http://localhost:8080/myapp/account/js/jump.js
但你需要的是:
http://localhost:8080/myapp/js/jump.js
所以,让浏览器知道查找一条路径。 祝你好运!