在JSP中显示本地磁盘映像(Web上下文中的映像)

时间:2014-09-16 18:22:43

标签: java jsp servlets controller

我做了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,我正确地显示系统,我认为它不适用于文件路径因为/(我认为它显而易见)但我不知道如何解决这个问题

1 个答案:

答案 0 :(得分:1)

您需要将图像添加到Web应用程序根目录的子目录中。

我假设您的应用程序根目录是{web_apps} / yourapp。在这个目录下,你将有一些子导演,如WEB-INF,样式,图像。

将所有图像放入/ yourapp / images /(此文件夹可从公共场所访问)。

在JSP中

<img src="${pageContext.request.contextPath}/images/${file}" height="42" width="42" /> 

<强>已更新

由于图像位于不在Web应用程序根目录中的固定文件夹中,因此我们无法使用上述解决方案。

这是正确的解决方案:

  1. 使用DES / AES加密将图像路径(绝对paht /相对路径)转换为VALID URL变量 - 输出可以是Base16,Base64编码。

  2. 将based16,Base64编码路径转换回public void getImage函数中的图像路径

    @Get("/getImage/{path}")     
    public void getImage(String path) {
    
        // path is in based16/Base64 encoding
    
        String pathOfImage = functionToConvertEncodedPathToRealPath ( path)
    
    }