2016-03-29 4 views
0

Ich habe eine einfache JSP erstellt, die die Browser-Informationen aus einer Datenbank entnommen anzeigt. Die Verbindung zur Datenbank Ich habe eine einfache Klasse erstellt, die in der JSP aufrufen. Sie verursachen zwei Ausnahmen: JasperException und NullPointerException. Ich verstehe nicht, wo ich falsch gelaufen bin. Ich frage deine Hilfe.einfacher jsp mit Verbindung zu Datenbank

. PS: Sorry für mein Englisch :) dies ist ein index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>WORLD</title> 
</head> 
<body> 
<%@ page language="java" import="java.sql.*" %> 
<%@ page language="java" import="connessione.*" %> 

<% 

Connessione con = new Connessione();   
Connection cnn = con.connetti(); 
Statement st = null; 
ResultSet rs = null; 
try 
{  

    st = cnn.createStatement(); 
    rs = st.executeQuery("SELECT code,name,continent FROM country"); 

    int code=0; 
    String name=""; 
    String continent=""; 


    out.println("<h1>ELENCO STATI:</h1>"); 

    while(rs.next()) 
    { 
     code = rs.getInt(1); 
     name = rs.getString(2); 
     continent = rs.getString(3);     
     out.println("<br><br><b>ID:</b> "+ code + " <br> " + "<b>COUNTRY:</b> "+name+" <br> " + "<b>CONTINENT</b> "+continent+" <br> "); 
    }  
} 
catch (SQLException e) 
{ 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
finally 
{ 
    try 
    {   
     rs.close();   
     st.close(); 
     cnn.close(); 
    } 
    catch(SQLException e) 
    { 
      out.println(e.getMessage()); 
     }  
    } 

%> 

</body> 
</html> 

Dies ist eine Klasse Login Meiner Nutzername

package connessione; 

import java.sql.*; 

public class Connessione 
{ 
    protected String driver = "com.mysql.jdbc.Driver", url = "jdbc:mysql//localhost:3306/world "; 
    protected String user = "root", psw = "informatica"; 

    public Connection connetti() 
    { 
     Connection dbConn = null; 

     try 
     { 
      Class.forName(driver); 
      dbConn = DriverManager.getConnection(url, user, psw); 
     } 
     catch(ClassNotFoundException ex) 
     { 
      ex.printStackTrace(); 
     } 
     catch(SQLException ex) 
     { 
      ex.getMessage(); 
     } 

     return dbConn; 
    } 

} 

und dies ist eine Fehlerseite

type Exception report 

message An exception occurred processing JSP page /index.jsp at line 47 

description The server encountered an internal error that prevented it from  fulfilling this request. 

exception 
org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 47 

44:  } 
45:  finally 
46:  {    
47:   rs.close();   
48:   st.close(); 
49:   cnn.close();  
50:  } 


Stacktrace: 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWra pper.java:574) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:4 76) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 


root cause 
java.lang.NullPointerException 
org.apache.jsp.index_jsp._jspService(index_jsp.java:158) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:4 38) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 


note The full stack trace of the root cause is available in the Apache Tomcat/8.0.33 logs. 

Ich benutze Eclipse jee Mars, Tomcat v8.0 .33 und mySQL. Von Eclipse verwende ich Run on Server. bevor ich den Export der Kriegsdatei im webapps-Ordner von Tomcat speichern. Ich fügte hinzu, dass der mysql-Konnektor im lib-Ordner von tomcat mit den externen jars in Eclipse auf meinem Projekt ist.

+0

Ich schlage vor, dass Sie den gesamten Code entfernen, der Jsp mehr Klarheit haben kann. – meyquel

+0

Erhalten Sie die vollständigen Stapelspuren aus den Protokollen. – nitind

Antwort

1

I gelöst haben, wie er sagte @Lawrence Tierney ich geprüft, ob meine sql ok war ... habe ich eine einfache Java-Anwendung, auf der Konsole das Ergebnis einer Abfrage angezeigt ... und immer noch die NullPointerException ausgelöst ... Ich konnte meine Augen nicht glauben .... dann sagte ich, ist die DB, auch weil andere Java-App auf dem gleichen DBMS arbeitete. Aber dann dachte ich, dass es nicht möglich ist, dass die db nicht richtig war, ich konnte den Grund nicht sehen ... dann habe ich versucht, die Connessione-Klasse zu löschen und die Verbindung zur DB im Konstruktor meiner Klasse herzustellen .... et voila es funktioniert !!!!! Ich gehe auf mein Webprojekt zurück, lösche die Connessione-Klasse und stelle die Verbindung direkt in der JSP her und es funktioniert !!!! Ich weiß nicht einmal, wieso die jsp und die Klasse Connessione nicht kommuniziert haben ... aber danke für die Hilfe !!!

neue jsp Code Arbeit it !!!

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>WORLD</title> 
</head> 
<body> 
<%@ page language="java" import="java.sql.*" %> 

<% 
String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
String DB_URL = "jdbc:mysql://localhost:3306/world"; 
String USER = "root"; 
String pass = "informatica"; 
Connection dbConn = null; 
Statement st = null; 
ResultSet rs = null; 
try 
{  
    //Registro il driver del database 
    Class.forName(JDBC_DRIVER); 
    // Connessione al db tramite il driver 
    dbConn = DriverManager.getConnection(DB_URL, USER, pass); 
    if(!dbConn.isClosed()) 
    { 
     out.println("Connessione avvenuta con successo a mysql server. . ."); 
    } 
    st = dbConn.createStatement(); 
    rs = st.executeQuery("SELECT Code,name,continent from country where name like 'i%';"); 

    String code=""; 
    String name=""; 
    String continent=""; 


    out.println("<h1>ELENCO STATI CON LA I:</h1>"); 

    while(rs.next()) 
    { 
     code = rs.getString(1); 
     name = rs.getString(2); 
     continent = rs.getString(3);     
     out.println("<br><br><b>ID:</b> "+ code + " <br> " + "<b>COUNTRY: </b> "+name+" <br> " + "<b>CONTINENT</b> "+continent+" <br> "); 
    }  
} 
catch (SQLException e) 
{ 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
finally 
{ 
    try 
    {   
     rs.close();   
     st.close(); 
     dbConn.close(); 
    } 
    catch(SQLException e) 
    { 
     out.println(e.getMessage()); 
    }  
} 

%> 

</body> 
</html> 
0

Es sieht aus wie entweder rs, st oder cnn sind null, wenn Sie versuchen, auf „Schließen“ sie (wahrscheinlich rs)

Überprüfen Sie, ob sie zum ersten Mal nicht gleich null sind?

Edit: gelesen zu haben das Dokument für ResultSet es scheint, als ob executeQuery nie null zurück. Daher frage ich mich, ob dein SQL in Ordnung ist?

Wie die Jungs oben gesagt, ein vollständiges Protokoll wäre schön ...

Verwandte Themen