2010-01-12 57 views
0
class mstLeastCountEdit { 
    mstLeastCount reff; 
    HttpServletRequest request; 
    HttpServletResponse response; 
    String msg = ""; 
    String LcDesc=""; 
    int i = 0; 
    int noOfRows = 0; 
    HttpSession session=request.getSession(true); 
    Integer ccode=(Integer) session.getAttribute("companycode"); 

    void updateEdit(mstLeastCount reff,HttpServletRequest request, HttpServletResponse response, int k) 
    throws ServletException,IOException,IllegalStateException { 
     int j = k; 
     this.reff=reff; 
     this.request=request; 
     this.response=response; 
     try{ 
      noOfRows = Integer.parseInt(request.getParameter("noOfRows")); 
      String chkboxVal=""; 
      for(i=j;i<=noOfRows;i++) { 
       if((request.getParameter("chk_select"+i))==null) { 
        chkboxVal="notticked"; 
       }//if for checked closed 
       else { 
        chkboxVal=request.getParameter("chk_select"+i); 
        if(chkboxVal.equals("ticked")) { 
         String LcId=request.getParameter("txtLcId"+i); 
         String LcDesc=request.getParameter("txtLcDesc"+i);         
         LcDesc=LcDesc.trim(); 
         String Rec_Status=request.getParameter("RecStatus"+i); 
         Statement st=reff.con.createStatement(); 
         String qu="xxxxxxxxxxxxxxxxx"; 
         st.executeUpdate(qu); 
        }//if chkbox closed 
       }//else checked closed 
       //j+=1; 
      }//For Loop Closed 
     } catch(SQLException sql) { 
      request.setAttribute("error", ge+" General e Exception"); 
      reff.getServletConfig().getServletContext().getRequestDispatcher("/errjsp.jsp").forward(request,response); 
     } catch(Exception ge) { 
      request.setAttribute("error", ge+" General e Exception"); 
      reff.getServletConfig().getServletContext().getRequestDispatcher("/errjsp.jsp").forward(request,response); 
     }   
     ResultSet rs1 = null; 
     try { 
      Statement st1 = reff.con.createStatement(); 
      rs1 = st1.executeQuery("Select * from xxxx"); 
      ResultSetMetaData rsm = rs1.getMetaData(); 
      int col_Count = rsm.getColumnCount(); 
      Vector vrow = new Vector(); 
      while(rs1.next()) { 
       Vector vcol = new Vector(); 
       for(int i=1;i<=col_Count;i++) { 
        vcol.addElement(rs1.getObject(i)); 
       } 
       vrow.addElement(vcol); 
      } //while loop closed 
      request.setAttribute("vrow",vrow); 
      request.setAttribute("msg",msg); 
      reff.getServletConfig().getServletContext().getRequestDispatcher("/xxx.jsp").forward(request,response); 
     }catch(SQLException sqldel){} 
     return ; 
    } 
} 

初始化類當servlet試圖調用這個類像這樣空指針異常的servlet的

mstLeastCountEdit ref1 = new mstLeastCountEdit(); 

,並拋出空指針異常。 我在班上依然sl and,這是10年前開發的舊代碼,任何幫助?

+3

如果你想要一個體面的答案,包括堆棧跟蹤。 – 2010-01-12 02:41:13

+0

並指示哪一行是哪個。 – 2010-01-12 02:50:49

回答

2

通過代碼掃視...

HttpServletRequest request; 

[...] 

HttpSession session=request.getSession(true); 
Integer ccode=(Integer) session.getAttribute("companycode"); 

此行應拋出異常。 request尚未分配,因此將是null,因此NPE。

servlet通常會在請求和會話之間提供服務。即使一次處理多個請求。因此,不要在Servlet實例中存儲請求,會話和相關數據。

(作爲一種良好習慣做法:將字段private,並在可能的情況final,更多的傳統加空格,用駱駝上限變量名稱(例如companyCode),不要縮寫詞尤其是當它們變得毫無意義。)

+1

現貨。然而,如果這個「舊代碼」工作了10年,我會非常驚訝。 – BalusC 2010-01-12 02:57:39

+0

:-)我也是,我的整體編程經驗遠遠少於這個代碼。任何方式,我會盡量找回結果。 – sansknwoledge 2010-01-12 03:14:06

0

HttpSession session=request.getSession(true); 

之前任何初始化請求被調用,所以因此你要尊重一個空指針。

1

的問題是在你的領域初始化:

HttpServletRequest request; 
HttpSession session=request.getSession(true); 
Integer ccode=(Integer) session.getAttribute("companycode"); 

第一行初始化「請求」爲null,第二個嘗試使用它。

由於您將請求傳遞給方法,因此無需將其作爲字段成員進行維護。將這兩行移到方法的主體中。事實上,如果將所有字段移動到方法的主體中(而將它們作爲局部變量),則不需要爲每個請求創建新的「mstLeastCountEdit」;在servlet中,您可以將其作爲成員字段保留一個引用。

爲了記錄,Java類名應以大寫字母開頭。