我正在使用Java,JSP和Jetty开发网站。
我在<img>
标签的src中传递的图片路径有问题。
在我的数据库中,我拥有用户图像的Linux绝对路径。我得到这个值并放入“src”属性。
我有路径,例如:
这样,图像不会出现。 经过长时间思考,我得出的结论很自然,因为我从来没有在任何网站图片中看到过这样一条通往操作系统绝对路径的路径。
我需要知道的是我必须做什么?
我是否必须改变Jetty的配置? 我是否必须在Java中运行一些代码?
通过Google搜索,我更加困惑。我想要一个解释。
更新(2013年3月26日)
我找到了解决这个问题的方法:
http://balusc.blogspot.com.br/2007/04/imageservlet.html
谢谢BalusC! hauhauhahaua
答案 0 :(得分:2)
实际上,<img src>
必须引用公共Web URL,而不是本地磁盘文件系统路径。您的图像必须通过HTTP请求提供。它是必须下载它们的webbrowser,而不是必须以某种方式包含它们的网络服务器。
对于初学者来说,最直接的方法是创建一个servlet,它根据请求参数或路径信息通过InputStream
获取FileInputStream
的图像内容,然后以通常的Java IO方式写入在设置了必要的HTTP响应标头之后,OutputStream
的{{1}},以便浏览器了解如何处理它。
例如,假设servlet映射到HttpServletResponse
并且您将图像打开为http://example.com/contextpath/images/image1.png:
/images/*
另一种方法是将String filename = request.getPathInfo();
File file = new File("/home/website/images", filename);
response.setHeader("Content-Type", getServletContext().getMimeType(filename));
response.setHeader("Content-Length", String.valueOf(file.length()));
InputStream input = new FileInputStream(file);
OutputStream output = response.getOutputStream();
// Stream bytes the usual way.
作为新的Web应用程序上下文添加到服务器,并使用上下文路径/home/website/images
。这样,http://example.com/images/image1.png可以使用图像。您只需依赖于servletcontainer make / version如何配置它,以及您是否对其进行完全管理控制。对于Jetty,如果您以编程方式管理它,那将是以下内容:
/images
或者当您通过XML管理它时:
server.setHandler(new WebAppContext("/home/webapp/images", "/images"));
答案 1 :(得分:0)
根据您在URI中使用的单词判断,您看起来就是将文件路径放在src属性中的文件系统上,而不是唯一标识资源的URL。
绝对路径不是文件系统的绝对路径,它们绝对来自Web服务器的根目录。此外,甚至可以更改或修改这些URL资源标识符,以映射到服务器中的不同文件夹甚至动态资源。
以下是一个例子:
服务器上文件的路径:
/home/website/images/image1.png
example.com映射到“website”文件夹:
使用相对网址时,您可能会看到:
<img src="/images/image1.png" />
要使用绝对URL,您需要HTTP方案:
<img src="http://example.com/images/image1.png" />
总之,使用文件路径从客户端识别服务器上的资源HTML只是不正确,不起作用。