[英]JavaScript file not found if I use sub-resource in Jersey's @Path annotation
我有一个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
因此,即使实际上js/jump.js
和homepage.html
在相同的Web根目录中,即使我在homepage.html
使用<script src="js/jump.js"></script>
,为什么它不起作用服务器? 如果我以这种方式使用@Path
注释,Jersey servlet是否会更改HTML和JavaScript文件的相对URL路径? 我尝试了使用@Path
而不使用子资源的另一种方式:
@Path("account")
这次,我可以在homepage.html
使用<script src="js/jump.js"></script>
,如果打开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
因此,只要让浏览器知道查找一个路径即可。 祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.