Java Tomcat-在WEB-INF中显示图像

Java Tomcat-在WEB-INF中显示图像,java,jsp,tomcat,servlets,Java,Jsp,Tomcat,Servlets,我目前正在开发一个JSP/Servlet应用程序,不希望私人图片被其他不拥有它们的用户访问 我的问题是,用户只需在html查看器中重写路径就可以访问资产,这就是为什么我必须将图片放入WEB-INF文件夹中,以避免从外部访问它们 图片位于/tomcat/myProject/ROOT/WEB-INF/Users/%userName%/ 但是现在图像已经在WEB-INF中了,我无法用servlet加载它们 有人知道如何访问图片,将其保存在会话属性中,并且只让请求JSP的用户可以看到它们吗 编辑: 我将

我目前正在开发一个JSP/Servlet应用程序,不希望私人图片被其他不拥有它们的用户访问

我的问题是,用户只需在html查看器中重写路径就可以访问资产,这就是为什么我必须将图片放入
WEB-INF
文件夹中,以避免从外部访问它们

图片位于
/tomcat/myProject/ROOT/WEB-INF/Users/%userName%/

但是现在图像已经在WEB-INF中了,我无法用servlet加载它们

有人知道如何访问图片,将其保存在会话属性中,并且只让请求JSP的用户可以看到它们吗

编辑: 我将Kaleb Brasee的代码插入到我的方法中:

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ...
    BufferedImage image = ImageIO.read(new File(profilePicturePath));
    OutputStream responseStream = response.getOutputStream();
    ImageIO.write(image, "JPEG", responseStream);
    //session.setAttribute("profilepicture", PLACEHOLDER);  //PLACEHOLDER should be replaced by the actual Image, but I dont know how to do this
    //response.sendRedirect("/Index"); //doesnt get executed, because ImageIO.write(...) already commits a response before this line of code is reached
}
执行时,上面的代码将显示一个带有
img
标记的html页面,其中包含
WEB-INF
文件夹中的图像,但没有其他内容

这不是期望的行为,我需要将
ImageIO.write(…)
输出保存为会话属性,以便将其插入到
/Index
JSP页面中的特定位置


关于如何解决这个问题有什么想法吗?

您可以创建一个servlet,将图像ID作为请求参数。如果用户有权查看文件,则将其写入输出流,否则返回HTTP错误响应

该方法对于将加载的映像写入HttpServletResponse输出流非常有用

在加载PNG并将其写入响应之前,我使用了一些代码,如下所示:

response.setContentType("image/png");
BufferedImage image = generateImage(); // my custom method to create an image
OutputStream responseStream = response.getOutputStream();
ImageIO.write(image, "PNG", responseStream);

谢谢你的回答,现在就开始查看好吧,现在图像似乎加载了,但是占用了整个html文档,你知道如何将图片保存为会话属性吗?你可以通过
request.getSession().setAttribute()
将任何内容设置为会话属性。但是,在会话中存储像图像这样大的内容是有问题的,因为应用程序会扩展,因为它会占用大量RAM。嘿,Kaleb Brasee,感谢到目前为止的帮助,我已经尝试解决了几个小时的问题,但仍然无法使其正常工作。我更新了我原来的帖子,你能看看吗?你有没有考虑过制作一个单独的servlet来显示图像,然后从你的索引JSP文件中引用这个servlet?例如,创建ImageServlet.java类,在web.xml中将其设置为
/image
映射,然后让主index.jsp使用
“/>
标记。