JSP output to IFrame



我发布了另一个相关问题:Java Servlet:删除临时文件

根据@BalusC的建议,我一直在尝试实现一些不同的东西,但没有成功。

因此,我想问以下问题:是否可以在运行时将HTML内容"注入"iframe?

为了澄清,我正在使用Servlet和JSP。我有一个servlet,它在doPost上填充并显示JSP页面。页面如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script> function disp() {
  alert(document.getElementById('ifrm').contentDocument.documentElement.innerHTML); } 
</script>    
<style type="text/css">
  html, body, div { margin:0; padding:0; height:100%; }
  iframe { display:block; width:100%; height:90%; border:none; }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>This is SPARTA!!</title>
</head>
<body>
  <a href='getter?url=<%= request.getRequestURI() %>&starter=fine'>Close Session</a>
  <input type='button' onclick='disp()' value='Source'></input>
  You want me to load: <%= request.getParameter("url") %> , and here it is:
  <iframe id='ifrm' src='<%= request.getSession().getAttribute("relpath") %>'></iframe>
</body>
</html>

"relpath"是我在前一点添加到会话中的一个属性,表示临时文件的相对路径。它是有效的,但我有一个不可告人的问题:iframe中包含的页面中的链接被适当地更改,以便它们正常工作。其效果是,人们可以在iframe中导航,就好像它是一个浏览器选项卡一样。因此,当单击页面上的链接时,临时文件会重新写入链接指向的网站的内容。然而,页面不会重新加载,我认为这是因为浏览器会检索缓存的页面,而不是浏览器中的页面。我尝试通过JavaScipt刷新iframe的源代码,它开始工作了,但有延迟,页面加载了两次——我不希望这样。我还尝试过在iframe对象上用JavaScript中的document.write()来完成它,但同样没有成功。

最后一点说明:iframe应该包含页面的整个HTML,并带有<html></html>标记:我确实想过创建一个带有DIV的JSP页面,并在那里注入内容,但这也不是我想要的。。。

提前谢谢!

实际上我自己解决了这个问题。

最后,我又回到了JavaScript。使用Beans,我设法将页面的内容传递到JSP页面,然后在那里我简单地逐一"回显"文档的行。我必须告诉任何感兴趣的人,我在转义特殊字符时遇到了一些困难:在某些情况下,我必须手动转义CR和LF,并且必须处理页面中现有的</script>标记,因为它们会导致JavaScript提前退出。我设法通过将字符'<'更改为x3C来克服这个困难,正如在另一个线程SO.

上所建议的那样