【问题标题】:How to write stream in the same browser window using OutputStreamWriter?如何使用 OutputStreamWriter 在同一浏览器窗口中写入流?
【发布时间】:2011-11-23 00:39:03
【问题描述】:

在服务器端代码中,我正在使用 OutputStreamWriter 编写一个字符串(将其写入浏览器页面)。这会写在一个新窗口中。我需要能够在同一个窗口中写这个。

类扩展了HttpServlet,代码结构如下:

void foo(HttpServletResponse response...) {
...
    OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream());
    response.reset();
    response.setContentType("text/html");
    out.write("Hello World!"); // Or some html string
    out.flush();  
    out.close();
}    

【问题讨论】:

    标签: java html http servlets


    【解决方案1】:

    服务器端(servlet)不能也不能打开一个新窗口(幸运的是,否则用弹出窗口向客户端发送垃圾邮件将非常容易......)。客户端(浏览器)是唯一可以打开新窗口的人。您很可能在 HTML 或 JavaScript 中使用了以下结构之一,它将在新窗口中显示结果:

    <form action="servleturl" target="_blank">
    

    <a href="servleturl" target="_blank">
    

    <script>window.open('servleturl', 'windowname');</script>
    

    您需要删除 target="_blank" 以在当前窗口中获得响应,或者如果您使用的是 JavaScript,请改用 window.location = 'servleturl';


    与具体问题无关,在 servlet 中发出 HTML 是一种糟糕的做法。请改用 JSP。

    另见:

    【讨论】:

    • 我很确定我在客户端没有任何代码可以打开一个新窗口 - 我已经检查过了。另外为了确保,我什至打印了一个没有标签的字符串“Hello World”;它被打印在一个新窗口上。
    • 在浏览器地址栏中直接输入servlet URL。你会看到它没有打开一个新窗口(如果打开了,那么你的浏览器坏了)。
    • 想通了。该 URL 确实在同一窗口中打开。问题在于重定向到该 URL 的链接。您说得对,服务器无法从现有浏览器窗口打开新的浏览器窗口。
    猜你喜欢
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2014-05-29
    • 2010-11-02
    • 2014-01-17
    • 2020-06-07
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多