2015-10-25 2 views
0

только новичок здесь. Я только что создал простую страницу регистрации с использованием фреймворка (JSP и сервлетов) и зарегистрировать его в базе данных, когда я попытался запустить его, я получил сообщение об ошибкеСервер обнаружил внутреннюю ошибку, которая помешала ему выполнить этот запрос. java.lang.NullPointerException

Exception report: 
    SEVERE: Servlet.service() for servlet [Controller.RegistrationServlet] in context with path [/RegistrationApp] threw exception 
    java.lang.NullPointerException 
     at ModelDb.ModelDBConnect.registerUser(ModelDBConnect.java:55) 
     at Controller.RegistrationServlet.doPost(RegistrationServlet.java:63) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 

Вот мой исходный код:

Registrationview .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>Registration Form</title> 
</head> 
<style> 
body {background-color: #101010 } 
h3 {color:white} 
td{color: white} 
</style> 
<body> 
<h3>Registration Page</h3> 
<br> 
<form action="Registration" method="post"> 
<table> 
<tr> 
<td>Employee Id:</td> 
<td><input type="text" name="EMPLOYEE_ID"> Job Id:</td><td><input type="text" name="JOB_ID"></td> 
<tr> 
<td>First Name:</td> 
<td><input type="text" name="FIRST_NAME"> Salary:</td><td><input type="text" name="SALARY"></td> 
</tr> 
<tr> 
<td>Last Name:</td> 
<td><input type="text" name="LAST_NAME"> Commission:</td><td><input type="text" name="COMMISSION_PCT"></td> 
</tr> 
<tr> 
<td>Email:</td> 
<td><input type="text" name="EMAIL"> Manager Id:</td><td><input type="text" name="MANAGER_ID"></td> 
</tr> 
<tr> 
<td>Phone Number:</td> 
<td><input type="text" name="PHONE_NUMBER"> Department Id:</td><td><input type="text" name="DEPARTMENT_ID"></td> 
</tr> 
<tr> 
<td>Hire Date:</td> 
<td><input type="text" name="HIRE_DATE"> 
</tr> 
</table><br> 
<input type="submit" value="Register"> 
</form> 

</body> 
</html> 

контроллер:

RegistrationServlet 

package Controller; 

import java.io.IOException; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import Model.RegistrationBean; 
import ModelDb.ModelDBConnect; 


@WebServlet("/Registration") 
public class RegistrationServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    } 


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     // 1) Retrieve all parameters from JSP Page 

     String EMPLOYEE_ID = request.getParameter("EMPLOYEE_ID"); 
     String FIRST_NAME = request.getParameter("FIRST_NAME"); 
     String LAST_NAME = request.getParameter("LAST_NAME"); 
     String EMAIL= request.getParameter("EMAIL"); 
     String PHONE_NUMBER = request.getParameter("PHONE_NUMBER"); 
     String HIRE_DATE = request.getParameter("HIRE_DATE"); 
     String JOB_ID = request.getParameter("JOB_ID"); 
     String SALARY = request.getParameter("SALARY"); 
     String COMMISSION_PCT = request.getParameter("COMMISSION_PCT"); 
     String MANAGER_ID = request.getParameter("MANAGER_ID"); 
     String DEPARTMENT_ID = request.getParameter("DEPARTMENT_ID"); 

     //2) set all the values in the model class object 

     RegistrationBean rb = new RegistrationBean(); 

     rb.setEMPLOYEE_ID(EMPLOYEE_ID); 
     rb.setFIRST_NAME(FIRST_NAME); 
     rb.setLAST_NAME(LAST_NAME); 
     rb.setEMAIL(EMAIL); 
     rb.setPHONE_NUMBER(PHONE_NUMBER); 
     rb.setHIRE_DATE(HIRE_DATE); 
     rb.setJOB_ID(JOB_ID); 
     rb.setSALARY(SALARY); 
     rb.setCOMMISSION_PCT(COMMISSION_PCT); 
     rb.setMANAGER_ID(MANAGER_ID); 
     rb.setDEPARTMENT_ID(DEPARTMENT_ID); 

     // 3) Call a method from ModelDBConnect class to insert data in the table 


     String sql ="Insert into EMPLOYEES" + "(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID) VALUES" + 
     "(?,?,?,?,?,?,?,?,?,?,?)"; 

     int i = ModelDBConnect.registerUser(rb, sql); 

     if (i != 0) { 
      System.out.println("value inserted"); 
     } 
     else { 
      System.out.println("value not inserted"); 
     } 


    } 

} 

JavaBean

RegistrationBean 

package Model; 

public class RegistrationBean { 

    private String EMPLOYEE_ID; 
    private String FIRST_NAME; 
    private String LAST_NAME; 
    private String EMAIL; 
    private String PHONE_NUMBER; 
    private String HIRE_DATE; 
    private String JOB_ID; 
    private String SALARY; 
    private String COMMISSION_PCT; 
    private String MANAGER_ID; 
    private String DEPARTMENT_ID; 

