2016-03-29 17 views
0

Bir veritabanından alınan tarayıcı bilgilerini görüntüleyen basit bir JSP oluşturdum. Veritabanına bağlantı, jsp'de çağıran basit bir sınıf oluşturdum. İki istisna vardır: JasperException ve NullPointerException. Nerede yanlış gittiğimi anlamıyorum. Yardımını ben istiyorum.Veritabanındaki bağlantı ile basit jsp

PS:. Benim ingilizce :) için üzgün bu 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> 

bu sınıfı Connessione

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; 
    } 

} 

olduğunu ve bu bir hata sayfası olduğunu

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. 

Eclipse jee mars, tomcat v8.0.33 ve mySQL kullanıyorum. Tutulmadan sunucuda Çalıştır'ı kullanıyorum. önce tomcat webapps klasöründe kaydedilen savaş dosyası ihracat yapmak. Mysql bağlayıcısını tomcat'in lib klasörüne ekledim, projemin tutulması için hem dış jar hem de. Eğer için "yakın" çalıştıklarında

+0

Daha fazla açıklığa sahip olması için jsp'ye sahip olabilecek tüm kodları kaldırmanızı öneririm. – meyquel

+0

Tüm yığın izlerini günlüklerden alın. – nitind

cevap

1

o benim sql Tamam olup olmadığını @Lawrence Tierney ben kontrol dediğim gibi tam bir günlük ... güzel olurdu, yukarıda sözü ... Ben basit bir java uygulaması yapılmış olduğunu bir sorgu sonucu konsolda görüntülenen ... ve hala NullPointerException kaldırdı ... Gözlerimi inanamadım .... o zaman DB de söyledi, aynı DBMS üzerinde diğer java uygulaması da çalıştı çünkü. Ama o zaman db'nin doğru olmadığını düşünemedim, nedenini göremedim ... sonra Connessione sınıfını silmeye çalıştım ve sınıfımın kurucusunda DB ile bağlantı kurdum. voila çalışıyor !!!!! Web projemde geri dönüyorum, Connessione sınıfını siliyorum ve bağlantıyı doğrudan jsp'de yapıyorum ve işe yarıyor !! Jsp ve Connessione sınıfını neden konuştuğunu bile bilmiyorum ... ama yardımın için teşekkürler!

Yeni jsp kodu işe yarıyor!

<%@ 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

Ya rs benziyor, st veya cnn onlara ilk boş değilse

kontrol edin (muhtemelen rs) null?

Düzenleme: ResultSet için dokümanı okudum, executeQuery asla null döndüremiyormuş gibi görünür. Bu yüzden SQL'iniz iyi mi acaba? adamlar gibi

Ben çözdük