2013-11-22 4 views
2

Я использую netbeans 7.4 с hibernate 3.6.10 для разработки веб-приложения. Я просмотрел сеть и прочитал довольно много сайтов, я считаю, что ошибка вызвана неправильной конфигурацией между спящим и моим сервлетом. Поскольку я новичок в jsp, servlet и hibernate, я не могу понять, что я сделал неправильно. Надеюсь, вы, ребята, можете решить эту проблему.Servlet threw 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"; 
    } 

} 

При вызове сервлета исключение исключается. Ниже журнал ошибок

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) 

Я проверил addPaymentMethod() путем выполнения метода main() в ManagePaymentMethod.java. addPaymentMethod() работают правильно. Кроме того, значение, которое прошло от jsp до addPaymentMethodServlet.java, верное.

Если у вас есть более подробная информация, пожалуйста, дайте мне знать.

+0

Когда вы публикуете фрагменты кода для исключения, помните, что мы не можем видеть номера строк из вашего исходного файла .. ** так сообщите нам, какая строка выбрала исключение, уже **. Знаете, мы этого не делаем. –

+0

OK Я сделаю это –

ответ

2

в линии

Session session = factory.openSession(); 

facotory является null

Вы объявили

private static SessionFactory factory; 

И никогда не инициализируется и использованием в addPaymentMethod метода.

+0

oh .. Я сделал это в основном методе тестирования , и я просто забуду это сделать после этого! _! lol спасибо –

+0

@BibooChung Это хорошо. Но, пожалуйста, не делайте больших постов. В этом очень трудно проследить проблему. Поместите подозрительные участки. Рад помочь :) –

Смежные вопросы