iframe和response.sendRedirect使用的问题

一、iframe下使用response.sendRedirect的问题

一般使用filter过滤用户是否登录,如果用户没有登陆则转向登陆页面,这时候可以使用response.sendRedirect()。

但当在页面上使用了iframe后,发现被重定向的只是父页面中的iframe区域,登陆页面内容显示在该区域中。说明在过滤器中发送重定向请求时,是在iframe页面发送的。错误的代码如下

Java代码

  1. HttpServletRequest req = (HttpServletRequest) request;
  2. Visitor visitor = (Visitor) req.getSession().getAttribute("visitor");
  3. if (visitor == null)
  4. {
  5. ((HttpServletResponse) response).sendRedirect("/smpc/login/login.jsp");
  6. }
  7. chain.doFilter(request, response);

因为response.sendRedirect()没有target属性,但html页面和js中有,于是,当判断出用户没有访问权限时,我们可以在jsp中使用js来转向到真正的登录页面。在filter类的doFilter方法中添加如下代码

Java代码 "); out.println("

  1. HttpServletRequest req = (HttpServletRequest) request;
  2. Visitor visitor = (Visitor) req.getSession().getAttribute("visitor");
  3. if (visitor == null)
  4. {
  5. java.io.PrintWriter out = response.getWriter();
  6. out.println("<html>");
  7. out.println("<script>");
  8. out.println("window.open (‘/smpc/login/login.jsp‘,‘_top‘)");
  9. out.println("</script>");
  10. out.println("</html>");
  11. }
  12. chain.doFilter(request, response);

解决乱码问题:

String CONTENT_TYPE = "text/html; charset=GBK";
    httpServletResponse.setContentType(CONTENT_TYPE);

out.println("alert(‘您所登录的用户已在其他机器登录,您被迫下线!‘);");

二、使用response.sendRedirect的注意点

使用response.sendRedirect时就需要注意以下两点:
1,在使用response.sendRedirect时,前面不能有HTML输出。
这并不是绝对的,不能有HTML输出其实是指不能有HTML被送到了浏览器。事实上现在的server都有cache机制,一般在8K(我是说JSP SERVER),这就意味着,除非你关闭了cache,或者你使用了out.flush()强制刷新,那么在使用sendRedirect之前,有少量的HTML输出也是允许的。
如果报错说,“一些信息已经被submitted”(原文忘了),那么,你就要注意看了,前面是不是有过多的HTML输出了。

2,在response.sendRedirect之后,应该紧跟一句return;
我们已经知道response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。

3.重定向到的jsp页面的路径需要设置正确,可以用绝对路径:String path = httpReq.getContextPath() + "/login.jsp";

时间: 2024-10-29 01:57:52

iframe和response.sendRedirect使用的问题的相关文章

JSP中页面跳转response.sendRedirect()和request.getRequestDispatcher()的区别

Java Web开发中,采用MVC模式的时候,在控制器完成模型的调用之后会选择界面对用户响应,用常有2种方式 1,通过response对象的sendRedirect方法重定向: response.sendRedirect("login.jsp"); 2,通过RequestDispatcher对象的forward方法: <!--请求转发--> RequestDispatcher rd = request.getRequestDispatcher("login.jsp

关于jsp中response.sendRedirect显示错误

今天在jsp中作判断时,当不同条件时利用response.sendRedirect("url")来转向不同的页面,首先是判断验证码,当错误时就转向错误页面:当正确时,才进行用户名和密码的判断,同样也response.sendRedirect("url")来转向不同的页面.但运行时response.sendRedirect显示错误. if(!str2.equals(str_1))  {  response.sendRedirect("verify_error

javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转,然后将结果直接给游览器,这也是问什么游览器会不改变url地址.下面是具体总结他们的区别 一.response.sendRedirect(url)-服务器将新url发送给游览器,游览器再根据新url请求 Request.getRequestDispatcher(url).forward(reques

response.sendRedirect的细节

今天敲书上的例子的时候无意间发现,response中的sendRedirect()重定向到另一个servlet时,调用的是doget方法,不明所以,百度得知,原来还牵扯到http协议的细节问题,原文如下: servlet重定向一般采用response.sendRedirect()来处理,要明白其中的细节,还需了解HTTP协议的一些内容,简单点就是要了解HTTP请求报头.HTTP状态码.HTTP响应报头的一些参数. sendRedirect()简单点就是做了两件事情: 设置HTTP响应报头中的St

转response.sendRedirect()与request.getRequestDispatcher().forward()区别

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是二者是有很大的区别的,分条来说,有以下几点: ①response.sendRedirect(url)-----重定向到指定URL request.getRequestDispatcher(url).forward(request,response) -----请求转发到指定URL ②response

response.sendRedirect 报 java.lang.IllegalStateException 异常的解决思路

今天在进行代码开发的时候,出现了 java.lang.IllegalStateException异常,response.sendRedirect("./DEFAULT.html"); 这一条语句出错. 在网上进行查找之后,发现问题很有可能是因为response.sendRedirect方法执行了两次,其中一次肯定是项目框架里面的跳转,而我自己要进行跳转的话,就显得极其不方便,最后我把目光放到前端页面,在前端页面进行跳转. 一开始我的前端语句是:window.location.href=

response.sendRedirect()重新定向的乱码问题

这里response.sendRedirect("YPbianhaoModify.jsp?jinhuoshang="+jinhuoshang+"&jinhuoriqi="+jinhuoriqi)要是有中文的话就成了response.sendRedirect("YPbianhaoModify.jsp?jinhuoshang=进货商&jinhuoriqi=2007-09-23"); 这里的中文不进行处理,重定向的时候必然会出现http

response.sendRedirect()与request.getRequestDispatcher(&quot;/index.jsp&quot;).forward(request, response)两者辨析

知识点轮廓 一 辨析response.sendRedirect()与request.getRequestDispatcher("/index.jsp").forward(request, response) 二 辨析请求转发与重定向异同问题[知识点总结] 第一部分: JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是二者是有很大的区别的,

转 让你明白response.sendRedirect()与request.getRequestDispatcher().forward()区别

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转,但是二者是有很大的区别的,分条来说,有以下几点: ①response.sendRedirect(url)-----重定向到指定URL request.getRequestDispatcher(url).forward(request,response) -----请求转发到指定URL ②response