Не удается извлечь значение из базы данных

#java #jsp #servlets

#java #jsp #сервлеты

Вопрос:

Я не могу извлечь значение из базы данных. Пожалуйста, ознакомьтесь с кодом и помогите мне в его решении

 public ArrayList  getReqResInfo(String id) 
{
    String methodname="createConnection";
    Connection conn  = null;
    ResultSet rs=null;
    PreparedStatement psmt;
    int req_id=0;
    String reqid=id;
    ArrayList resList=new ArrayList();
    try {
        conn = DBConnection.getJNDIConnection();
        System.out.println("getReqResInfo id==" reqid);
        psmt= conn.prepareStatement("select * from CR_REQUEST_RESOURCE_INFO where REQUEST_ID=?");
        psmt.setInt(1,Integer.parseInt(id));
        rs= psmt.executeQuery();
        System.out.println("getReqResInfo");

        while(rs.next())
        { 
            System.out.println(rs.getString("RES_LEVEL")  " "   rs.getString("NOOF_RES")  " "   rs.getString("RES_PRIMARY_SKILL")  " "   rs.getString("RES_QUALIFICATION")  " "   rs.getString("RES_SECONDARY_SKILL")  " "   rs.getString("RES_EXP"));              
            ReqResourceVO resourceVO=new ReqResourceVO();
            resourceVO.setLevel(rs.getString("RES_LEVEL"));
            resourceVO.setNumres(rs.getString("NOOF_RES"));
            resourceVO.setPrimary(rs.getString("RES_PRIMARY_SKILL"));
            resourceVO.setQualification(rs.getString("RES_QUALIFICATION"));
            resourceVO.setSecondary(rs.getString("RES_SECONDARY_SKILL"));
            resourceVO.setYear(rs.getString("RES_EXP"));

            resList.add(resourceVO);
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    { 
        try {
            conn.close();
        } 
        catch(Exception e)
        { 
            e.printStackTrace(); 
        }
    }

    return  resList;
}
  

В сервлете я вызываю эту функцию, как указано ниже

 if(action.equals("view"))
{
    try
    { 
        String reqid=req.getParameter("id");
        System.out.println("id " reqid);
        ReqProjVO reqProjVO=new ReqProjVO();
        reqProjVO.setRequestid(reqid);
        ReqResDAO reqresDAO=new ReqResDAO();
        reqProjVO=reqresDAO.getReqProjInfo(reqProjVO);
        ArrayList resVOList=reqresDAO.getReqResInfo(reqid);
        req.setAttribute("projVO", reqProjVO);
        HttpSession session = req.getSession(true);
        session.setAttribute("resVOList", resVOList);

        ReqProjDAO reqprojDAO=new ReqProjDAO();
        ArrayList projList=reqprojDAO.Project();
        req.setAttribute("projList", projList);
        System.out.println("in request resource servlet");
        RequestDispatcher rd= req.getRequestDispatcher("jsp/manager/RequestforResource.jsp");
        rd.forward(req,res);
        System.out.println("in request resource servlet");
    }
    catch(Exception e)
    { 
        e.printStackTrace();
    }
}
  

Значения извлекаются из базы данных и выводятся на консоль, но они не пересылаются на соответствующую страницу JSP, они переходят на страницу входа в JSP, и я получаю эту огромную ошибку. Я не знаю, что делать…

 java.net.SocketException: Connection reset by peer: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at weblogic.utils.io.ChunkedOutputStream.writeTo(ChunkedOutputStream.java:193)
    at weblogic.servlet.internal.ResponseHeaders.writeHeaders(ResponseHeaders.java:434)
    at weblogic.servlet.internal.ServletResponseImpl.writeHeaders (ServletResponseImpl.java:1256)
    at weblogic.servlet.internal.ServletOutputStreamImpl.sendHeaders(Servlet OutputStreamImpl.java:244)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:379)
    at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:469)
    at weblogic.servlet.internal.ChunkOutput.write(ChunkOutput.java:304)
    at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:139)
    at weblogic.servlet.jsp.JspWriterImpl.write(JspWriterImpl.java:274)
    at jsp_servlet._jsp._manager.__requestforresource._jspService(__requestforresource.java:237)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run (StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet    StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
    at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:408)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:318)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:505)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:251)
    at manager.RequestResourceServlet.doPost(RequestResourceServlet.java:181)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)  
  

Ответ №1:

Метод, который вы нам показали ( getReqResInfo() ), не отображается в трассировке стека. Единственная часть трассировки стека, которая, как представляется, находится в вашем собственном коде, это manager.RequestResourceServlet.doPost() , так что, скорее всего, проблема кроется именно в этом. Если вы можете найти проблему самостоятельно в RequestResourceServlet.java:181 , тогда отлично! В противном случае предоставьте больше кода.

Дополнительный полезный совет для вас:

Ваш метод возвращает ArrayList . Вместо этого лучше указать тип интерфейса List (лучшая практика: программируйте для интерфейсов, а не для конкретных типов, чтобы их можно было легко изменить позже). Также обратите внимание, что List s являются общими. Вы должны указать, что ваш список является списком ReqResourceVO , поэтому пишите List<ReqResourceVO> . Использование generics означает, что ваша коллекция типобезопасна и вам не потребуется дополнительное приведение позже.

Приятно видеть, что вы знаете, как использовать finally для закрытия соединения в конце, но не забудьте также закрыть результирующий набор и инструкцию. 🙂

Комментарии:

1. я добавил кодировку сервлета, пожалуйста, ознакомьтесь с ней и помогите мне решить эту проблему. почти со вчерашнего дня я борюсь с этим….

2. Если вы внимательно посмотрите на трассировку стека, то увидите, что вызываемый вами из вашего doPost() метода метод вызывается forward() , и действительно, вы вызываете rd.forward(req,res); в своем коде. Я не эксперт по сервлетам, но проблема, должно быть, в вашем диспетчере.

3. Если у вас это работает в других местах, очевидно, что проблема заключается в том, что отличается от рабочих сервлетов. В значительной степени это зависит от метода проб и ошибок — закомментируйте строки вашего кода, пока он не заработает, и тогда вы получите свой ответ. Кроме того, отправляются ли другие ваши сервлеты в то же местоположение ( jsp/manager/RequestforResource.jsp )?

Ответ №2:

Это исключение возникает, когда клиент отправил запрос, и до получения полного ответа произошло одно из следующих событий:

  1. браузер клиента закрыт.
  2. соединение с клиентом было отключено.
  3. клиент нажимает кнопку остановки.

Подробная информация.

Ответ №3:

В req.getRequestDispatcher вызовите интересующие меня точки на пути к странице jsp. Не попробовать ли вам запустить его с косой черты / как начинаются многие примеры, которые я нашел? Поэтому он запускает /jsp / вместо обычного jsp/

Комментарии:

1. path работает нормально для всех модулей, с этим проблем нет. я предполагаю, что есть какая-то проблема с db, но я не могу ее идентифицировать.