Исключение NullPointerException, вызванное отсутствием доступа к базе данных из JSP - PullRequest
1 голос
/ 12 августа 2011

Я работаю над проектом, который обращается к PostgreSQL с помощью драйвера jdbc, обрабатывает эти данные через промежуточное ПО и, наконец, отображает / обновляет через страницы jsp.Используя Eclipse, я создал динамический веб-проект.Затем я написал код для всех внутренних и промежуточных программ.Я могу получить доступ к базе данных из статического контекста (я имею в виду основной метод Java-источников).Я также могу использовать свои ресурсы Java (например, отображение) из jsp, если я не вызываю какие-либо методы, которые обращаются к базе данных.Но когда я пытаюсь получить доступ к базе данных, она не работает и выдает исключение нулевого указателя.

<jsp:useBean id="user" class="dbActionManagement.UserData" scope="session"/> 
<jsp:setProperty name="user" property="*"/> 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>next page</title>
</head>
<body>

You entered<BR>
Name: <%= user.getUsername() %><BR>
Email: <%= user.getEmail() %><BR>
Age: <%= user.getAge() %><BR>

</body>
</html>

Это дает мне:

SEVERE: Servlet.service ()для сервлета [jsp] в контексте с путем [/ GNYSweb] выдало исключение [java.lang.NullPointerException] с первопричиной java.lang.NullPointerException в dbActionManagement.OfficerManager.getTotalPoint (OfficerManager.java:494) в dbActionManUserserserUserData.java:28) в org.apache.jsp.NextPage_jsp._jspService (NextPage_jsp.java:80) в org.apache.jasper.runtime.HttpJspBase.service (HttpJspBase.java:70) в javax.servlet.hpt.service (HttpServlet.java:722) в org.apache.jasper.servlet.JspServletWrapper.service (JspServletWrapper.java:419) в org.apache.jasper.servlet.JspServlet.serviceJspFile (JspServlet).apache.jasper.servlet.JspServlet.service (JspServlet.java:334) в javax.servlet.http.HttpServlet.service (HttpServlet.java:722) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:304) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210) в org.apache.catalina.core.StandardWrapperValve.invoke (стандартный).catalina.core.StandardContextValve.invoke (StandardContextValve.java:164) в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:462) в org.apache.catalina.core.ostalin.Hore.: 164) в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:100) в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:562) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:395) в org.apache.coyote.http11.Http11Processor.process (Http: or50).apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:188) в org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:302) в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (неизвестный источник) в java.util.concurrent.ThreadPoolExecutor $ Worker.run неизвестно (неизвестно)at java.lang.Thread.run (Неизвестный источник)

Также для этого я использую Java-класс - UserData и метод getUserName ()

public String getUsername() { 
        int a = new OfficerManager().getTotalPoint("a");
        return new Integer(a).toString(); 
}

По умолчанию для OfficerManagerКонструктор и getTotalPoint

public int getTotalPoint(String officerId){
    int point = 0;
    ResultSet results = null;
    try {
        if(DBConnection.db.isClosed()){ // problem is caused by this line 
            DBConnection.connect(); 
        }
        Statement sql = DBConnection.db.createStatement();
                String sqlText = "select point from officers ";

            sqlText += " where sicilno = '" + officerId + "'";
        results = sql.executeQuery(sqlText);

    } catch (SQLException e) {
        e.printStackTrace();

    }
    if(results != null)
        try {
            while(results.next()){
                point = (int) results.getDouble("point");

            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    return point;
}

Я добавил драйвер jdbc postgreSQL в мой путь сборки.Также я включил этот же драйвер jdbc в папку lib Tomcat.Также я использую экземпляр Tomcat v7.0 на локальном хосте, расположение которого - [метаданные рабочего пространства]

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Я понимаю проблему, это в основном я пытался достичь объекта подключения, который является нулевым.Я использую статические объекты для доступа к базе данных, я забыл инициализировать их перед использованием.Для этого есть несколько решений, самым основным из которых является написание другого метода в классе UserData с именем startConnection ()

public void startConnection(){
    new DBConnection("myDBName", "myUserName", "myPassword");
}

и вызов этого метода из страниц jsp

...
<body>
<% user.startConnection(); %>
Name: <%= user.getUsername() %><BR>
</body>
...

Таким образомЯ могу правильно инициализировать свои экземпляры класса DBConnection перед их использованием.Спасибо за вашу помощь.

0 голосов
/ 12 августа 2011

Не проверяйте, закрыта ли БД перед созданием соединения, закомментируйте:

 //if(DBConnection.db.isClosed()){ // problem is caused by this line 
        DBConnection.connect(); 
  //  }

А затем закройте соединение после его использования и при возникновении исключения. Ваш блок исключений должен быть изменен на;

catch (SQLException e) 
{
 e.printStackTrace();
 if((DBConnection !=null) && DBConnection.db !=null && !DBConnection.db.isClosed())
    {
      BConnection.db.close(); 
    }
}

А также закройте его в блоке try сразу после использования.

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

if((DBConnection !=null) && DBConnection.db !=null && DBConnection.db.isClosed())
{
  DBConnection.connect(); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...