window.open重定向到URL,但原始窗口在重定向后显示一个白色空白页

时间:2014-10-10 16:46:46

标签: java servlets redirect

PrintWriter out = response.getWriter(); 
out.print("<script>");
out.print("window.open('http://chfdsd/manu/zseriessection9.pdf','_blank')");
out.print("</script>"); 

此代码段位于struts的动作类中。我正在使用它在新窗口中重定向到URL。但是,执行此脚本后,父窗口不应更改。但事实并非如此。请帮忙!

1 个答案:

答案 0 :(得分:0)

这是因为您正在向服务器执行直接请求。服务器响应就是那段将在您的浏览器客户端中编写的硬编码JavaScript。如果您查看空白页的源代码,您将看到该代码:

<script>
    window.open('http://chfdsd/manu/zseriessection9.pdf','_blank')
</script>

所以它没有显示空白页,只是没有要显示HTML组件的响应。

要解决您的问题,您有一些选择:

  • 在新页面/选项卡中执行此请求,然后servlet请求返回重定向到所需页面/内容。例如:

    <form action="${request.contextPath}/path/to/Servlet" target="blank">
        <!-- your form components... -->
    </form>
    

    在你的Servlet中:

    response.redirect("http://chfdsd/manu/zseriessection9.pdf");
    //no need to use PrintWriter at all
    
  • 执行ajax请求,返回要导航的URL。然后,处理ajax响应以在新页面中导航到此URL。使用jquery:

    $.post("${request.contextPath}/path/to/Servlet", function(response) {
        window.open(response, 'blank');
    });
    

    然后在你的servlet中:

    PrintWriter out = response.getWriter(); 
    out.print("http://chfdsd/manu/zseriessection9.pdf");
    

请注意,有更多优雅的解决方案,但其中任何一个都可以。