如果在Jersey';中使用子资源,则找不到JavaScript文件;s@Path注释
我有一个Jersey REST web服务,下面是我的URL路径资源类如果在Jersey';中使用子资源,则找不到JavaScript文件;s@Path注释,java,javascript,url,servlets,jersey,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.
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>
这并不完美,因为可以稍后更改上下文根路径/myapp
。所以我不想在HTML文件的任何地方添加/myapp
。此外,my webapp中的物理目录布局如下所示:
WebContent
|
|_____ homepage.html
|
|_____ js
|
|____ jump.js
那么,如果我在homepage.html
中使用
,即使js/jump.js
和homepage.html
在服务器的同一个web根目录中,为什么它不起作用呢?如果我以这种方式使用@path
注释,Jersey servlet是否会更改HTML和JavaScript文件的相对URL路径?我尝试了另一种不使用子资源的方式使用@Path
:
@Path("account")
这次我可以在我的主页.html中使用
,如果我打开http://localhost:8080/myapp/account
。因此,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
因此,只需让浏览器知道向上查找一条路径即可。
祝你好运 魔法!这个很好用。但是这不是有点奇怪吗,因为HTML文件homepage.HTML
与服务器上同一web根目录WebContent
下的js
文件夹处于同一目录级别。为什么服务器会对相对路径进行不同的评估?服务器上的homepage.html位于何处并不重要。就URL而言,它位于myapp/account/home上。js在myapp/js/jump.js上。相对路径删除last/之后的最后一个单词,并在新路径处连接。因此,您需要删除帐户路径。
<script src="../js/jump.js"></script>