close

簡單的說, 登入功能是一個服務

要在服務完成之後將畫面轉為請求來的那一頁

必須要(在服務開始的時候)將傳請求來的路徑存下來,如以下

 

String requestURI = (String) session.getAttribute("requestURI");

 

經過這段文字,傳請求來的路徑就存在requestURI字串中了

如果用

System.out.println(requestURI);

就會看得很清楚

會得到"/eDMo/_04_ShoppingCart/ShowCartContent.jsp"

 

另外在結尾的時候,服務完成了,要將畫面轉換時,就可以用下列程式碼來做

if (errorMsgMap.isEmpty()) { //如果沒有錯誤訊息則執行以下
            if (requestURI != null) {
                requestURI = (requestURI.length() == 0 ? request.getContextPath() : requestURI);
                response.sendRedirect(response.encodeRedirectURL(requestURI));
                System.out.println(requestURI);
                return;
            } else {
                response.sendRedirect(response.encodeRedirectURL(request.getContextPath()));
                return;
            }
        } else {
            // 如果errorMsgMap不是空的,表示有錯誤,交棒給login.jsp
            RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
            rd.forward(request, response);
            return;
        }
    }

這裡有幾個重要觀念

1 null vs .lenth()==0

乍看之下, 我起初認為null不就是length()==0, 一查之後發現, 原來不是這樣

這裡引用他方網站的定義 : http://ych0108.iteye.com/blog/2125427

空对象: 
String s = null; 

空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例化该对象,因此,空对象在调用所有对象方法时候都会抛出异常,如s.length(), s.isEmpty()等方法。 

空值: 
String k = ""; 

空值是指一个字符床对象已经实例化,即系统已经给该变量分配了空间,只是对象的内容为空。 

空格: 
String n = " "; 

是指一个字符对象已经实例化,对象的内容为空格。

 

簡單的說,空對象null, 就是沒有實例化

而not null還有兩種的可能, 就是已經空值的實例 k.length() == 0 ; ,或是為空格的實例   n.length() 的输出值为1

 

2 ? 跟 :合用

問號的前面是判斷式,後面是回傳方法

而判斷為True時回傳冒號前的方法,判斷為False時回傳冒號後的方法

就著這段文字

(requestURI.length() == 0 ? request.getContextPath() : requestURI);

(requestURI.length() == 0是判斷式

如果結果為真則執行 request.getContextPath()

如果結果為假則執行 requestURI

 

這些觀念有了就能看懂這段程式

主要是判斷如果requestURI已經產生實例,則有兩種狀況

有可能為空值,那就傳回request.getContextPath()

如果唯有值則傳回之前存下來的字串requestURI

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Ian Wang 的頭像
    Ian Wang

    寄居@旅人

    Ian Wang 發表在 痞客邦 留言(0) 人氣()