是否可以在iframe中显示从servlet(在jsp页面中)获取的java对象(通过指向iframe src)?
这是我尝试过的。 我将一个pdf文件存储在mysql数据库中作为blob类型。在Hibernate bean类中,我已将相应的变量声明为Byte []。
现在我试图像这样通过Iframe显示对象。
<% String oid = null;
oid = request.getAttribute("oid").toString();
request.setAttribute("oid",oid);
%>
<jsp:useBean id="cusBean" class="com.zoran.action.CustomBean" scope="page" >
<jsp:setProperty name="cusBean" property="parentId" value="1" />
<jsp:setProperty name="cusBean" property="parentType" value="FILE" />
</jsp:useBean>
<iframe id="displayFrame" src="<%= cusBean.getFile() %>" width="1000" height="500" FRAMEBORDER="0" value="1"></iframe>
And custom bean is the java class where I'm running the hql script to return the blob data through cusBean.getFile().
我这样做是对的吗?我怎样才能在iframe中打印java对象变量。
请帮我解决这个问题。
谢谢, 阿迪亚
答案 0 :(得分:1)
<iframe src="${cusBean.file}">
JSP编码规则#1: scriptlet不好。切勿使用它们。始终使用Taglibs / EL。如果你觉得需要编写一个scriptlet因为Taglibs / EL不可能,那么所需的代码逻辑只属于Java类(servlet,bean,filter,dao等)而不是JSP文件。
[编辑]作为对您的第一条评论的回复:“资源不可用”错误消息仅表示该网址错误。查看实际值%5BLjava.lang.Byte;@967e8c
,您似乎尝试使用String.valueOf(aByteArray)
作为网址。这毫无意义。如果$ {cusBean.file}实际上表示文件内容的风格为byte[]
(因此不是文件 URL ),那么您需要一个servlet这是读/写任务。所有它基本上需要做的是doGet()中的以下内容:
// Init servlet response.
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=\"yourname.pdf\"");
// Init streams.
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
// Preferably use InputStream, not byte[] as it is memory hogging.
input = new BufferedInputStream(getPdfAsInputStream());
output = new BufferedOutputStream(response.getOutputStream());
// Write file contents to response.
byte[] buffer = new byte[8192];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
close(output);
close(input);
}
在web.xml中映射此servlet,并在<iframe>
元素的'src'属性中调用它。如有必要,您还可以传递参数或pathinfo,以便servlet确切地知道需要将哪个PDF文件读入InputStream。例如
<iframe src="pdfservlet/${cusBean.fileName}">
然后获取如下文件名:
String fileName = request.getPathInfo();
有关更多提示,您可能会发现this article有用。
希望这有帮助。