从数据库中检索数据时出现NullPointerException

时间:2016-01-13 04:46:56

标签: java jsp servlets

当我尝试从数据库中检索数据时,它显示出NullPointerException。

这是我的servlet代码:

public class displayData extends HttpServlet {
    String query;
    Connection conn;
    Statement st;
    ResultSet res;
    ConnectionManager dbconn;
    List lst= new ArrayList();
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try
        {
            dbconn= new ConnectionManager();
            conn=dbconn.getConnection();
            st=conn.createStatement();
            query="select * from reg";
            res=dbconn.getResultSet(query, conn);
            System.out.println(res);

           while(res.next())
                    {
                        lst.add(res.getString("uname"));
                        lst.add(res.getString("password"));    
                    }

           res.close();


        }catch(Exception e)
        {

           RequestDispatcher rd= request.getRequestDispatcher("/error.jsp");
           rd.forward(request, response);
        }

        finally
        {
            request.setAttribute("EmpData", lst);
            response.sendRedirect("/success.jsp");
            RequestDispatcher rd= request.getRequestDispatcher("/success.jsp");
            rd.forward(request, response);
            lst.clear();
            out.close();
        }

    }

以下是使用上述servlet代码从数据库中检索数据的JSP代码:

    <body>
        <h1>Employee List</h1>

            <% Iterator itr;%>
            <% List data = (List) request.getAttribute("EmpData");
            for(itr=data.iterator(); itr.hasNext();)  
            {              
            %>
    <tr>
            <% String s= (String) itr.next();%>
            <td><%=s%></td>
            <td><%=itr.next()%></td>
            <td><input type="submit" value="Edit" onclick="editRecord(<%=s%>;)"</td>
            <td><input type="submit" value="Delete" onclick="deleteRecord(<%=s%>;)"</td>
               <%}%>
    </tr>
    </body>

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

在看到你的Servlet代码后,我发现了多个问题,让我们逐一进行

  1. 我不确定您是否将servlet定义为servlet。 要么在web.xml中进行映射,要么像这样添加注释 @WebServlet(&#34; / displayData&#34;)public class displayData extends HttpServlet {
  2. 在servlet中,你没有doGet和doPost方法。所以你的 方法processRequest不会被容器调用。或 把doGet放入并调用您的服务方法或重命名您的服务方法 去做。参考 - Is it mandatory to have a doGet or doPost method?
  3. 你在try try中遇到的灾难终于阻止了。最后总是会被调用所以没有必要在那里写重定向代码,因为它也会在catch之后执行。除此之外,最后四个线路正在造成严重问题。你不应该同时调用sendRedirect和前进一个,然后调用另一个。无论是sendRedirect还是前进,都不能同时进行。 您将收到此异常非法状态例外 - 无法转发后转发已提交
    参考 - java.lang.IllegalStateException: Cannot forward after response has been committed
  4. 最后做什么转发或sendRedirect,在这种情况下你必须这样做 使用forward作为服务器端操作。参考 - Request Attributes not available in jsp page when using sendRedirect from a servlet
  5. 根据你的jsp路径做前进。如果你的成功和错误 jsp&直接在Webcontent下,然后这样做 的的request.getRequestDispatcher(&#34;的success.jsp&#34);
  6. 更改这些内容并在不工作时再试一次让我知道