2013-07-03 54 views
0

因此,我有一個jsp文件(ShowProducCatalog.jsp)試圖通過javabean(ProductDataBean.java)從mysql數據庫訪問檢索數據。我正在使用netbeans IDE。我通過從netbeans ID創建表並確認服務器正在運行,並查看mysql工作臺中的同一個表。但每次我開始我的應用程序時,我得到這個錯誤空指針異常Java Web應用程序

org.apache.jasper.JasperException: An exception occurred processing JSP page  /ShowProductCatalog.jsp at line 9 
6: 
7: <html> 
8:  <body> 
9:   <% List productList = data.getProductList(); 
10:    Iterator prodListIterator = productList.iterator(); 
11:   %> 
12: 

而根本原因是從我的豆 根源

java.lang.NullPointerException 
    cart.ProductDataBean.getProductList(ProductDataBean.java:36) 
    org.apache.jsp.ShowProductCatalog_jsp._jspService(ShowProductCatalog_jsp.java:81) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 

這裏是我的ProductDataBean部分,其中的誤差來自形式:

public class ProductDataBean implements Serializable 
{ 
    private static Connection connection; 

    public ProductDataBean() 
    { 
     try 
     { 
       String userName = "root"; 
       String password = "root"; 
       String url = "jdbc:mysql://localhost:/eshopdb"; 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     connection = DriverManager.getConnection(url,userName,password); 
       System.out.println("Database connection established"); 
     }catch(Exception e){e.printStackTrace();} 
    } 

    public static Connection getConnection() 
    { 
     return connection; 
    } 

    public ArrayList getProductList() throws SQLException 
    { 
     ArrayList productList = new ArrayList(); 
     Statement statement = connection.createStatement();//ERROR HERE 
     ResultSet results = statement.executeQuery("SELECT * FROM product"); 

     while (results.next()) 
     {... 

似乎連接變量永遠不會初始化或什麼!但我的用戶名,密碼和網址是正確的。請幫助!

+0

正常情況下,發佈時很容易明確關於錯誤發生的行。 –

+0

有什麼理由不能使用泛型,或者JSTL的''?儘量不要將Java代碼放入JSP中。相反,讓您的應用程序將'productList'作爲請求屬性。你有單元測試嗎? –

+0

我已經指定了錯誤來自哪裏的代碼行。它在豆子裏。我對java中的web開發非常陌生。這是我的第一個實驗室之一 – mbass

回答

0

不,不是。

  String url = "jdbc:mysql://localhost/eshopdb"; 

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

這是假設你正在使用的默認端口3306

你不應該走這條路線。 JSP中的Scriptlet代碼是1998年的老東西 - 長期不受信任。

您的ProductDataBean不應該獲取數據庫連接 - 至少不是這種方式。連接池是要走的路。

您似乎沒有清理任何資源。這個應用程序會在短時間內崩潰,因爲您將用完數據庫中的連接和遊標。

+0

我已經添加了默認端口3306它不起作用。我沒有看到與鏈接內容有什麼不同。我的怎麼了? – mbass

+0

我對Java中的Web開發很新穎。連接池將是我另一個新概念。老實說,我沒有時間。我並不是故意忽視你的解決方案,但如果我只有這樣的手段去做,那怎麼可能呢? – mbass