2016-12-15 11 views
-1

関数を呼び出すときにサーブレットが応答しません:私はこのサーブレット持っ

import DAO.ConexionBDD; 
import DAO.Operaciones; 
import Modelos.Votante; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* 
* @author Lux 
*/ 
public class CreaVotante extends HttpServlet { 


    /** 
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
    * methods. 
    * 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException, SQLException { 
     response.setContentType("text/html;charset=UTF-8"); 
     try (PrintWriter out = response.getWriter()) { 
      /* TODO output your page here. You may use following sample code. */ 
      Votante v=new Votante(request.getParameter("nif"), request.getParameter("clave")); 
      Operaciones op=new Operaciones(); 
      op.registrar(v, Conexion); 
       out.println("<html>"); 
       out.println("<head><title>Title</title></head>"); 
       out.println("<body>"); 
       out.println("Hi"); 
      } 
     } 

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
    /** 
    * Handles the HTTP <code>GET</code> method. 
    * 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
     try { 
      processRequest(request, response); 
     } catch (SQLException ex) { 
      Logger.getLogger(CreaVotante.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    /** 
    * Handles the HTTP <code>POST</code> method. 
    * 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     try { 
      processRequest(request, response); 
     } catch (SQLException ex) { 
      Logger.getLogger(CreaVotante.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    /** 
    * Returns a short description of the servlet. 
    * 
    * @return a String containing servlet description 
    */ 
    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    }// </editor-fold> 

    private Connection Conexion; 

    public void init() throws ServletException { 
/* Establecemos la conexión, si no existe */ 
    try{ 
     ConexionBDD ConexBD=ConexionBDD.GetConexion(); 
     Conexion=ConexBD.GetCon(); 
    } 
    catch(ClassNotFoundException cnfe){ 
    } 
    catch(SQLException sqle){ 
    } 
} 
} 

そして、私は(V、Conexion)op.registrarを呼び出すと、それは働くことを止めて、呼び出しの下にあるものは印刷しませんが、私はその呼び出しを持っていないときはすべてを印刷します。 これは、関数のレジストラである:

public int registrar(Votante _Votante, Connection _Conexion) throws SQLException { 
     int resultado; 
     String nif=_Votante.getNif(); 
     String clave=_Votante.getClave(); 

     try{ 
      Statement s = _Conexion.createStatement(); 
      resultado=s.executeUpdate ("INSERT INTO votantes (nif, clave) VALUES ('nif', 'clave')"); 

     } 
     catch(SQLException SQLE){ 
      throw new SQLException(SQLE); 
     } 
     if (resultado==0)throw new SQLException(); 

     return resultado; 
    } 

編集:私は、データベースに接続する必要がある関数を呼び出すたび、それは動作しません。

import java.sql.*; 
public class ConexionBBDD { 
private static ConexionBBDD UnicaConexion=null; 
private Connection Conex; 

private ConexionBBDD() throws ClassNotFoundException, SQLException{ 
Class.forName("com.mysql.jdbc.Driver"); 
String connectionUrl = "jdbc:mysql://localhost:3306/bd_votaciones_inn"; 
Conex = DriverManager.getConnection(connectionUrl,"root","root"); 
} 

public synchronized static ConexionBBDD GetConexion() throws ClassNotFoundException, SQLException{ 
if(UnicaConexion == null){ 
UnicaConexion = new ConexionBBDD(); 
} 
return UnicaConexion; 
} 

public Connection GetCon(){ 
return Conex; 
} 

public void Destroy() throws SQLException{ 
Conex.close(); 
} 
} 
+0

関連していませんが、なぜcatchしてすぐにSQLExceptionを再スローしますか?いずれにしても、あなたは 'レジストラ 'をデバッグする必要があります。 –

+0

実際に私は問題がデータベースに接続されていることを発見しました。 – user7142440

答えて

0

理由はregistrar方法はdoPostまたはdoGet方法まで気泡例外をスローすることであると思われる: これは、接続クラスです。 processRequestメソッドで例外をキャッチするものはないので、registrarの呼び出し後の行は実行されません。

特定のエラーの詳細が含まれるログステートメントがいくつかあります。

+0

しかし、SQL文を使用できるようにするには例外が必要です... – user7142440

関連する問題