Web services 如何通过指定文件的URL来访问JAX-RSWeb服务目录中的文件?

Web services 如何通过指定文件的URL来访问JAX-RSWeb服务目录中的文件?,web-services,rest,tomcat,jax-rs,Web Services,Rest,Tomcat,Jax Rs,给定一个部署在Tomcat下的JAX-RSWeb服务,如何通过指定URL(如http://site/path/file 假设我有一个返回HTML网页的web服务方法,我需要在该网页中加载存储在web服务目录中的CSS文件或图像文件。例如: @GET @Path("/") @Produces(MediaType.TEXT_HTML) public synchronized String root() { String head = "<head><link href=\"

给定一个部署在Tomcat下的JAX-RSWeb服务,如何通过指定URL(如
http://site/path/file

假设我有一个返回HTML网页的web服务方法,我需要在该网页中加载存储在web服务目录中的CSS文件或图像文件。例如:

@GET
@Path("/")
@Produces(MediaType.TEXT_HTML)
public synchronized String root() {
    String head = "<head><link href=\"path/style.css\" rel=\"stylesheet\"></head>";
    String head = "<body><img src=\"path/image.jpg\"/></body>";
    return "<html>"+ head + body + "<html>";
}
@GET
@路径(“/”)
@生成(MediaType.TEXT\u HTML)
公共同步字符串根(){
弦头=”;
弦头=”;
返回“+头+体+”;
}

我应该把文件放在web服务目录中的什么位置(
WebContent
META-INF
web-INF
,等等)以及我应该把什么路径放在html页面中?

您基本上有三个选择:

如果您将文件作为外部资源,则绝对链接有效。对于样式、脚本或图像等静态资源来说,相对URL在大多数情况下都是一个难题,因为它们必须从引用它们的位置开始解析(它们可以是各种形式,如
images/image.jpg、../image.jpg、../images/image.jpg
等)

因此,首选的方法是在应用程序中的已知位置放置样式、脚本或图像,并使用根链接(斜杠前缀URL)访问它,如
/images/image.jpg

您的文件夹必须位于应用程序的文件夹中(
WebContent
)。将某些内容放在WEB-INF下会隐藏资源,客户端无法再访问它

这些链接解析到应用程序的根目录,因此必须说明上下文路径。一个基本的例子如下:

@GET
@Path("whatever_path_might_be")
@Produces(MediaType.TEXT_HTML
public String root(@Context ServletContext ctx) {
    String ctxPath = ctx.getContextPath();
    String stylesFolder = ctxPath + "/Styles";
    String imagesFolder = ctxPath + "/Images";

    String head = "<head><link href=\"" + stylesFolder + "/style.css\" rel=\"stylesheet\"></head>";
    String body = "<body><img src=\"" + imagesFolder + "/image.jpg\"/></body>";
    return "<html>"+ head + body + "<html>";
}
例如:

resources.cssFolder=/appcontext/styles
resources.imgFolder=/appcontext/images
resources.cssFolder=http://external.server.com/styles
resources.imgFolder=http://external.server.com/images

不改变一行代码。

我用
getContextPath
getRealPath(“image.jpg”)
尝试了这两种方法,但似乎都不起作用。我正在Ubuntu 12.10上本地测试它,Tomcat7在Eclipse下运行。文件确实位于文件系统中
~/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/MyWebService
下的正确位置。浏览器上已检查的元素显示未找到
404
。Tomcat服务器登录
~/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/logs/
时说
127.0.0.1---[15/Mar/2013:11:02:44+0100]“GET/MyWebService/image.jpg HTTP/1.1”404 967
。我做了一些测试,如果我将文件从
../wtpwebapps/MyWebService
移动到
../wtpwebapps/ROOT
,一切正常,没有上下文路径作为URL前缀。@Krige:您是否将文件放在
…org.eclipse.wst.server.core/tmp0/wtpwebapps/MyWe中了‌​b手动创建b服务
文件夹,还是将它们添加到Eclipse中的Java项目中,然后进行部署?我已将Tomcat设置为在Eclipse中作为服务器运行。我处理Eclipse项目中的文件,每次更改都会自动部署到wtpwebapps中,Tomcat会重新启动。@克里格:如果文件部署到正确的路径,并且链接正确,那么就没有理由不工作。确保路径区分大小写(例如,
/MyWebService/image.jpg
/MyWebService/image.jpg
不同)。您可以通过直接在浏览器中输入路径(例如
http://localhost:8080/MyWebService/image.jpg
假设这就是您放置图像文件的位置)。