如何在没有对html中的图像进行硬编码的情况下,从java servlet实现图像幻灯片?

时间:2012-01-20 20:39:31

标签: java javascript html servlets

作为一项学习练习,我修改了BalusC编写的一系列Java servlet,用于存储上传到mysql数据库中的图像列表。应用程序正常工作,并以html中静态从数据库中读取的顺序显示图像列表。但是,我正在尝试调整html以幻灯片形式动态显示这些内容。我在互联网上找到了几个例子,但它们似乎都在浏览器代码中硬编码图像的名称。我正在寻找一种方法将从数据库查询中读取的图像传输到客户端中的幻灯片。

The original source is here

在研究了几个例子后,似乎使用javascript是最常用的方法,但是我找不到一个动态的例子,这是我的尝试(我在java servlet中使用嵌入了html的javascript)它没有做更多的事情,打印出页面上连续列表中的图像标题(但没有图像):

try { Class.forName(driver); Connection con = DriverManager.getConnection(url+dbName, userName, password); PreparedStatement ps = con.prepareStatement("select * from photos"); ResultSet rs = ps.executeQuery(); out.println("<h1>Photos</h1>"); while ( rs.next()) { out.println("<h4>" + rs.getString("title") + "</h4>"); out.println("<script type=\"text/javascript\">"); out.println(" function clearScreen(){"); out.println(" document.image.src=displayphoto?id=\" + rs.getString(\"id\")\""); out.println(" document.body.innerHTML=\"\";"); out.println(" setTimeout('clearScreen()','5000');}"); out.println("</script>"); } con.close(); }

有关更好的方法的任何指针或建议,即使纯粹使用Java servlet,也会非常感激。

非常感谢

阿拉斯泰尔

1 个答案:

答案 0 :(得分:1)

此代码生成一个<script>块,为表中找到的每张照片定义相同的clearScreen函数(但在每次迭代时使用不同的照片ID)。

目前还不是很清楚你要做什么。要进行幻灯片放映,您必须迭代图片ID列表。您可以存储此ID列表

  • 作为HTML代码中的JavaScript数组。 servlet代码必须生成定义ID数组的JavaScript代码
  • 作为服务器端的迭代器,在会话属性中。要显示下一张照片,displayphoto servlet必须从会话中获取迭代器,获取其下一个ID,并提供具有此ID的图像的字节
  • 不通。每次必须显示新照片时,其索引将传递给displayphoto servlet,并且servlet将生成SQL查询以在此索引处获取照片。当然,SQL查询必须使用某种排序顺序才能始终以相同的顺序返回照片。

如果你的目标是实现第一个解决方案,那真的不难。以下是在JavaScript中声明三个ID(id1,id2和id3)的数组:

var ids = ['id1', 'id2', 'id3'];

因此,您所要做的就是生成上面的字符串frm List<String>,其中包含"id1""id2""id3"。一个简单的循环可以做到:

StringBuilder jsArrayDeclaration = new StringBuilder();
jsArrayDeclaration.append("var ids = [");
boolean first = true;
for (String id : listOfIds) {
    if (!first) {
        jsArrayDeclaration.append(", ");
    }
    first = false;
    jsArrayDeclaration.append("'");
    jsArrayDeclaration.append(id);
    jsArrayDeclaration.append("'");
}
jsArrayDeclaration.append("];");