sirmd
Setembro 3, 2019, 4:03pm
#1
Bom dia pessoal, estou fazendo meu primeiro projeto web no NetBeans e não consigo fazer a tela do login funcionar, pelo erro que estou recebendo o problema parece ser na servlet que criei, porém, não consigo descobrir o que está acontecendo.
Estou usando o PostgreSQL como banco de dados e o TomCat 9.0
Segue abaixo o erro que recebo ao fazer o submit do form
Exception
javax.servlet.ServletException: Error instantiating servlet class [servlets.acao3] org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:835)
Root Cause
java.lang.RuntimeException: servlets.acao3.(acao3.java:1) java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:835)
Fico grato a quem possa me ajudar!
Boa tarde! Erro 500 é causado por erro interno do servidor. Tenta reiniciar o servidor, talvez volte. Senão voltar a funcionar, exclui o Apache e instala de novo
sirmd
Setembro 3, 2019, 5:42pm
#3
Vou testar assim que chegar em casa e te retorno.
Tentei reiniciar ele diversas vezes mas ele fica num loop infinito e não reinicia
Mostra o código, tanto a classe do servlet como o web.xml
se estiver usando. Está dando um erro na hora que o servidor vai instanciar seu servlet e é difícil saber o que é sem olhar o código.
1 curtida
sirmd
Setembro 3, 2019, 7:56pm
#5
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
<servlet-name>acao3</servlet-name>
<servlet-class>servlets.acao3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>acao3</servlet-name>
<url-pattern>/acao3</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
servlet acao3.java
package servlets;
import java.io.IOException;
import java.io.PrintWriter;
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 entidade.Usuario;
import dao.LoginUsuarioDAO;
import javax.servlet.RequestDispatcher;
import javax.swing.JOptionPane;
WebServlet(name = “acao3”, urlPatterns = {"/acao3"})
public class acao3 extends HttpServlet {
HttpServletRequest requisicao;
HttpServletResponse resposta;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try ( PrintWriter out = response.getWriter()) {
}
}
Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
requisicao = request;
resposta = response;
//doGet(requisicao, resposta);
String parametro = request.getParameter("param");
if (parametro.equals("loginSistema")){
String user = request.getParameter("user");
String senha = request.getParameter("pass");
Usuario u = new Usuario();
u.setNome(user);
u.setSenha(senha);
LoginUsuarioDAO login = new LoginUsuarioDAO();
if(login.Autenticar(u)){
encaminharPagina("sucesso.jsp");
} else {
encaminharPagina("erro.jsp");
}
}
}
Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
private void encaminharPagina(String pagina) {
try {
RequestDispatcher rd = requisicao.getRequestDispatcher(pagina);
rd.forward(requisicao, resposta);
} catch (IOException | ServletException e) {
System.out.println("erro no encaminhamento: " + e);
}
}
}
classe de apoio ConexaoBD
package apoio;
import java.sql.;
import java.util. ;
public class ConexaoBD {
private static ConexaoBD instancia = null;
private Connection conexao = null;
public ConexaoBD() {
try {
// Carrega informações do arquivo de propriedades
Properties prop = new Properties();
prop.load(getClass().getClassLoader().getResourceAsStream("apoio/db.properties"));
String dbdriver = prop.getProperty("db.driver");
String dburl = prop.getProperty("db.url");
String dbuser = prop.getProperty("db.user");
String dbsenha = prop.getProperty("db.senha");
// Carrega Driver do Banco de Dados
Class.forName(dbdriver);
if (dbuser.length() != 0) // conexão COM usuário e senha
{
conexao = DriverManager.getConnection(dburl, dbuser, dbsenha);
} else // conexão SEM usuário e senha
{
conexao = DriverManager.getConnection(dburl);
}
} catch (Exception e) {
System.err.println(e);
}
}
// Retorna instancia
public static ConexaoBD getInstance() {
if (instancia == null) {
instancia = new ConexaoBD();
}
return instancia;
}
// Retorna conexão
public Connection getConnection() {
if (conexao == null) {
throw new RuntimeException("conexao==null");
}
return conexao;
}
// Efetua fechamento da conexão
public void shutDown() {
try {
conexao.close();
instancia = null;
conexao = null;
} catch (Exception e) {
System.err.println(e);
}
}
}
classe Usuario
package entidade;
public class Usuario {
private int id;
private String nome;
private String senha;
public int getId(int id){
return id;
}
public void setId(int ID){
this.id = ID;
}
public String getNome(){
return nome;
}
public void setNome(String NOME){
this.nome = NOME;
}
public String getSenha(){
return senha;
}
public void setSenha(String SENHA){
this.senha = SENHA;
}
}
classe LoginUsuarioDAO
package dao;
import apoio.ConexaoBD;
import entidade.Usuario;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class LoginUsuarioDAO {
public boolean Autenticar(Usuario u){
try {
Statement st = ConexaoBD.getInstance().getConnection().createStatement();
String sql = "select count(nome) as encontrou from usuario" +
" where usuario.nome = "+ u.getNome() +
" and usuario.senha = " + u.getSenha();
ResultSet resultado = st.executeQuery(sql);
while(resultado.next()){
return 1 == resultado.getInt("encontrou"); //se retornar apenas 1 registro, será verdadeiro
}
} catch (SQLException ex) {
System.out.println("Erro ao fazer login: " + ex);
return false;
}
return false;
}
}
texto em itálico
Experimenta tirar as tags servlet
e servlet-mapping
(e tudo que tem dentro delas) do web.xml
. Você já mapeou o servlet usando a annotation @WebServlet
.
sirmd
Setembro 5, 2019, 11:21am
#9
Tentei fazer isso e não resolveu @lvbarbosa
Depois de reinstalar o tomcat novamente recebo um erro diferente agora:
Root Cause
java.lang.RuntimeException: conexao == null
apoio.ConexaoBD.getConnection(ConexaoBD.java:49)
dao.ProdutoDAO.consultarProduto(ProdutoDAO.java:107)
org.apache.jsp.cadProduto_jsp._jspService(cadProduto_jsp.java:171)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
Manda o código da conexaoDB,
Nossa, mas não tem nenhum retorno de erro? Só quando fecha a conexão?
Eu faço desse jeito, se quiser adaptar pra vc, é até melhor
sirmd
Setembro 5, 2019, 12:17pm
#13
O erro é esse que te mandei mesmo, vou testar com esse teu código, imagino que para o postgre não muda nada além do driver, correto?
Uma pergunta besta, mas o antivirus pode influenciar no TomCat e bloquear ele de alguma forma? Única coisa que ainda não tentei foi desativar ele enquanto rodo
Então, é que na verdade esse não é o erro em si, é uma mensagem que você passou.
Pode ser que o erro seja nome de usuário inválido, senha inválida, url invalida, mas você só vê isso:
conexao == null
É um erro não tratado.
Pro Postgres muda a URL tbm:
public Statement stm;// responsável por preparar e realizar pesquisas no banco de dados
public ResultSet rs;// responsável por armazenar o resultado de uma pesquisa passada para o Statement
private final String driver = "org.postgresql.Driver";// responsável por identificar o serviço de banco de dados
private final String caminho = "jdbc:postgresql://localhost:5432/banco";// responsável por setar o local do banco de dados
private final String usuario = "postgres";
private final String senha = "senha";
public Connection conn; // responsável por realizar a conexão com o banco de dados
public void conexao() { //Metodo Responsável por realizar a conexão com o banco
try {// tentativa inicial
System.setProperty("jdbc.Driver", driver); // seta a propriedade do driver de conexão
conn = DriverManager.getConnection(caminho, usuario, senha); // realiza a conexão com o banco de dados
//JOptionPane.showMessageDialog (null, "Conectado com Sucesso ao Banco de Dados!"); // imprime uma caixa de mensagens
//System.out.println("Conectado"); // imprime uma caixa de mensagens
} catch (SQLException ex) { // excessão
ex.printStacktrace(); Logger.getLogger(ConectaBanco.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void executaSQL(String sql) {
try {
stm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stm.executeQuery(sql);
} catch (SQLException ex) {
ex.printStacktrace();
}
}
public void desconecta() {//metodo para fechar a conexão com o banco de dados
try {
conn.close(); //fecha a conexão
//JOptionPane.showMessageDialog (null, "Desconectado com Sucesso!"); // imprime uma caixa de mensagens
//System.out.println("Desconectado");
//System.out.println();
} catch (SQLException ex) {
ex.printStacktrace();
}
}
Sobre o antivírus, não afeta não, senão o Tomcat nem iniciava!! O seu problema agora está na classe de conexão
Agora com essa classe que te passei, vc vai chamar assim:
ConectaBanco conecta = new ConectaBanco(); //global
public boolean autenticar(Usuario u){ //Nome de método sempre com camelcase, ou com underline, tipo autenticarLogin ou autenticar_login
conecta.conexao();
try {
String sql = "SELECT COUNT(nome) AS encontrou FROM usuario WHERE nome= '" + u.getNome() + "' AND senha= '" + u.getSenha() + "'";
conecta.executaSQL(sql);
while(conecta.rs.next()){
return 1 == resultado.getInt("encontrou"); //se retornar apenas 1 registro, será verdadeiro
}
} catch (SQLException ex) {
System.out.println("Erro ao fazer login: " + ex);
return false;
} finally {
conecta.desconecta();
}
return false;
}
sirmd
Setembro 5, 2019, 12:47pm
#17
Vou fazer um teste de meio dia e te retorno, muito obrigado pela ajuda
sirmd
Setembro 5, 2019, 1:32pm
#18
rodriguesabner:
ConectaBanco conecta = new ConectaBanco(); //global public boolean autenticar(Usuario u){ //Nome de método sempre com camelcase, ou com underline, tipo autenticarLogin ou autenticar_login conecta.conexao(); try { String sql = “SELECT COUNT(nome) AS encontrou FROM usuario WHERE nome= '” + u.getNome() + “’ AND senha= '” + u.getSenha() + “’”; conecta.executaSQL(sql); while(conecta.rs.next()){ return 1 == resultado.getInt(“encontrou”); //se retornar apenas 1 registro, será verdadeiro } } catch (SQLException ex) { System.out.println("Erro ao fazer login: " + ex); return false; } finally { conecta.desconecta(); } return false; }
Implantei essas classes que tu enviou e recebo isso agora:
Exception
java.lang.NullPointerException apoio.ConectaBanco.desconecta(ConectaBanco.java:73) dao.LoginUsuarioDAO.Autenticar(LoginUsuarioDAO.java:28) servlets.acao3.doPost(acao3.java:69) javax.servlet.http.HttpServlet.service(HttpServlet.java:660) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)
Boa, tem mais alguns erros em cima desse aí, manda eles também
Mas você está vendo esse erro na saída da IDE ou no site?