我做了servlet,以便在.JSP页面中访问图像路径
public void nova() {
System.out.println("Nova Certidão");
certidoes = new File("C:\\imagens\\").listFiles();
List<String> paths= new ArrayList<String>();
for (File arquivo : certidoes) {
paths.add(arquivo.getPath());
}
result.include("files", caminhos);
}
现在在页面中我可以访问arraylist文件中磁盘中的文件路径
在jsp中我有这个来显示图像:
<c:forEach items="${files}" var="files">
${file} -
<img src="/getImage/${file}" height="42" width="42">
<br>
</c:forEach>
我的getImage是这样的:
@Get("/getImage/{path}")
public void getImage(String path) {
//here will come all the way to send the stream of the image if i receive the path
System.out.println(path);
}
但它不起作用,因为它创建了一个奇怪的请求图像路径:
它创建:
/getImage/C:/imagens/image1.jpg
所以它不工作,如果我手动输入:/ getImage / image1,我正确地显示系统,我认为它不适用于文件路径因为/(我认为它显而易见)但我不知道如何解决这个问题
答案 0 :(得分:1)
您需要将图像添加到Web应用程序根目录的子目录中。
我假设您的应用程序根目录是{web_apps} / yourapp。在这个目录下,你将有一些子导演,如WEB-INF,样式,图像。
将所有图像放入/ yourapp / images /(此文件夹可从公共场所访问)。
在JSP中
<img src="${pageContext.request.contextPath}/images/${file}" height="42" width="42" />
<强>已更新强>
由于图像位于不在Web应用程序根目录中的固定文件夹中,因此我们无法使用上述解决方案。
这是正确的解决方案:
使用DES / AES加密将图像路径(绝对paht /相对路径)转换为VALID URL变量 - 输出可以是Base16,Base64编码。
将based16,Base64编码路径转换回public void getImage函数中的图像路径
@Get("/getImage/{path}")
public void getImage(String path) {
// path is in based16/Base64 encoding
String pathOfImage = functionToConvertEncodedPathToRealPath ( path)
}