    public String getEMPLOYEE_ID() { 
     return EMPLOYEE_ID; 
    } 
    public void setEMPLOYEE_ID(String eMPLOYEE_ID) { 
     EMPLOYEE_ID = eMPLOYEE_ID; 
    } 
    public String getFIRST_NAME() { 
     return FIRST_NAME; 
    } 
    public void setFIRST_NAME(String fIRST_NAME) { 
     FIRST_NAME = fIRST_NAME; 
    } 
    public String getLAST_NAME() { 
     return LAST_NAME; 
    } 
    public void setLAST_NAME(String lAST_NAME) { 
     LAST_NAME = lAST_NAME; 
    } 
    public String getEMAIL() { 
     return EMAIL; 
    } 
    public void setEMAIL(String eMAIL) { 
     EMAIL = eMAIL; 
    } 
    public String getPHONE_NUMBER() { 
     return PHONE_NUMBER; 
    } 
    public void setPHONE_NUMBER(String pHONE_NUMBER) { 
     PHONE_NUMBER = pHONE_NUMBER; 
    } 
    public String getHIRE_DATE() { 
     return HIRE_DATE; 
    } 
    public void setHIRE_DATE(String hIRE_DATE) { 
     HIRE_DATE = hIRE_DATE; 
    } 
    public String getJOB_ID() { 
     return JOB_ID; 
    } 
    public void setJOB_ID(String jOB_ID) { 
     JOB_ID = jOB_ID; 
    } 
    public String getSALARY() { 
     return SALARY; 
    } 
    public void setSALARY(String sALARY) { 
     SALARY = sALARY; 
    } 
    public String getCOMMISSION_PCT() { 
     return COMMISSION_PCT; 
    } 
    public void setCOMMISSION_PCT(String cOMMISSION_PCT) { 
     COMMISSION_PCT = cOMMISSION_PCT; 
    } 
    public String getMANAGER_ID() { 
     return MANAGER_ID; 
    } 
    public void setMANAGER_ID(String mANAGER_ID) { 
     MANAGER_ID = mANAGER_ID; 
    } 
    public String getDEPARTMENT_ID() { 
     return DEPARTMENT_ID; 
    } 
    public void setDEPARTMENT_ID(String dEPARTMENT_ID) { 
     DEPARTMENT_ID = dEPARTMENT_ID; 
    } 

} 

Подключение к базе данных:

ModelDBConnect.java 

package ModelDb; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 

import Model.RegistrationBean; 

public class ModelDBConnect { 

    // JDBC driver name and database 

    static final String JDBC_Driver = "oracle.jdbc.OracleDriver"; 
    static final String DB_URL = "jdbc:oracle:thin:@//localhost:1521/XE"; 

    // Database credentials 

    static final String USERNAME = "hr"; 
    static final String PASSWORD = "hr1"; 

    // method to connect to the database 

    private static Connection connect() { 

     Connection con = null; 

     // Register the JDBC Driver 

     try { 
      Class.forName("oracle.jdbc.OracleDriver"); 

      // open a connection 
      System.out.println("Connection to the database"); 

      con=DriverManager.getConnection(DB_URL, USERNAME, PASSWORD); 

     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return con; 
    } 

    public static int registerUser(RegistrationBean rb, String sql) { 
     int i = 0; 

     Connection con = connect(); 
     try { 
      PreparedStatement ps =con.prepareStatement(sql);-------Error here! 
      ps.setString(1, rb.getEMPLOYEE_ID()); 
      ps.setString(2, rb.getFIRST_NAME()); 
      ps.setString(3, rb.getLAST_NAME()); 
      ps.setString(4, rb.getEMAIL()); 
      ps.setString(5, rb.getPHONE_NUMBER()); 
      ps.setString(6, rb.getHIRE_DATE()); 
      ps.setString(7, rb.getJOB_ID()); 
      ps.setString(8, rb.getSALARY()); 
      ps.setString(9, rb.getCOMMISSION_PCT()); 
      ps.setString(10, rb.getMANAGER_ID()); 
      ps.setString(11, rb.getDEPARTMENT_ID()); 

      i=ps.executeUpdate(); 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return i; 

    } 


} 

Спасибо!

ответ

1

Я бы предположил, что вашему Connection con = connect(); присваивается значение null из-за сбоя в вашем методе connect().

Вместо того, чтобы бросать исключение при сбое, вы просто печатаете трассировку стека, а затем продолжаете, как будто ничего не произошло. («ОК, теперь что?»)

. Найдите и просмотрите созданную трассировку стека для получения дополнительных сведений о том, почему соединение не работает. Это может быть неправильная строка подключения, имя пользователя/пароль или проблема с вашей локальной базой данных.

Вам было бы лучше всего перебросить исключение или вообще не поймать его и объявить, что оно может быть выбрано как часть метода. Затем вы можете положиться на connect(), чтобы либо вернуть действительное соединение, либо сбой с исключением.

Как только вы должны сначала проверить con на предмет ошибки, прежде чем пытаться его использовать. As-is, исключение NullPointerException бросается при попытке вызвать .prepareStatement по адресу con, который является нулевым.

+0

Привет, ziesemer, спасибо за помощь, я только что просмотрел трассировку стека, и я узнал, почему соединение терпит неудачу .. Я просто последовал за этим классом «oracle.jdbc.OracleDriver» получает java.lang.ClassNotFoundExceptioni i выяснили, что в нем нет файла ojdbc6.jar .. поэтому я добавил его на вкладку сборки сборки, и это сработало! Благодаря! – Argel

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

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