備忘錄:jsp重新導向。使用out.print(); response.sendRedirect();__js

來源:互聯網
上載者:User

按鈕式:

  <INPUT name="pclog" type="button" value="GO" onClick="location.href='http://9ba.cn/'">

  連結式:

  <a href="javascript:history.go(-1)">返回上一步</a>

  <a href="<%=Request.ServerVariables("HTTP_REFERER")%>">返回上一步</a>

  直接跳轉式:

  <script>window.location.href='http://www.9ba.cn';</script>

  開新視窗:

  <a href="javascript:" onClick="window.open('http://www.9ba.cn/post/235.html','','height=500,width =611,scrollbars=yes,status=yes')">雲上的日子</a>



JSP跳轉方式

使用JSP大約有下列三種跳轉方式:
1. response.sendRedirect();
2. response.setHeader("Location","");
3. <jsp:forward page="" />

經過實驗得到下面的一些規則:

一. response.sendRedirect()

此語句前不允許有out.flush(),如果有,會有異常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
...
跳轉後瀏覽器地址欄變化
如果要跳到不同主機下,跳轉後,此語句後面的語句會繼續執行,如同新開了線程,但是對response的操作已經無意義了;
如果要跳到相同主機下,此語句後面的語句執行完成後才會跳轉;
二. response.setHeader("Location","")

此語句前不允許有out.flush(),如果有,頁面不會跳轉。
跳轉後瀏覽器地址欄變化
此語句後面的語句執行完成後才會跳轉
三. <jsp:forward page="" />

此語句前不允許有out.flush(),如果有,會有異常:
java.lang.IllegalStateException: forward() not allowed after buffer has committed.
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:134)
at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:101)
at com.caucho.jsp.PageContextImpl.forward(PageContextImpl.java:836)
...
跳轉後瀏覽器地址欄不變,但是只能跳到當前主機下
此語句後面的語句執行完成後才會跳轉

 

 

由於response.sendRedirect()之前不能有任何HTML輸出.

要想在重新導向之前輸出一些提示資訊,可能會想到:

out.println("<script>alert(''錯誤資訊'')</script>");
response.sendRedirect(index.html);
return;

但這個簡單的想法,怎麼也實現不了.

沒辦法....只好另想他法

 

1.全部用out.println輸出javascript,由javascript完成重新導向


out.println("<script>alert(''錯誤資訊'')</script>");
out.println("<script>window.location.href=''index.jsp''</script>");
return;

 

2.用Header頭重新整理到重新導向頁面


out.println("<script>alert(''錯誤資訊'')</script>");
response.setHeader("refresh","1;url=index.jsp");
return;

 

3.用java swing 組件的 JOptionPane 代替 javascript 提示框,由sendRedirect()完成重新導向


javax.swing.JOptionPane.showMessageDialog(null, "錯誤資訊");
response.sendRedirect("index.jsp");
return;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.