【问题标题】:Load image Dynamically via Java servlet通过 Java servlet 动态加载图像
【发布时间】:2021-04-14 17:35:36
【问题描述】:

我正在尝试将图像从服务器加载到我的 JSP

我的文件是:

image.jsp

<img src='servlet1' height='300px'/>

DisplayImage.java

public class DisplayImage extends HttpServlet {
    
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
       response.setContentType("image/jpeg");
       ServletOutputStream out;
       out = response.getOutputStream();    
       FileInputStream fin = new FileInputStream("path/to/my/img.jpg"); 
       BufferedInputStream bin = new BufferedInputStream(fin);
       BufferedOutputStream bout = new BufferedOutputStream(out);
       int ch =0;
       while((ch=bin.read())!=-1){
            bout.write(ch);
       }    
       bin.close();
       fin.close();
       bout.close();
       out.close();
    }
}

我应该构建的应用程序是一个车辆目录,我可以在其中上传图像,这些图像存储在 /home/upload/ 外部 CATALINA 的文件夹中 (注意:我没有使用项目目录中的文件夹,因为我正在通过 *.war 文件部署项目,当需要新版本时会删除其中的所有文件部署。)

我想根据搜索参数显示详细信息和图像。

( 编辑:我上传文件时将文件名存储在数据库中,因此可以从数据库中获取特定车辆的图像名称列表,因为它存储在文件夹/home/upload/ ,完整路径将类似于/home/upload/fileName.jpg,我需要将其传递给 servlet 以加载)

我面临的问题是:

image src 属性被指定为servlet1,servlet 默认提供来自 DisplayImage.java 文件中定义的路径的图像

有什么方法可以将/another/file/Path.jpgfileName.jpg 传递给servlet,以便我也可以显示其他图像文件,

【问题讨论】:

  • 请更清楚您想要实现的目标。您想如何将图像路径传递给您的 servlet?通常你有一个包含图像的文件夹,并让默认的 servlet 传递图像。或者您的 servlet 可以评估 URL 路径或 GET 参数以确定图像名称。您应该首先定义预期的行为,然后考虑实施。
  • 这个有帮助,不知道将参数传递给 Servlet ,将 srcservlet1?imagePath=/home/upload/one.jpg 更改为非常感谢
  • 你应该小心这种绝对路径。这可能是一个安全漏洞。有人可以使用您的 servlet 读取您系统上的每个文件。
  • 不,我只是在 src 属性中传递文件名,如:&lt;img src="servlet?img='myImage.jpg' alt='Image not loaded' /&gt; 并且路径在 servlet 内部进行评估。感谢您提及该漏洞:)

标签: java image servlets tomcat8


【解决方案1】:

是的,在 JSP 中,您可以在请求中传递您的搜索参数。 喜欢

<input id="imageSerach" name="imageSerach"/>
<div id="ImageContent"/> 

并使用 imageSearch 参数对 servlet 进行 ajax 调用。

$.ajax({
  url: servleturl,
  data: {
    imageSerach : $('#imageSerach').val()
  },
  success: function(responseData){
    $('#ImageContent').html('<img src="data:image/png;base64,' + responseData + '" />');
  }
});

小服务程序:-

公共类 DisplayImage 扩展 HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{

   String fileName = req.getParameter("imageSerach");

   response.setContentType("image/jpeg");
   ServletOutputStream out;
    File f = new File("path/of/file/"+fileName);
    if (f.exists())
       out = response.getOutputStream();    
       FileInputStream fin = new FileInputStream("path/of/file/"+fileName); 
       BufferedInputStream bin = new BufferedInputStream(fin);
       BufferedOutputStream bout = new BufferedOutputStream(out);
       int ch =0;
       while((ch=bin.read())!=-1){
            bout.write(ch);
       }    
       bin.close();
       fin.close();
       bout.close();
       out.close();
    else
       // no file exit
   
}

}

【讨论】:

  • 嗨,我只是想从&lt;img/&gt; 中的 src 属性调用一个 servlet,只需将文件名传递给 servlet,这样它就可以帮助 servlet 识别要提供的文件。您的解决方案在直接搜索文件名作为输入的情况下有效,但我愚蠢的问题是将一个值传递给 servlet,这是简单的 GET 方法 &lt;img src="servlet?img='myImage.jpg' alt='Image not loaded' /&gt; ,无论如何感谢您的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2018-03-22
  • 2012-04-06
  • 2013-06-01
  • 1970-01-01
  • 2012-04-15
  • 2011-02-22
相关资源
最近更新 更多