исключение nullpointer при инициализации класса в сервлете - PullRequest
0 голосов
/ 12 января 2010
 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 ;
    }
}   

сервлет пытается вызвать этот класс следующим образом

mstLeastCountEdit ref1 = new mstLeastCountEdit();

и выдает исключение nullpointer. Я все еще небрежный в классе, и это старый код, разработанный 10 лет назад, любой поможет ??

Ответы [ 3 ]

2 голосов
/ 12 января 2010

Просматривая код ...

HttpServletRequest request;

[...]

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

Эта строка должна выдавать исключение. request не был назначен и будет null, следовательно, NPE.

Сервлет обычно обслуживается между запросом и сеансами. Даже обработка нескольких запросов одновременно. Поэтому не храните запросы, сеансы и связанные данные в экземпляре сервлета.

(В соответствии с хорошей практикой: укажите поля private и, где возможно, final, добавьте пробелы более условно, используйте заглавные буквы для имен переменных (например, companyCode) и не сокращайте слова, особенно если они стать бессмысленным.)

1 голос
/ 12 января 2010

Проблема в инициализации вашего поля:

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

Первая строка инициализирует «запрос» в ноль, вторая пытается использовать его.

Поскольку вы передаете запрос в метод, нет необходимости поддерживать его как члены поля. Переместите эти две строки в тело метода. На самом деле, если вы переместите все поля в тело метода, то есть сделав их локальными переменными, нет необходимости создавать новый «mstLeastCountEdit» для каждого запроса; в сервлете вы можете сохранить единственную ссылку на него как на поле члена.

И для записи имена классов Java должны начинаться с заглавной буквы.

0 голосов
/ 12 января 2010

Линия

HttpSession session=request.getSession(true);

вызывается до того, как что-либо инициализирует запрос, поэтому вы пытаетесь присвоить нулевой указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...