我从数据库中获取数据(一些字符串),我在A.jsp页面的链接中覆盖了每个字符串。现在,如果单击链接,则链接覆盖的字符串将显示在B.jsp中。在这里我注意到在数据库中我将图像存储为字符串。所以这里的字符串只是一个图像。
<% ResultSet rs=st.executeQuery("Select name,image from base64image");
int ii=0;
while(rs.next()){
if(ii==0)
out.println("<tr>");
ii=1;
%>
<td><a href="B.jsp"> <img src='<%=rs.getString(2)%>' height='200px;' width='200px' />n</a></td>
<%
i++;
if(i%3 ==0 ){
out.println("</tr>");
ii=0;
}
}
out.println("</tr> </table>");
}
好的,所以查看你的代码,使用表达式标签输出你需要的字符串。此字符串是图像源路径,然后该图像将用作B.jsp页面的单击链接。
我假设这个表达式是java,因为你使用的变量有一个对象类型,以及相应的“getString()”方法。如果是这种情况,您的代码不会将上述“rs”对象显示在jsp <%%>标记中。你在jsp文件中编写的任何java都需要在这些标记中。
<% ResultSet rs=st.executeQuery("Select name,image from base64image"); %>
这就是说以这种方式在scriptlet中使用java通常被认为是不好的做法,但是,我可以理解想要清理jsp文件,并最小化完成查询的行数。这就是说,只是为了完成这个答案,这就是你如何使用jstl标签完成同样的事情:
//first include the sql tag library in your Jsp
<%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>
<sql:query dataSource = "datasource/here" var = "result">
//full query here
SELECT * from Employees;
</sql:query>
//You can then use the result variable using standard jsp
//Here you can grab the row, or sift through multiple results, etc.
<c:forEach var = "row" items = "${result.rows}">
<a href="B.jsp"> <img src='${row.columnName}' height='200px;' width='200px' />n</a>
</c:forEach>
信息和示例here
然而,这是你的jsp中的很多代码,甚至不是最好的解决方法。因为您只希望返回一行,所以您将被迫处理结果,就好像它返回了多行一样。 (但是,如果你需要将这些信息放入表格格式,这很棒)
另一种解决方案是使用java servlet。我不能完全推荐这个,因为我不知道你的代码的结构。这可能很容易,也可能很难在您的系统中实现。然而,这仍然没有超越单线方法。
如果你是通过一个单独的servlet类完成这个,你基本上可以通过jsp中的ajax调用或者使用this answer中提到的其他各种方法来调用类。
我希望我帮助你解决问题,并帮助其他任何偶然发现这个问题的人!
在A.jsp中传递带有锚标记的Id
'<a href="B.jsp?Id="<%rs.getString(1)%>"> <img src='c%></a>
现在在B.jsp中从数据库中检索所有名称第1列值。如果它与此id值匹配,则使用标记显示图像
<img src="<%=rs.getString(2)" />