Olá bom dia, alguém poderia me ajudar por favor
Estou fazendo um programa JavaWeb de cadastro de funcionários e quando eu mando executar meu código da isso:
type Exception report
message An exception occurred processing JSP page /mostrartodosfuncionarios.jsp at line 35
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /mostrartodosfuncionarios.jsp at line 35
Apache Tomcat/7.0.47 - Error report
31:
32:
33:
34: <%for(Funcionario funcionario:funcionarios){ %>
35:
36:
37:
Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause
java.lang.NullPointerException br.com.a3.dao.FuncionarioDao.mostrarTodos(FuncionarioDao.java:47) org.apache.jsp.mostrartodosfuncionarios_jsp._jspService(mostrartodosfuncionarios_jsp.java:102) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.
ArrayList funcionarios = (ArrayList)request.getAttribute(“listaFuncionariosRecebidos”);
%>
Mostrar Todos os Funcionarios
<a href="cadastrarfuncionario.html"><button>Cadastrar Funcionário</button></a><br><br>
<table width="80%" border="1" cellspacing="0">
<thead>
<tr bgcolor="black" style="color:white">
<th>Código</th>
<th>Nome</th>
<th>Idade</th>
<th>CPF</th>
<th>RG</th>
<th>Cargo</th>
<th>Salário</th>
</tr>
</thead>
<tbody>
<%for(Funcionario funcionario:funcionarios){ %>
<tr>
<td><%=funcionario.getCodigo() %></td>
<td><%=funcionario.getNome() %></td>
<td><%=funcionario.getIdade() %></td>
<td><%=funcionario.getCpf() %></td>
<td><%=funcionario.getRg() %></td>
<td><%=funcionario.getCargo() %></td>
<td><%=funcionario.getSalario() %></td>
<td><a href="removerfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Excluir</a></td>
<td><a href="alterarfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Alterar </a></td>
</tr>
<%} %>
</tbody>
</table>
MostrarTodosFunc(Servelet)
@WebServlet ("/mostrartodosfunc.do")
public class MostrarTodosFunc extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FuncionarioDao funcionarioDao = new FuncionarioDao();
ArrayList<Funcionario> funcionariosRecebidos = funcionarioDao.mostrarTodos();
request.setAttribute("listaFuncionariosRecebidos", funcionariosRecebidos);
request.getRequestDispatcher("mostrartodosfuncionarios.jsp").forward(request, response);
}
}
FuncionarioDao
public ArrayList mostrarTodos(){
Connection con = Conexao.receberConexao();
ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
String sql = "SELECT * FROM funcionario";
try {
PreparedStatement preparador = con.prepareStatement(sql);
ResultSet resultado = preparador.executeQuery();
while(resultado.next()) {
Funcionario funcionario = new Funcionario();
funcionario.setCodigo(resultado.getInt("codigo"));
funcionario.setNome(resultado.getString("nome"));
funcionario.setIdade(resultado.getString("idade"));
funcionario.setCpf(resultado.getString("cpf"));
funcionario.setRg(resultado.getString("rg"));
funcionario.setCargo(resultado.getString("cargo"));
funcionario.setSalario(resultado.getDouble("salario"));
funcionarios.add(funcionario);
}
}catch (SQLException e) {
e.printStackTrace();
}
return funcionarios;
}
MostrarTodosFunc(Servelet)
@WebServlet ("/mostrartodosfunc.do")
public class MostrarTodosFunc extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FuncionarioDao funcionarioDao = new FuncionarioDao();
ArrayList<Funcionario> funcionariosRecebidos = funcionarioDao.mostrarTodos();
request.setAttribute("listaFuncionariosRecebidos", funcionariosRecebidos);
request.getRequestDispatcher("mostrartodosfuncionarios.jsp").forward(request, response);
}
}
FuncionarioDao
public ArrayList mostrarTodos(){
Connection con = Conexao.receberConexao();
ArrayList<Funcionario> funcionarios = new ArrayList<Funcionario>();
String sql = "SELECT * FROM funcionario";
try {
PreparedStatement preparador = con.prepareStatement(sql);
ResultSet resultado = preparador.executeQuery();
while(resultado.next()) {
Funcionario funcionario = new Funcionario();
funcionario.setCodigo(resultado.getInt("codigo"));
funcionario.setNome(resultado.getString("nome"));
funcionario.setIdade(resultado.getString("idade"));
funcionario.setCpf(resultado.getString("cpf"));
funcionario.setRg(resultado.getString("rg"));
funcionario.setCargo(resultado.getString("cargo"));
funcionario.setSalario(resultado.getDouble("salario"));
funcionarios.add(funcionario);
}
}catch (SQLException e) {
e.printStackTrace();
}
return funcionarios;
}
Use o debug, marque a linha 47 do método mostrarTodos, veja qual variável está null.
O atributo listaFuncionariosRecebidos foi enviado na requisição?
Ou está solicitando o atributo antes de fazer o set dele nas instrução ?request.setAttribute("listaFuncionariosRecebidos", funcionariosRecebidos);
Quem tem que armazenar o resultado é a sessão, não o request.
(HttpSession)request.getSession().setAttribute("listaFuncionariosRecebidos", funcionariosRecebidos);
Assim, que tem que buscar o resultado é a sessão, não o request.
(HttpSession)request.getSession().getAttribute("listaFuncionariosRecebidos");
Ficaria assim no servelet?
public class MostrarTodosFunc extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String HttpSession = null;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FuncionarioDao funcionarioDao = new FuncionarioDao();
ArrayList<Funcionario> funcionariosRecebidos = funcionarioDao.mostrarTodos();
(HttpSession).request.getSession().setAttribute("listaFuncionariosRecebidos", funcionariosRecebidos);
(HttpSession).request.getSession().getAttribute("listaFuncionariosRecebidos");
}
}
Consegui resolver com isso, agora está dando NullPointerException na linha 47 como vc tinha mencionado mais eu rodo o debug nela e não da nenhum tipo de erro
A instrução deve ser chamada na página JSP.
Se não chamar ela lá da nullPointerException.
No servlet vc chama o setAttribute (ok).
Na JSP o getAttribute(falta chamar lá).
Na JSP substituir por <%ArrayList funcionarios = (ArrayList)((HttpSession) request.getSession().getAttribute(“listaFuncionariosRecebidos”));
%>
O HttpSession eu preciso criar uma constant uma variavel ou definir um parametro pq ta dando erro. E qualquer um desses que eu crio da erro no request se eu deixar sem o HttpSession ele volta pro primeiro erro que estava dando
se eu deixo apenas o resquest.getSession ele funciona mais da o erro do NullPointer
Meu servelet ta assim:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FuncionarioDao funcionarioDao = new FuncionarioDao();
ArrayList<Funcionario> funcionariosRecebidos = funcionarioDao.mostrarTodos();
(HttpSession).request.getSession().setAttribute("listaFuncionariosRecebidos", funcionariosRecebidos);
(HttpSession).request.getSession().getAttribute("listaFuncionariosRecebidos");
O erro que da no request fala para eu renomear ele
}
}
Se ficar assim da o primeiro erro que deu no começo do tópico
<%
ArrayList funcionarios = (ArrayList)(HttpSession)request.getSession().getAttribute(“listaFuncionariosRecebidos”);
%>
Nao tem ponto depois do casting (HttpSession) request.getSession().setAttribute("listaFuncionariosRecebidos);
Esta instrução: <%ArrayList funcionarios = (ArrayList)request.getAttribute(“listaFuncionariosRecebidos”);
%> deve ser chamada na JSP.
Qual o Html completo da JSP?
Mostrar Todos os Funcionarios
<a href="cadastrarfuncionario.html"><button>Cadastrar Funcionário</button></a><br><br>
<table width="80%" border="1" cellspacing="0">
<thead>
<tr bgcolor="black" style="color:white">
<th>Código</th>
<th>Nome</th>
<th>Idade</th>
<th>CPF</th>
<th>RG</th>
<th>Cargo</th>
<th>Salário</th>
</tr>
</thead>
<tbody>
<%for(Funcionario funcionario:funcionarios){ %>
<tr>
<td><%=funcionario.getCodigo() %></td>
<td><%=funcionario.getNome() %></td>
<td><%=funcionario.getIdade() %></td>
<td><%=funcionario.getCpf() %></td>
<td><%=funcionario.getRg() %></td>
<td><%=funcionario.getCargo() %></td>
<td><%=funcionario.getSalario() %></td>
<td><a href="removerfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Excluir</a></td>
<td><a href="alterarfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Alterar </a></td>
</tr>
<%} %>
</tbody>
</table>
<%@page import=“br.com.a3.dao.Funcionario” %>
<%@page import=“java.util.ArrayList”%>
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
Mostrar Todos Funcionarios
<%
ArrayList funcionarios = (ArrayList)(HttpSession)request.getSession().getAttribute("listaFuncionariosRecebidos");
%>
<h1>Mostrar Todos os Funcionarios</h1>
<a href="cadastrarfuncionario.html"><button>Cadastrar Funcionário</button></a><br><br>
<table width="80%" border="1" cellspacing="0">
<thead>
<tr bgcolor="black" style="color:white">
<th>Código</th>
<th>Nome</th>
<th>Idade</th>
<th>CPF</th>
<th>RG</th>
<th>Cargo</th>
<th>Salário</th>
</tr>
</thead>
<tbody>
<%for(Funcionario funcionario:funcionarios){ %>
<tr>
<td><%=funcionario.getCodigo() %></td>
<td><%=funcionario.getNome() %></td>
<td><%=funcionario.getIdade() %></td>
<td><%=funcionario.getCpf() %></td>
<td><%=funcionario.getRg() %></td>
<td><%=funcionario.getCargo() %></td>
<td><%=funcionario.getSalario() %></td>
<td><a href="removerfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Excluir</a></td>
<td><a href="alterarfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Alterar </a></td>
</tr>
<%} %>
</tbody>
</table>
Eu deixando o:
(HttpSession) request.getSession().setAttribute(“listaFuncionariosRecebidos”, funcionariosRecebidos);
(HttpSession) request.getSession().getAttribute(“listaFuncionariosRecebidos”);
Da esse erro entre o (HttpSession) e o request :
Multiple markers at this line
- Syntax error, insert “AssignmentOperator Expression” to complete Assignment
- Syntax error, insert “;” to complete Statement
- The method setAttribute(String, Object) in the type HttpSession is not applicable for the arguments
(String)
lgoliveira1:
Syntax error
Responder por celular da nisso, erro de sintaxe.
Tente:
No servlet:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
FuncionarioDao funcionarioDao = new FuncionarioDao();
ArrayList<Funcionario> funcionariosRecebidos = funcionarioDao.mostrarTodos();
HttpSession session = request.getSession();
session.setAttribute("listaFuncionariosRecebidos", funcionariosRecebidos);
request.getRequestDispatcher("mostrartodosfuncionario.jsp").forward(request, response);
}
Na JSP:
<%
ArrayList<Funcionario> funcionarios = (ArrayList<Funcionario>)session.getAttribute("listaFuncionariosRecebidos");
%>
<h1>Mostrar Todos os Funcionarios</h1>
<a href="cadastrarfuncionario.html"><button>Cadastrar Funcionário</button></a><br><br>
<table width="80%" border="1" cellspacing="0">
<thead>
<tr bgcolor="black" style="color:white">
<th>Código</th>
<th>Nome</th>
<th>Idade</th>
<th>CPF</th>
<th>RG</th>
<th>Cargo</th>
<th>Salário</th>
</tr>
</thead>
<tbody>
<%for(Funcionario funcionario:funcionarios){ %>
<tr>
<td><%=funcionario.getCodigo() %></td>
<td><%=funcionario.getNome() %></td>
<td><%=funcionario.getIdade() %></td>
<td><%=funcionario.getCpf() %></td>
<td><%=funcionario.getRg() %></td>
<td><%=funcionario.getCargo() %></td>
<td><%=funcionario.getSalario() %></td>
<td><a href="removerfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Excluir</a></td>
<td><a href="alterarfuncionario.do?codigo=<%=funcionario.getCodigo() %>">Alterar </a></td>
</tr>
<%} %>
</tbody>
</table>
Resultado emulado:
Continuou dando nullPointer
Vai ter que ser no debug.
Vc vai marcar todas as linhas do doGet e procurar por alguma variável que esteja null.
Depois vc vai marcar a linha:
E ver quem está como null.
Depois imprima a lista de erros.
Não restou a mim muitas suposições.
Por precaução, imprima o método mostrarTodos(), pra ver se ele retorna null;
Certo apareceu aqui que minha con na classe coxnexao está null é a unica que tem, tem uma forma de fazer a conexao sem ser null?
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdfuncionarios","root","");
System.out.println("Banco de Dados Conectado com Sucesso!");
} catch (SQLException | ClassNotFoundException e) {
System.err.println("Erro ao Conectar ao Banco de Dados!");
e.printStackTrace();
}
return con;
}
}
Quando eu rodo o mostrarTodos no java ele mostra todos os dados cadastrado no banco de dados certinho
funcionarios também está null
No servlet marque a linha acima.
Execute o projeto com debug.
Veja se a variável funcionariosRecebidos está null.
Imprima o método mostrarTodos() aqui.
Imprima a pilha de erro aqui.
Eu não posso fazer muito apenas sugerir:
opçao 1
try{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdfuncionarios","root","");
System.out.println("Banco de Dados Conectado com Sucesso!");
} //manter o resto
opçao 2
try{
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdfuncionarios","root","");
System.out.println("Banco de Dados Conectado com Sucesso!");
} //manter o resto
opçao 3
1ª vá no projeto
2ª clique com o botão auxiliar em blibliotecas
3º clique em adicionar biblioteca
4º selecione a opção Driver JDBC do MySql
5º remover o Class.forName, como se segue:
try{
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdfuncionarios","root","");
System.out.println("Banco de Dados Conectado com Sucesso!");
} //manter o resto