初始化servlet中的类时出现nullpointer异常

时间:2010-01-12 02:36:02

标签: java servlets nullpointerexception

 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试图像这样调用这个类

mstLeastCountEdit ref1 = new mstLeastCountEdit();

并抛出nullpointer异常。 我仍然在课堂上草率,这是一个10年前开发的旧代码,任何都有帮助??

3 个答案:

答案 0 :(得分:2)

浏览代码......

HttpServletRequest request;

[...]

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

此行应该抛出异常。 request尚未分配,因此将是null,因此是NPE。

通常在请求和会话之间提供servlet。甚至可以一次处理多个请求。因此,请勿在servlet实例中存储请求,会话和相关数据。

(作为一种良好做法:制作字段private并尽可能final,按常规方式添加空格,对变量名称使用驼峰上限(例如companyCode)和“不要” t缩写词,特别是如果它们变得毫无意义。)

答案 1 :(得分:1)

问题在于您的字段初始化:

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

第一行将“request”初始化为null,第二行尝试使用它。

由于您将请求传递给方法,因此无需将其作为字段成员维护。将这两行移动到方法的主体中。实际上,如果将所有字段移动到方法的主体中 - 通过使它们成为局部变量 - 那么就不需要在每个请求上创建新的“mstLeastCountEdit”;在servlet中,您可以将其作为成员字段保持单一引用。

对于记录,Java类名称应以大写字母开头。

答案 2 :(得分:0)

该行

HttpSession session=request.getSession(true);
在任何初始化请求之前调用

,因此您尝试使用空指针。