1. 程式人生 > >Servlet中response.sendRedirect()跳轉時不能設定target的解決辦法

Servlet中response.sendRedirect()跳轉時不能設定target的解決辦法

      一般使用Struts2的攔截器(或者是filter)驗證是否登入的時候,如果使用者沒有登入則會跳轉到登入的頁面。這時候一般可以在攔截器或者filter中用response.sendRedirect()。

     但當在頁面上使用了iframe後,發現跳轉的只是頁面中iframe內的區域,而父頁面卻沒有跳轉。攔截器或者過濾器中傳送重定向請求時,是在iframe頁面傳送的。

原來的程式碼是這樣的:

 

       因為response.sendRedirect()沒有target屬性,但html頁面和js中有。於是,當判斷出使用者不具備訪問許可權時,可以在jsp中使用js來轉向到真正的登入頁面(這裡我是採用的中間頁面,但是我又不希望它顯示出來,於是就要使用到JS了)。具體的程式碼可以這樣寫:

@Override

public String intercept(ActionInvocation invocation) throws Exception {

/* If the user have not been logined , it must return Login_Fail and forward to login.jsp */

   if( ActionContext.getContext().getSession().get("login_user") == null ) {

      HttpServletResponse response = ServletActionContext.getResponse();

      PrintWriter out = response.getWriter();

      out.println("<html>");  

      out.println("<script type=/"text/javascript/">");  

      out.println("window.open ('login','_top')");  

      out.println("</script>");  

      out.println("</html>");

      return null;

    } else {

      return invocation.invoke();

    }

}

OK!搞定!