【问题标题】:Write Multiple Full HTML 'Files' to Single Output Stream?将多个完整的 HTML“文件”写入单个输出流?
【发布时间】:2009-07-08 18:47:24
【问题描述】:

我正在编写一个测试实用程序 - 我想在单个浏览器窗口中显示多个完成的 HTML“页面”。

这可能吗?我正在使用 Java Servlet。

例如,通常用户进入实用程序屏幕,填写一堆字段并将其发布到我的 servlet,它根据他们的输入构建一个完整的 HTML 流并将其写入 HttpServletResponse.getWriter()。当用户查看源代码时,他们会得到一个<html> ... </html>

我想要做的是允许用户请求多个“屏幕”并在单个网页中获取结果,您可以在其中向下滚动以查看第二个、第三个等屏幕,也许有某种分隔线介于两者之间。我想到了框架或 iframe,但没有运气。我已经看到在哪里可以将我的大 html 流写入 javascript 变量,然后使用 document.write 将其转储到 iframe 中。但这似乎很尴尬,而且我必须非常小心转义引号和其他内容。

【问题讨论】:

  • 您说您尝试使用框架“但没有运气”。你能详细说明什么不起作用吗?
  • 我写出了 out.print("")。在第一个之后它没有渲染任何东西。

标签: java html servlets


【解决方案1】:

您必须使用 iframe 或框架来执行此操作。一个网页只能包含一组 html 标签,因此只能包含一个 html 页面。

另一个想法是通过您的脚本呈现页面,然后捕获它的图片,然后拥有一个包含图像的页面。您当然会失去与页面的所有交互。

【讨论】:

    【解决方案2】:

    我不确定你在用你的框架尝试什么,但我想框架应该可以按照你描述的那样工作。

    不要尝试从表单中发布到多个 URL,您只需发布到返回带有框架集的页面的 servlet,并且每个框架都有一个指向您要测试的 URL 之一的源。例如:

    <form action="testServlet" method="post">
        <input type="text" name="someValue" />
    </form>
    

    testServlet 然后返回一个包含此内容的页面:

    <frameset rows="33%,33%,33%">
        <frame src="testUrl1?someValue=value">
        <frame src="testUrl2?someValue=value">
        <frame src="testUrl3?someValue=value">
    </frameset>
    

    唯一的问题是您使用的是GET 而不是POST,但这很容易解决。您需要做的就是在您的 servlet 中实现 doGet 方法,然后从 doGet 中调用 doPost

    【讨论】:

    • 很高兴为您提供帮助。如有需要,请随时要求澄清。
    【解决方案3】:

    只需为每个页面省去&lt;html&gt;/&lt;/html&gt; 标签,然后将整个内容封装在一个大...中。

    可能是这样的:

    <html>
    
    [page1Content]
    <hr />
    [page2Content]
    <hr />
    [page3Content]
    <hr />
    
    </html>
    

    【讨论】:

    • 如果您解析不在页面正文标记内的所有内容,这将适用于简单页面。但是,如果页面包含任何 css 样式或 Javascript,则页面可能会损坏。此外,如果他关心页面的验证,那么使用此方法很有可能无法验证。 :)
    • 同意,我的方法是快速而肮脏的方法。
    • 对,但我希望每个页面在标题等中可能有单独的 CSS 定义。我认为 iframe 是要走的路,只是不确定如何在不指定的情况下将我的内容放入框架中它通过 src= 属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多