使用 MVC 模式在 JSP 页面中的 HTML <table> 中显示 JDBC ResultSet - NullPointerException
Posted
技术标签:
【中文标题】使用 MVC 模式在 JSP 页面中的 HTML <table> 中显示 JDBC ResultSet - NullPointerException【英文标题】:Show JDBC ResultSet in HTML <table> in JSP page using MVC pattern - NullPointerException 【发布时间】:2015-12-22 21:11:29 【问题描述】:如果我将 UsuarioDAO 中的代码放入 UsuarioServlet,JSP 运行良好。但是我正在尝试使用 MVC、OO,但我无法理解我的代码有什么问题,因为我从 UsuarioDAOUsuarioServlet 中的 /strong>,理论上应该可以很好地工作,但事实并非如此。如果有人能告诉我我做错了什么,我将不胜感激。
Usuario.java
package modelo;
public class Usuario
private String nome;
private String login;
private String senha;
private int tipo;
private String cpf;
public void setNome(String nome)
this.nome = nome;
public void setLogin(String login)
this.login = login;
public void setSenha(String senha)
this.senha = senha;
public void setTipo(int tipo)
this.tipo = tipo;
public void setCpf(String cpf)
this.cpf = cpf;
public String getNome()
return nome;
public String getLogin()
return login;
public String getSenha()
return senha;
public int getTipo()
return tipo;
public String getCpf()
return cpf;
UsuarioDAO.java
package controle;
import modelo.Usuario;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
public class UsuarioDAO
private Connection con;
public void init(ServletConfig config) throws ServletException
final String url = "jdbc:oracle:thin:@oracle.inf.poa.ifrs.edu.br:1521:XE";
final String us = "kar";
try
Class.forName("oracle.jdbc.OracleDriver");
catch (ClassNotFoundException ex)
Logger.getLogger(ex1.class.getName()).log(Level.SEVERE, null, ex);
try
con = DriverManager.getConnection(url, us, us);
catch (SQLException ex)
throw new ServletException(ex);
public List<Usuario> list() throws SQLException
List<Usuario> lista = new ArrayList<>();
try (
Connection connection = con;
PreparedStatement statement = connection.prepareStatement("SELECT * FROM JDBC_USUARIO");
ResultSet rs = statement.executeQuery();)
while (rs.next())
Usuario usuario = new Usuario();
usuario.setNome(rs.getString(1));
usuario.setLogin(rs.getString(2));
usuario.setSenha(rs.getString(3));
usuario.setTipo(rs.getInt(4));
usuario.setCpf(rs.getString(5));
lista.add(usuario);
return lista;
Usuarioservlet.java
package controle;
import modelo.Usuario;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "UsuarioServlet", urlPatterns = "/UsuarioServlet")
public class UsuarioServlet extends HttpServlet
UsuarioDAO usrDAO = new UsuarioDAO();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
try
List<Usuario> retorno = usrDAO.list();
request.setAttribute("listaJSP", retorno);
request.getRequestDispatcher("/WEB-INF/listarUsuarios.jsp").forward(request, response);
catch (SQLException e)
throw new ServletException("Erro ao obter os dados", e);
listarUsuarios.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Servlet Exibe Resultado</title>
</head>
<body>
<TABLE BORDER=“1”>
<th>ID</th>
<th>Nome</th>
<th>Login</th>
<th>Senha</th>
<th>Tipo</th>
<th>CPF</th>
<c:forEach items="$listaJSP" var="show" >
<c:set var="i" value="$i+1" />
<tr>
<td><c:out value="$i" /></td>
<td><c:out value="$show.nome" /></td>
<td><c:out value="$show.login" /></td>
<td><c:out value="$show.senha" /></td>
<td><c:out value="$show.tipo" /></td>
<td><c:out value="$show.cpf" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
【问题讨论】:
你能提供错误堆栈跟踪吗? 当我运行项目并尝试打开页面时,我只有这个错误:exception java.lang.NullPointerException 【参考方案1】:您收到此错误是因为您的 UsuarioDAO
上的 init()
方法从未被调用,而这一行
List<Usuario> retorno = usrDAO.list();
返回null
。
在调用列表之前尝试usrDAO.init()
。
原因可能是因为UsuarioDAO
不是httpServlet
所以init()
方法在创建时没有运行
【讨论】:
同样的错误,这是你说要试试的吗?usrDAO.list();
List<Usuario> retorno = usrDAO.list();
usrDAO.init(null);然后 ListusrDAO.init(null);
,它有效!所以,据我了解,我必须将class.method
称为 null 来初始化他,然后再次调用?像我以前一样调用class.method
不会“初始化”该方法吗?发生这种情况是因为不是 servlet?
init(... ) 命令只会在您的类扩展 HttpServlet 的情况下自动运行。这就是为什么当你将 UsuarioDAO 放入 UsuarioServlet 时它可以工作的原因。以上是关于使用 MVC 模式在 JSP 页面中的 HTML <table> 中显示 JDBC ResultSet - NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章