Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JSP中加载图像需要很多时间_Java_Jsp_Jdbc_Struts2_Batch Processing - Fatal编程技术网

Java 在JSP中加载图像需要很多时间

Java 在JSP中加载图像需要很多时间,java,jsp,jdbc,struts2,batch-processing,Java,Jsp,Jdbc,Struts2,Batch Processing,我有一个场景,通过循环从Oracle数据库获取多个图像。但是获取图像并将其显示在浏览器上需要花费大量时间。 通过这段代码,我用一些参数调用我的方法 for(Object[] obj: memberDetails) { System.out.println("String.valueOf(obj[0])"+String.valueOf(obj[0])); try{ memberImage=dtSrvc.getQueImageForQC(Id,String.valu

我有一个场景,通过循环从Oracle数据库获取多个图像。但是获取图像并将其显示在浏览器上需要花费大量时间。 通过这段代码,我用一些参数调用我的方法

for(Object[] obj: memberDetails)
{
    System.out.println("String.valueOf(obj[0])"+String.valueOf(obj[0]));

    try{
        memberImage=dtSrvc.getQueImageForQC(Id,String.valueOf(obj[0]));
    }
    catch(Exception e)
    {}

    map.put("memImage"+count, memberImage);
    key.add("memImage"+count);
    hmap.put("memImage"+count, memberImage);
    count++;
}  
这是我的查询,通过它我可以获取图像

ps = conn.prepareStatement("select photo from member_photo where ID='"
                        + Id + "' and que_id=" + QueId);
请让我知道如何加快这个过程。
如果网络速度较慢,我无法获取所有图像。我的应用程序目前被许多人使用。

我的建议是先获取图像,并将它们作为纯文件(temp)保存在应用程序的可访问公共文件夹中,然后使用
img
标记使用简单图像资源简单地指出它们。
过程如下。
1.
查询图像并将其保存在
/a_public_文件夹/images/…
下,每个图像将命名为
1.jpeg
2.jpeg
,其中1和2是ID(唯一)。
2.
使用简单的上下文(如
list\u id:list

)保存从数据库检索到的id
3.
您的最终servlet如下所示

for(long idx:list_id){
  out.print("<img src=\"/a_public_folder/images/"+idx+".jpeg\"/>");
}
for(长idx:list\u id){
输出。打印(“”);
}
4.
您还可以对
/a_public_文件夹/images/*
路径应用过滤器,以便只允许有权查看内容/图像的用户
5.
使用会话侦听器删除特定用户会话的关联(获取)映像,或者使用守护进程线程清理目录(映像不再具有链接)间隔。


但我建议将图像从数据库提取到简单的纯文件中,并将图像路径保留到数据库中。

问题在于,您使用单独的查询从数据库中获取每个图像。这会增加网络开销。您可以尝试这里描述的许多解决方案,将代码更改为执行一个查询而不是多个查询。看看怎么做


如果
id
是表中的主键,您不需要
queu id

1)我真的怀疑这是否是您的瓶颈2)不要在查询中使用任意字符串-而是使用参数(
其中id=?和queu id=?
+
ps.setString(1,id);ps.setString(2,queId);
)这解决了我的问题吗?不要使用javascript来显示图像,javascript非常慢。不,我没有使用javascript。为什么在查询中需要第二个参数?
ID
不是主键吗?
ps = conn.prepareStatement("select photo from member_photo where ID in (" + inClause.toString() + ')');