`

iframe和response.sendRedirect跳出父窗口问题

阅读更多
转自
http://blog.sina.com.cn/s/blog_4e180c920100o808.html


一般使用filter过滤用户是否登录,如果用户没有登陆则转向登陆页面,这时候可以使用response.sendRedirect()。
但当在页面上使用了iframe后,发现被重定向的只是父页面中的iframe区域,登陆页面内容显示在该区域中。说明在过滤器中发送重定向请求时,是在iframe页面发送的。错误的代码如下:
  HttpServletRequest req = (HttpServletRequest) request;  
Visitor visitor = (Visitor) req.getSession().getAttribute("visitor");  
if (visitor == null)  
{  
     ((HttpServletResponse) response).sendRedirect("/smpc/login/login.jsp");  
}  
chain.doFilter(request, response); 

  因为response.sendRedirect()没有target属性,但html页面和js中有,于是,当判断出用户没有访问权限时,我们可以在jsp中使用js来转向到真正的登录页面。在filter类的doFilter方法中添加如下代码:
HttpServletRequest req = (HttpServletRequest) request;  
Visitor visitor = (Visitor) req.getSession().getAttribute("visitor");  
if (visitor == null)  
{  
    java.io.PrintWriter out = response.getWriter();  
    out.println("<html>");  
    out.println("<script>");  
    out.println("window.open ('/smpc/login/login.jsp','_top')");  
    out.println("</script>");  
    out.println("</html>");  
}  
chain.doFilter(request, response);

分享到:
评论

相关推荐

    jsp response.sendRedirect不跳转的原因分析及解决.docx

    ### jsp response.sendRedirect不跳转的原因分析及解决 #### 一、问题背景 在进行Web应用开发的过程中,经常需要使用到服务器端重定向的技术。在Java Server Pages (JSP) 技术中,`response.sendRedirect()` 是一...

    Jsp利用response.sendRedirect、cookie传参

    ### JSP中利用`response.sendRedirect`与...总之,在JSP开发中,熟练掌握`response.sendRedirect`和Cookie的使用,能够帮助开发者更灵活地控制页面流程,有效管理用户数据,从而构建更加健壮和高效的Web应用程序。

    jsp response.sendRedirect()用法详解.docx

    首先,我们需要了解response和request对象。response对象是JSP中的内置对象,负责处理用户的请求,而request对象则是猎取用户的恳求。sendRedirect()函数正是使用response对象来实现重定向的。 sendRedirect()函数...

    jsp response.sendRedirect不跳转的原因分析及解决

    对于如何进行页面跳转以及如何解决跳转中出现的问题,response.sendRedirect()是其中一种常用的方法。然而,在实际使用时,开发者可能会遇到response.sendRedirect()不跳转的情况。以下是对这个问题的原因分析及解决...

    sendRedirect()和forward()

    sendRedirect()和forward()方法的区别 sendRedirect()和forward()方法都是Servlet编程中常用的方法,它们可以将客户端的请求重定向或转发到其他的资源,如Servlet、JSP页面或HTML文件中。但是,这两个方法之间存在...

    数据库测试test.sql

    response.sendRedirect(request.getContextPath()+"/admin/login.jsp"); } public void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //...

    jsp的跳转方式总结

    * 不能在 response.sendRedirect() 之前使用 out.flush(),否则将抛出 java.lang.IllegalStateException 异常。 * 跳转后,浏览器地址栏将发生变化。 * 如果跳转到不同主机下,response.sendRedirect() 之后的语句将...

    Response,内置对象.

    响应(Response)是Java Servlet和JSP中的一个内置对象,它是服务器向客户端发送响应的核心组件。在JSP初学者的学习过程中,理解并掌握Response对象及其常用方法是非常重要的。 1. **Response对象的基本概念** ...

    JSP中5种跳转foward,request等等的详细区别

    JSP 中有五种跳转方式,包括 RequestDispatcher.forward()、response.sendRedirect()、jsp:forward、RequestDispatcher.include() 和 HttpServletResponse.sendRedirect()。下面我们将详细介绍这五种跳转方式的区别...

    jsp和servlet中实现页面跳转的方式实例总结.docx

    JSP 和 Servlet 中实现页面跳转的方式实例总结 在 web 开发中,页面跳转是一个非常常见的需求,JSP 和 Servlet 是 Java Web 开发中两个最基本的组件,了解它们如何实现页面跳转是非常必要的。本文将根据 JSP 和 ...

    jsp返回登陆前的页面的几种实现

    ### jsp返回登录前的...通过以上几种方法,不仅可以解决`response.sendRedirect()`在使用过程中的常见问题,还可以实现更加灵活和友好的用户界面设计。在实际应用中,开发者可以根据项目的具体需求选择最合适的方式。

    用户管理系统(ums)

    用户管理系统。语言JAVA public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, ... response.sendRedirect(request.getContextPath()+"/manager.jsp"); }

    Servlet跳转方式sendReDirect

    在Servlet中,有两种主要的跳转方式:`RequestDispatcher.forward()`和`ServletResponse.sendRedirect()`。这两种方法在处理客户端请求时有不同的行为和应用场景。 1. `RequestDispatcher.forward()` - `forward()...

    7request和response.docx

    response.sendRedirect("response.jsp"); // response.jsp Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { out.println("Cookie名称:" + cookie.getName() + ", 值:" + cookie....

    Response-Headers详解

    ### Response-Headers详解 #### HTTP响应报头的基本概念与作用 HTTP响应报头是Web服务器向客户端(通常是浏览器)发送响应时附带的信息。这些报头提供了关于响应本身的元数据,如响应的内容类型、长度等,对于正确...

    JSP内置对象request和response.doc

    JSP内置对象request和response详解 JSP内置对象request和response是JSP开发中两个非常重要的对象,它们分别用于处理客户端请求和响应信息。在本文档中,我们将详细介绍request和response对象的功能和使用方法。 ...

    response设置的实例源码

    response.sendRedirect("/newLocation"); ``` 2. 转发:`RequestDispatcher`的`forward(ServletRequest request, ServletResponse response)`方法可以在服务器端将请求转发到另一个资源。这不会改变客户端的URL。 ``...

    java小项目

    response.sendRedirect("jspPages/login.jsp"); }else{ HttpSession session = request.getSession(); session.setAttribute("userName", name); session.setAttribute("pwd", pwd); session.setAttribute(...

    jsp跳转的五种方式

    与 `RequestDispatcher.forward()` 不同,`response.sendRedirect()` 是一种客户端的跳转方式。这意味着它可以在用户的浏览器端完成跳转操作,并且可以携带参数进行传递。例如,从一个页面传递参数到另一个页面。 *...

Global site tag (gtag.js) - Google Analytics