最近太忙了,乱七八糟的事情一堆,连blog也没时间玩。乘着周末,把昨天碰到的问题与大家交流一下。
目前正在做一个web项目,在其中大量的使用了html frame。主要是为了解决局部刷新。但是随之一个有趣的问题就来了。为了防止未登录用户使用程序,在应用中使用了一个filter,用来判断用户是否登录,如果没有就转向到登录页面。原来是使用response的sendRedirect来重新定位,但是由于使用了frame,那么在给后台发送请求时,实际的请求是在frame所包含的页面中发出的。这样一来,原本单独成页的登录页面就被包含到了这个frame中,完全和预想的不一样!!
如果在html页面中,这样的问题可以通过链接的target属性来解决,然而在response中并没有地方让我们指定目标的target。如何解决呢?一种方式就是做一个jsp,在jsp使用js来重定向链接到真正的登录页面,此时我们可以有机会使用target属性。然后在filter中定向到这个jsp。然而这样多出来的页面,给人感觉终究不爽。但是这样有启发我们可以这样做,请看代码:
java.io.PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<script>");
out.println("window.open ('/fog/index.htm', '_top')");
out.println("</script>");
out.println("</html>");
对了,我们仍然使用方法一的思想,但是使用response直接生成方法一的中间页。这样岂不更爽?!当然,如何浏览器禁用js,那我也没辙了,如有更好的方法,希望能告知。