2013-11-22 44 views
2

我使用netbeans 7.4與hibernate 3.6.10來開發一個web應用程序。 我上網瀏覽了很多網站,我相信這個錯誤是由於hibernate和我的servlet之間的配置錯誤造成的。由於我是jsp,servlet和hibernate的新手,我無法弄清楚我做錯了什麼。希望你們能解決這個問題。Servlet拋出java.lang.NullPointerException

代碼如下。 的hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/webasgdvd?zeroDateTimeBehavior=convertToNull</property> 
    <property name="hibernate.connection.username">root</property> 
    <mapping class="cart.hibernate.PaymentMethod" package="cart.hibernate" resource="cart/hibernate/PaymentMethod.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

PaymentMethod.java

package cart.hibernate; 

public class PaymentMethod { 
    private int paymentMethodId; 
    private String paymentMethod; 

    public PaymentMethod(){ 
    } 

    public PaymentMethod(String method){ 
     this.paymentMethod = method; 
    } 

    public int getPaymentMethodId() { 
     return paymentMethodId; 
    } 

    public String getPaymentMethod(){ 
     return paymentMethod; 
    } 

    public void setPaymentMethodId(int id) { 
     this.paymentMethodId = id; 
    } 

    public void setPaymentMethod(String method){ 
     this.paymentMethod = method; 
    } 
} 

PaymentMethod.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="cart.hibernate.PaymentMethod" table="payment_method"> 
     <meta attribute="class-description"> 
      This class contains the payment method detail. 
     </meta> 
     <id name="paymentMethodId" type="int" column="payment_method_id"> 
      <generator class="native"/> 
     </id> 
     <property name="PaymentMethod" column="payment_method" type="string"/> 
    </class> 
</hibernate-mapping> 

ManagePaymentMethod.java

package cart.hibernate; 

import java.util.List; 
import java.util.Iterator; 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 

public class ManagePaymentMethod { 

    private static SessionFactory factory; 

    public Integer addPaymentMethod(String methodName) { 
     Session session = factory.openSession(); // Error occur here <-- 
     Transaction tx = null; 
     Integer paymentMethodId = null; 

     try { 
      tx = session.beginTransaction(); 
      PaymentMethod payMethod = new PaymentMethod(methodName); 
      paymentMethodId = (Integer) session.save(payMethod); 
      tx.commit(); 
     } catch (HibernateException e) { 
      if (tx != null) { 
       tx.rollback(); 
      } 
      e.printStackTrace(); 
     } finally { 
      session.close(); 
     } 
     return paymentMethodId; 
    } 
} 

addPaymentMethodSe rvlet.java

package cart.hibernate; 

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class addPaymentMethodServlet extends HttpServlet { 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 

     String method = request.getParameter("paymentMethod"); 

     try { 
      ManagePaymentMethod manager = new ManagePaymentMethod(); 

      Integer paymentMethodId = manager.addPaymentMethod(method); 
      // Receive from a jsp page and I have checked the value of method is correct 

      out.print("..."); // html page 

     } finally { 
      out.close(); 
     } 

    } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    } 

} 

當servlet被調用時,異常被捕獲。以下是錯誤日誌

Nov 22, 2013 6:55:22 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [addPaymentMethodServlet] in context with path [/eShop] threw exception 
java.lang.NullPointerException 
    at cart.hibernate.ManagePaymentMethod.addPaymentMethod(ManagePaymentMethod.java:93) 
    at cart.hibernate.addPaymentMethodServlet.processRequest(addPaymentMethodServlet.java:46) 
    at cart.hibernate.addPaymentMethodServlet.doPost(addPaymentMethodServlet.java:90) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 

我已經通過執行在ManagePaymentMethod.java一個main()方法測試的addPaymentMethod()addPaymentMethod()正確運行。 此外,從jsp傳遞到addPaymentMethodServlet.java的值是正確的。

如果您有更多的細節,請讓我知道。

+0

當您發佈代碼片斷髮生異常時,請記住,我們無法從您的源文件中看到行號..所以告訴我們哪一行丟棄了異常,已經是**了。你知道,我們不知道。 –

+0

好吧我會這樣做的 –

回答

2
在該行

Session session = factory.openSession(); 

facotory是null

你宣佈

private static SessionFactory factory; 

而且從來沒有使用addPaymentMethod方法初始化和。

+0

哦..我已經在測試主要方法 中做過了,我忘了這麼做了!大聲笑 謝謝 –

+0

@BibooChung這很好。但請不要大帖子。真的很難追查它中的問題。張貼可疑區域。樂意效勞 :) –

相關問題