2016-04-23 73 views
0

我正面臨一個問題,我不知道它發生了什麼.. 我在JSP頁面中做了一個小腳本來檢查一個簡單的條件,如果有一個會話,那麼它做了一些事情,如果沒有它應該只是重定向頁面。 但是會發生什麼是我不能真正解釋的東西..如果條件正在做一件非常奇怪的事情!如果條件失靈? JSP腳本

這裏是一個示例代碼:

<% 
boolean err = false; 
if(session.getAttribute("id") != null) 
    { 
     cus_id = session.getAttribute("id").toString(); 
     err=false; 
    }else err=true; 

    out.println(err); 
    if (err) out.println("<br>There is no session<br>"); 
    //if(!err) ############ where it goes completely wrong.############## 
    if(1==2) 
    { 
     statement = "SELECT * FROM flight WHERE fl_code = '"+fco+"'"; 
     flight = getData(statement); 

     statement = "SELECT * FROM tickets WHERE tik_cus_id ='"+cus_id+"' AND tik_fl_id ='"+flight[0][0]+"'"; 
     ticket = getData(statement); 

     if(ticket.length == 0) 
     { 
     statement = "INSERT INTO tickets VALUES(null,'"+ session.getAttribute("id")+ 
              "','"+flight[0][0]+ 
              "','"+cls+"','"+seat+ 
              "','"+adul+"','"+chil+ 
              "','"+infa+"','"+pric+"','N')"; 
     lastId = insertData(statement); 
     } 
     if(ticket.length==4) //if error occurs 
     { 
     out.println("<br><br>"+ticket[0]+"<hr>"); 
     out.println(ticket[1]+"<br>"); 
     out.println(ticket[2]+"<br>"); 
     out.println(ticket[3]+"<br>"); 
     } 
     response.sendRedirect("../../confirm.jsp?fco="+flight[0][0]); 
    } else out.println("no session");//else response.sendRedirect("../../login.jsp"); 
%> 

在不遠的地方我所指的條件是if(!err)我得到這個錯誤

`rg.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 50 in the jsp file: /scripts/jsp/confirm.jsp 
The local variable cus_id may not have been initialized 
47:  statement = "SELECT * FROM flight WHERE fl_code = '"+fco+"'"; 
48:  flight = getData(statement); 
49:  
50:  statement = "SELECT * FROM tickets WHERE tik_cus_id ='"+cus_id+"' AND tik_fl_id ='"+flight[0][0]+"'"; 
51:  ticket = getData(statement); 
52:  
53:  if(ticket.length == 0)` 

這是顯而易見的,因爲沒有會話,並cus_id來自會議。 但是當我使病情if(1==2)這是輸出: true There is no session no session

正如你可以看到有沒有會話..我100%肯定我沒有會話,但在條件if(!err)(所以當犯錯是錯誤,當沒有會話時觸發錯誤)它會進入內部,但它清楚地輸出有錯誤,但它進入條件內部以嘗試執行代碼..但是當我把if(1==2)條件顯然是錯誤的它不.. 我嘗試使用整數,字符串,字符,甚至雙和浮動,但每當一個變量進入條件,它只是通過它爲真,當它不是..但它承認if(1==2)或其他類似的情況爲假。

這是怎麼回事?這是絕對沒有意義 我使用的是Tomcat7服務器,我現在使用的代碼幾個小時左右,它只是沒有任何意義,從任何方式,我想它..我所有的嘗試是徒勞的

請幫助

回答

0

如果我理解正確,你沒有遇到任何你的if條件實際上。相反,您正在運行編譯器執行的靜態代碼分析:它確定存在您的本地變量可能未被初始化並標記的情況。

當你使用if(1==2)去激活一個大塊時,編譯器足夠聰明地確定這個塊永遠不會被執行,並且可能永遠不會爲它生成任何代碼(並且忽略其中的任何標誌)。

有幾種方法來提高你的代碼(不完整的,但出發點):

  • 省略記憶err,只是執行原if條件
  • 停止編寫JSP中的Java腳本小程序中的所有代碼並使用適當的MVC - 然後在委派到JSP之前確定您沒有會話(並委派給控制器的其他頁面),並且頁面可以假設總是有會話可用

回答你的評論關於什麼「省略記憶錯誤」的問題意味着:只是沒有那個變量。僞代碼:

if(session.getAttribute("id") != null) { 
    String cus_id = session.getAttribute("id").toString(); 
    // now cus_id is initialized, and local to this block 
    // (it's not used elsewhere anyway) 

    // add your database code here 
} else { 
    // add your error handling code here 
} 

而不要忘記:構建SQL指令的方式容易受到攻擊。請閱讀有關準備好的語句(例如參數化查詢)和約Little Bobby Tables

+0

因此,基本上,因爲它是一個JSP頁面,它仍然通過它? 不幸的是,我沒有時間去創建所有這些servlet類並對它們進行測試..我認爲這是我最後一次這樣做。但我需要儘快完成。 我也嘗試了你多次提出的建議,在if條件下的所有塊都沒有真正幫助,是否有解決方法? 「你不記得犯錯」是什麼意思? – bakz