实际上,<img src>
必须引用公共 Web URL,而不是本地磁盘文件系统路径。您的图像必须通过 HTTP 请求可用。即必须下载它们的是网络浏览器,而不是必须以某种方式包含它们的网络服务器。
对于初学者来说,最直接的方法是创建一个 servlet,它根据请求参数或路径信息获取图像内容InputStream
,然后在设置必要的 HTTP 响应标头之后,FileInputStream
以通常的 Java IO 方式将其OutputStream
写入HttpServletResponse
浏览器知道如何处理它。
例如,假设 servlet 被映射并且您以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.
另一种方法是将/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>