我正在使用 Java、JSP 和 Jetty 开发一个网站。
我在 <img>
的 src 中传递的图像路径遇到一些问题标签。
在我的数据库中,我有用户图像的 Linux 绝对路径。我获取这个值并将其放入“src”属性中。
我有路径,例如:
- /home/website/images/image1.png
这样一来,图像就不会出现了。 想了很久,我得出的结论是,这是很自然的,因为我从未在任何网站图像中看到过这样的路径到操作系统的绝对路径。
我需要知道的是我必须做什么?
我必须改变 Jetty 的配置吗? 我必须用 Java 运行一些代码吗?
通过谷歌搜索,我变得更加困惑。我想要一个解释。
更新(2013年3月26日)
我找到了解决这个问题的方法:
http://balusc.blogspot.com.br/2007/04/imageservlet.html
谢谢BalusC!哈哈哈哈哈
最佳答案
确实,<img src>
必须引用公共(public) Web URL,而不是本地磁盘文件系统路径。您的图像必须可通过 HTTP 请求获取。即网络浏览器必须下载它们,而不是网络服务器必须以某种方式包含它们。
对于初学者来说,最直接的方法是创建一个 servlet,以 InputStream
形式获取图像内容。通过FileInputStream
基于请求参数或路径信息,然后以通常的Java IO方式将其写入OutputStream
HttpServletResponse
的,在设置必要的 HTTP 响应 header 以便浏览器了解如何处理它之后。
例如,假设 servlet 映射到 /images/*
然后您将图像打开为 http://example.com/contextpath/images/image1.png :
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.
另一种方法是添加 /home/website/images
作为服务器的新 Web 应用程序上下文,上下文路径为 /images
。这样图像就可以通过 http://example.com/images/image1.png 获得。您只依赖于 servletcontainer make/version 如何配置它以及您是否对其具有完全的管理控制权。对于 Jetty,如果您以编程方式管理它,则如下所示:
server.setHandler(new WebAppContext("/home/webapp/images", "/images"));
或者当您通过 XML 管理它时:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="resourceBase">/home/website/images</Set>
<Set name="contextPath">/images</Set>
</Configure>
关于java - 在JSP中显示带有绝对路径的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10509192/