Carcleo 4 Denunciar post Postado Junho 22, 2015 Olá pessoal, estou tomando uma coça para entender a dinâmica do java(fase inicial) mas acho que para o que estou querendo estou quase lá. Quando tento acessar o servlet recebo o seguinte erro: HTTP Status 500 - type Exception report message description The server encountered an internal error that prevented it from fulfilling this request. exception java.lang.NullPointerException java.util.Properties$LineReader.readLine(Unknown Source) java.util.Properties.load0(Unknown Source) java.util.Properties.load(Unknown Source) util.Conexao.getConnection(Conexao.java:22) dao.ProfessorDAO.<init>(ProfessorDAO.java:30) controller.ProfessorServlet.processRequest(ProfessorServlet.java:52) controller.ProfessorServlet.doPost(ProfessorServlet.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) note The full stack trace of the root cause is available in the Apache Tomcat/8.0.22 logs. Apache Tomcat/8.0.22 Meu arquivo de conexão é: package util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class Conexao { private static Connection connection = null; public static Connection getConnection() { if (connection != null) return connection; else { try { Properties prop = new Properties(); InputStream inputStream = Conexao.class.getClassLoader().getResourceAsStream("db.properties"); prop.load(inputStream); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String user = prop.getProperty("user"); String password = prop.getProperty("password"); Class.forName(driver); connection = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return connection; } } } O tal arquivo db.properties é driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/imwsaogotardo user=imwsaogotardo password=carcleo Meu arquivo de servlet é package controller; import java.io.IOException; import javax.servlet.RequestDispatcher; 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 dao.ProfessorDAO; import model.Professor; /** * Servlet implementation class ProfessorServlet */ @WebServlet("/ProfessorServlet") public class ProfessorServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ProfessorServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String login = request.getParameter("login"); String senha = request.getParameter("senha"); String nome = request.getParameter("nome"); java.util.Date data = new java.util.Date(); int sala = Integer.parseInt(request.getParameter("sala")); Professor professor = new Professor( login, senha, nome, data, sala ); ProfessorDAO dao = new ProfessorDAO(); dao.addProfessor(professor); RequestDispatcher rd = request.getRequestDispatcher("listar.jsp"); rd.forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest( request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest( request, response); } } E o arquivo dao é package dao; /* ///////////////////////////////////////BUSCANDO O ID DA SALA///////////////////// PreparedStatement select = connection.prepareStatement( "select id from sala where nome = ?"); select.setString(1, _professor.getNomeSala()); ResultSet rs = select.executeQuery(); int idSala = rs.getInt("id"); ////////////////////////////////////////////////////////////////////////////////// */ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.GregorianCalendar; import model.Professor; import util.Conexao; public class ProfessorDAO { private Connection connection; public ProfessorDAO() { connection = Conexao.getConnection(); } public void addProfessor(Professor _professor) { try { PreparedStatement insert = connection.prepareStatement("insert into professor(login, senha, nome, dataCadastro, sala) values (?, ?, ?, ?, ? )"); // Parameters start with 1 insert.setString(1, _professor.getLogin()); insert.setString(2, _professor.getSenha()); insert.setString(3, _professor.getNome()); insert.setDate(4, new java.sql.Date(_professor.getDataCadastro().getTime())); insert.setInt(5, _professor.getSala()); insert.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public void deleteProfessor(int _professorId) { try { PreparedStatement preparedStatement = connection.prepareStatement("delete from professor where id=?"); // Parameters start with 1 preparedStatement.setInt(1, _professorId); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public void updateProfessor(Professor _professor) { try { //java.util.Date novaData = new Date(); GregorianCalendar novaData = new GregorianCalendar(); java.sql.Date dataNova = new java.sql.Date(novaData.getTime().getTime()); PreparedStatement preparedStatement = connection. prepareStatement("update professor set nome=?, login=?, senha=?, dataCadastro=?, sala=?" + "where id=?"); // Parameters start with 1 preparedStatement.setString(1, _professor.getNome()); preparedStatement.setString(2, _professor.getLogin()); preparedStatement.setString(3, _professor.getSenha()); preparedStatement.setDate(4, dataNova); preparedStatement.setInt(5, _professor.getSala()); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public List<Professor> getAllProfessores() { List<Professor> professor = new ArrayList<Professor>(); try { Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery("select nome, login, senha, dataCadastro, sala from professor"); while (rs.next()) { Professor professorRS = new Professor( rs.getString("nome"), rs.getString("login"), rs.getString("senha"), rs.getDate("dataCadastro"), rs.getInt("sala") ); professor.add(professorRS); } } catch (SQLException e) { e.printStackTrace(); } return professor; } public Professor getProfessorById(int _professorId) { Professor professor; professor = null; try { PreparedStatement preparedStatement = connection.prepareStatement("select nome, login, senha, dataCadastro sala from professor where id=?"); preparedStatement.setInt(1, _professorId); ResultSet rs = preparedStatement.executeQuery(); if (rs.next()) { new Professor( rs.getString("nome"), rs.getString("login"), rs.getString("senha"), rs.getDate("dataCadastro"), rs.getInt("sala") ); } } catch (SQLException e) { e.printStackTrace(); } return professor; } } O jsp é <div id="indexMeio"> <form action="ProfessorServlet" method="post"> <input type="text" name="login" id="login"><br /> <input type="text" name="senha" id="senha"><br /> <input type="text" name="nome" id="nome"><br /> <input type="text" name="sala" id="sala"><br /> <input type="submit" value="Envia"> </form><br /> </div> Onde esta o erro? Obs.: tenho no diretorio imwsaogotardo\WebContent\WEB-INF\lib o .jar mysql-connector-java-5.1.35-bin.jar Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Junho 23, 2015 Você tem esse arquivo db.properties? Pelo que vejo, este arquivo contém as propriedade para conexão a base de dados. Neste inicio de aprendizado colocaria as propriedade de conexão "hard code" mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 23, 2015 "Neste inicio de aprendizado colocaria as propriedade de conexão "hard code" mesmo." Como seria isso Prog? Obs.: O arquivo Conexao.java e o arquivo db.properties estão no mesmo diretório O projeto se chama imwsaogotardo e o diretório da classe é imwsaogotardo.src.util Nesse diretório tenho só esses 2 arquivos que são Conexao.java e o arquivo db.properties Será que o problema não é o endereço de do arquivo db.properties? Quando mudo o endereço para ... InputStream inputStream = Conexao.class.getClassLoader().getResourceAsStream("util/db.properties"); ... O erro muda para: HTTP Status 500 - typeException report message descriptionThe server encountered an internal error that prevented it from fulfilling this request. exception java.lang.NullPointerException dao.ProfessorDAO.addProfessor(ProfessorDAO.java:36) controller.ProfessorServlet.processRequest(ProfessorServlet.java:53) controller.ProfessorServlet.doPost(ProfessorServlet.java:67) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) noteThe full stack trace of the root cause is available in the Apache Tomcat/8.0.22 logs. Apache Tomcat/8.0.22 Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 23, 2015 Tentei criar a conexão do jeito abaixo: package uitil; import java.sql.*; public class Conexao { static String status=""; public static Connection getConnection() { Connection conn=null; try { Class.forNmame("com.mysql.jdbc.Driver").newInstance(); String url = "jdbc:mysql://localhost/imwsaogotardo?user=imwsaogotardo&password=carcleo"; conn = DriverManager.getConnection(url); status = "Connection opened"; } catch (SQLException e) { status = e.getMessage(); } catch (ClassNotFoundException e) { status = e.getMessage(); } catch (Exception e) { status = e.getMessage(); } return conn; } } Mas dá erro na linha 36 da classe FuncionariosDAO public void addProfessor(Professor _professor) { try { //linha 36 é a de baixo PreparedStatement insert = connection.prepareStatement("insert into professor(login, senha, nome, dataCadastro, sala) values (?, ?, ?, ?, ? )"); insert.setString(1, _professor.getLogin()); insert.setString(2, _professor.getSenha()); insert.setString(3, _professor.getNome()); insert.setDate(4, new java.sql.Date(_professor.getDataCadastro().getTime())); insert.setInt(5, _professor.getSala()); insert.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 23, 2015 Acabei de observar o seguinte. Quando posto uma validação de que a conexão foi bem feita ou não dá que não. Será que não estou colocando algum CLASS_PATH ou coisa assim? ........ public class ProfessorDAO { private Connection connection; public ProfessorDAO() { connection = Conexao.getConnection(); if (connection==null) { System.out.println("Fora do Ar");} else { System.out.println("No Ar");} } ...... Inclui no projeto o mysql-connector-java-5.1.35-bin.jar inclui esse conector na CLASS_PATH coloquei esse connector na pasta workspace\imwsaogotardo\WebContent\WEB-INF\lib. Nada faz essa conexão funcionar! Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Junho 23, 2015 E qual erro é? Se você não postar o stacktrace vai ser difícil adivinhar o que se passa. Não está faltando especificar a porta na url de conexão? String user = "foo", pass = "foo123", url = "jdbc:mysql://localhost:3306/apps"; Connection conn = DriverManager.getConnection(url, user, pass); Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 23, 2015 O amigão. Você seguiu o post desde o começo? Já postei umas 3 vezes o erro as vou colocar de novo. O projeto se chama imwsaogotardo e o diretório da classe é imwsaogotardo.src.util.Conexao.java Nesse diretório tenho só esses 2 arquivos que são Conexao.java e o arquivo db.properties A classe de conexão é essa: package util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class Conexao { private static Connection connection = null; public static Connection getConnection() { if (connection != null) return connection; else { try { Properties prop = new Properties(); InputStream inputStream = Conexao.class.getClassLoader().getResourceAsStream("util/db.properties"); prop.load(inputStream); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String user = prop.getProperty("user"); String password = prop.getProperty("password"); Class.forName(driver); connection = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return connection; } } } O arquivo db.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/imwsaogotardo user=imwsaogotardo password=carcleo E o erro é esse: HTTP Status 500 - type Exception report message description The server encountered an internal error that prevented it from fulfilling this request. exception java.lang.NullPointerException dao.ProfessorDAO.addProfessor(ProfessorDAO.java:39) controller.ProfessorServlet.processRequest(ProfessorServlet.java:54) controller.ProfessorServlet.doPost(ProfessorServlet.java:68) javax.servlet.http.HttpServlet.service(HttpServlet.java:648) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) note The full stack trace of the root cause is available in the Apache Tomcat/8.0.22 logs. Apache Tomcat/8.0.22 Coloquei no momento de chamar a classe conexão um validador ... private Connection connection; public ProfessorDAO() { connection = Conexao.getConnection(); if (connection==null) { System.out.println("Fora do Ar");} else { System.out.println("No Ar");} } ... Mas só retorna que esta "Fora do AR" Compartilhar este post Link para o post Compartilhar em outros sites
reebr 94 Denunciar post Postado Junho 23, 2015 Óras, foi você quem abriu o tópico com um código (lendo do arquivo de propriedades) e depois postou um outro código (com as propriedades de conexão dentro da classe, post #4), isso não é acompanhar? Eu me referi ao segundo, pedi o stacktrace dele... mas enfim. Antes de deixar de acompanhar: // Class.forName... Class.forNmame("com.mysql.jdbc.Driver").newInstance(); Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 23, 2015 Resolvido! Meu problema era o connector mysql-connector-java-5.1.35-bin.jar Que não estava funcionando. Troquei por com.mysql.jdbc_5.1.5.jar e funcionou! Compartilhar este post Link para o post Compartilhar em outros sites