response.sendRedirect的一點實際用法

來源:互聯網
上載者:User
redirect|response

  <黑咖啡 原創>
  以下是一個購物單提交的jsp頁面(正確的)

<%@ page contentType="text/html" language="java" import="java.util.*,com.blackCoffee.shop.*,com.blackCoffee.util.*,com.blackCoffee.db.*" %>
<%@ page errorPage="/error.jsp" %>
<%
if(AssociatorSession.getSession(session)==null)
 response.sendRedirect("/login.jsp");       //如果會員沒有登入就跳轉到登入頁面,
else{ //如果已經登入則提交訂單並銷毀session中的購物車
Associator associator = new Associator();
associator = AssociatorSession.getSession(session);
String errmsg = "";
errmsg=OrderFormOperation.addOrderForm(request,session);
CartSession.removeSession(session);  //銷毀session中的購物車
if(!errmsg.equals(""))
 response.sendRedirect("/error.jsp?errmsg="+errmsg);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
 <Script language=JavaScript>
 alert(" 以上商品已訂購,我們會和你及時聯絡!");
 window.location="../index.jsp";
 </Script>
</body>
</html>
<%}%>

  有問題的代碼是這樣的

<%@ page contentType="text/html" language="java" import="java.util.*,com.blackCoffee.shop.*,com.blackCoffee.util.*,com.blackCoffee.db.*" %>
<%@ page errorPage="/error.jsp" %>
<%
if(AssociatorSession.getSession(session)==null)
 response.sendRedirect("/login.jsp");       //如果會員沒有登入就跳轉到登入頁面,
//沒有else了
Associator associator = new Associator();
associator = AssociatorSession.getSession(session);
String errmsg = "";
errmsg=OrderFormOperation.addOrderForm(request,session);
CartSession.removeSession(session);  //銷毀session中的購物車
if(!errmsg.equals(""))
 response.sendRedirect("/error.jsp?errmsg="+errmsg);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
 <Script language=JavaScript>
 alert(" 以上商品已訂購,我們會和你及時聯絡!");
 window.location="../index.jsp";
 </Script>
</body>
</html>
<%//}%>

  請注意到出現問題的是因為沒有了else,問題如下:每當不登入就購買物品後,點“訂貨”提交按鈕,本來應該轉到登入頁面,登入後查看購物車,以前購買的貨物應該都在,但是點“訂貨”提交按鈕後,轉向登入頁面,登入後購物車裡沒有了。當時出現錯誤好像是說response.sendRedirect已經發送到用戶端,不能改變了,我就在這裡折騰了些時間,後來檢查代碼時發現了這句話CartSession.removeSession(session);

原來if(AssociatorSession.getSession(session)==null)
 response.sendRedirect("/login.jsp");       //如果會員沒有登入就跳轉到登入頁面,

  這句話後面沒有else, 所以頁面雖然跳轉了,但是後面的語句也繼續執行了,CartSession.removeSession(session);

  這句清空了購物車,所以才會出錯。

  總結:response.sendRedirect跳轉後,原頁面的語句會繼續執行。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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