Listar produtos com nome da categoria

Desculpe a ignorância quanto a este assunto mas é que estou estudando javaweb e nunca tinha programado orientado a objeto e estou com uma dificuldade boba mas que me travou.

É o seguinte:

Tenho a classe bean Produto:

import java.sql.Date;

public class Produto {
private Integer codProduto;
private String descricao;
private String embalagem;
private Integer categoria;
private Integer codigoBarra;
private Date dataCadastro;
private String unidade;
private Integer fornecedor;
private Date dataExclusao;
private Double precoCompra;
private Double precoVenda;

public Integer getCodProduto() {
	return codProduto;
}
public void setCodProduto(Integer codProduto) {
	this.codProduto = codProduto;
}
public String getDescricao() {
	return descricao;
}
public void setDescricao(String descricao) {
	this.descricao = descricao;
}
public String getEmbalagem() {
	return embalagem;
}
public void setEmbalagem(String embalagem) {
	this.embalagem = embalagem;
}
public Integer getCategoria() {
	return categoria;
}
public void setCategoria(Integer categoria) {
	this.categoria = categoria;
}
public Integer getCodigoBarra() {
	return codigoBarra;
}
public void setCodigoBarra(Integer codigoBarra) {
	this.codigoBarra = codigoBarra;
}
public Date getDataCadastro() {
	return dataCadastro;
}
public void setDataCadastro(Date dataCadastro) {
	this.dataCadastro = dataCadastro;
}
public String getUnidade() {
	return unidade;
}
public void setUnidade(String unidade) {
	this.unidade = unidade;
}
public Integer getFornecedor() {
	return fornecedor;
}
public void setFornecedor(Integer fornecedor) {
	this.fornecedor = fornecedor;
}
public Date getDataExclusao() {
	return dataExclusao;
}
public void setDataExclusao(Date dataExclusao) {
	this.dataExclusao = dataExclusao;
}
public Double getPrecoCompra() {
	return precoCompra;
}
public void setPrecoCompra(Double precoCompra) {
	this.precoCompra = precoCompra;
}
public Double getPrecoVenda() {
	return precoVenda;
}
public void setPrecoVenda(Double precoVenda) {
	this.precoVenda = precoVenda;
}

}

O método listar dentro do ProdutoDao:

package aplic.controle.model.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import aplic.controle.model.util.Conexao;
import aplic.controle.model.vo.Produto;

public class ProdutoDao {
static Connection conexao;

public ProdutoDao(){
	conexao = Conexao.conectar();
}


public static ArrayList<Produto> listar(){
	try {
		conexao = Conexao.conectar();
		ArrayList<Produto> lista = null;
		String sql="SELECT \"CODPROD\",\"DESCRICAO\",\"EMBALAGEM\",\"CODIGOBARRA\",\"CODCATEG\"," +
				    "\"DTCADASTRO\",\"UNIDADE\",\"CODFORNEC\",\"DTEXCLUSAO\",\"PCOMPRA\",\"PVENDA\" " +
				    "from produto ";
		PreparedStatement consulta = conexao.prepareStatement(sql);
		ResultSet resultado = consulta.executeQuery();
		lista = new ArrayList<Produto>();
		while(resultado.next()){
			  Produto produto = new Produto();
			  
			  produto.setCodProduto(resultado.getInt("CODPROD"));
			  produto.setDescricao(resultado.getString("DESCRICAO"));
			  produto.setEmbalagem(resultado.getString("EMBALAGEM"));
			  produto.setCodigoBarra(resultado.getInt("CODIGOBARRA"));
			  produto.setCategoria(resultado.getInt("CODCATEG"));
			  produto.setDataCadastro(resultado.getDate("DTCADASTRO"));
			  produto.setUnidade(resultado.getString("UNIDADE"));
			  produto.setFornecedor(resultado.getInt("CODFORNEC"));
			  produto.setDataExclusao(resultado.getDate("DTEXCLUSAO"));
			  produto.setPrecoCompra(resultado.getDouble("PCOMPRA"));
			  produto.setPrecoVenda(resultado.getDouble("PVENDA"));
			  
			  lista.add(produto);
		}
		return lista;
	} catch (Exception e) {
		e.printStackTrace();
		return null;
	}
}

}

A classe de service ListarProduto:

package aplic.controle.controller.service;

import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;

import aplic.controle.model.dao.ProdutoDao;
import aplic.controle.model.vo.Produto;

public class ListarProduto {
public static String execute(HttpServletRequest request){
String jsp = “”;
try {
ArrayList listaProduto = ProdutoDao.listar();
if(listaProduto != null){
request.setAttribute(“listaProduto”, listaProduto);
jsp="/listarproduto.jsp";
}else{
String erro = “Não existe registro!”;
request.setAttribute(“erro”, erro);
jsp="/erro.jsp";
}
} catch (Exception e) {
e.printStackTrace();
jsp ="";
}
return jsp;
}

}

A classe bean Categoria:

package aplic.controle.model.vo;

public class Categoria {
private Integer codCateg;
private String Categoria;

public Integer getCodCateg() {
	return codCateg;
}
public void setCodCateg(Integer codCateg) {
	this.codCateg = codCateg;
}
public String getCategoria() {
	return Categoria;
}
public void setCategoria(String categoria) {
	Categoria = categoria;
}

}

A CategoriaDao:

package aplic.controle.model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import aplic.controle.model.util.Conexao;
import aplic.controle.model.vo.Categoria;

public class CategoriaDao {
static Connection conexao;

public static ArrayList<Categoria> listarCategoria(){
	try {
		conexao = Conexao.conectar();
		ArrayList<Categoria> lista = null;
		String sql="SELECT * From categorias order by \"CATEGORIA\" ";
		PreparedStatement consulta = conexao.prepareStatement(sql);
		ResultSet resultado = consulta.executeQuery();
		lista = new ArrayList<Categoria>();
		while(resultado.next()){
			  Categoria categoria = new Categoria();
			  categoria.setCodCateg(resultado.getInt("CODCATEG"));
			  categoria.setCategoria(resultado.getString("CATEGORIA"));
			  lista.add(categoria);
		}
		return lista;
	} catch (Exception e) {
		e.printStackTrace();
		return null;
	}
}

}

O Problema está em listarproduto.jsp abaixo:

<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@page import=“aplic.controle.model.dao.CategoriaDao”%>
<jsp:useBean id=“produto” scope=“session” class= “aplic.controle.model.vo.Produto” />
<jsp:useBean id=“categoria” scope=“session” class= “aplic.controle.model.vo.Categoria” />
<jsp:useBean id=“categoriadao” scope=“session” class= “aplic.controle.model.dao.CategoriaDao” />
<jsp:useBean id=“listaProduto” scope=“request” class=“java.util.ArrayList”/>

Listar Produtos
<%@ include file="/menu.jsp" %>

Lista de Produtos

Código Descrição Embalagem Código de Barras Categoria Data Cadastro Unidade Fornecedor Data Exclusão Preço de Compra Preço de Venda Excluir
"> "> "> "> "> "> "> "> "> "> "> ">X

Sistema JavaWeB desenvolvido por Walgnei Luiz Cardoso 2011. © Todos os direitos reservados.

${lista.categoria} é o codigo da categoria na classe Produto e não o nome da categoria da classe Categoria que é o que eu desejo mostrar.

Duas dicas, use a tag CODE para códigos (jsp, java, javascript, qualquer coisa) e poste sua dúvida, você disse que o problema está na JSP mas não disse qual o problema ou exceção, fica dificil de quem quer te ajudar ler tudo e interpretar. Tente focar, tanto o código quanto sua dúvida, e reduza a quantidade de código ou jsp, mostrando só onde há o erro.

Desculpe, por não ser tão claro e postar este tanto de código, é que eu queria mostrar tudo para análise. Mas a questão é a seguinte, eu faço páginas em php e agora com POO em java eu estou meio perdido onde colocar tal código.

Eu criei a seguinte tabela no postgresql.

CREATE TABLE produto
(
  "CODPROD" bigint NOT NULL DEFAULT nextval('produto_codprod_seq'::regclass),
  "DESCRICAO" character varying(40) NOT NULL,
  "EMBALAGEM" character varying(40),
  "CODIGOBARRA" bigint,
  "CODCATEG" bigint NOT NULL,
  "DTCADASTRO" date NOT NULL,
  "UNIDADE" character varying(40),
  "CODFORNEC" bigint NOT NULL,
  "DTEXCLUSAO" date,
  "PCOMPRA" double precision,
  "PVENDA" double precision,
  CONSTRAINT produto_pkey PRIMARY KEY ("CODPROD"),
  CONSTRAINT "produto_CODCATEG_fkey" FOREIGN KEY ("CODCATEG")
      REFERENCES categorias ("CODCATEG") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT "produto_CODFORNEC_fkey" FOREIGN KEY ("CODFORNEC")
      REFERENCES fornecedor ("CODFORNEC") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

Eu listei esta tabela da seguinte forma pelo Dao:

public static ArrayList<Produto> listar(){
    	try {
			conexao = Conexao.conectar();
			ArrayList<Produto> lista = null;
			String sql="SELECT \"CODPROD\",\"DESCRICAO\",\"EMBALAGEM\",\"CODIGOBARRA\",\"CODCATEG\"," +
    				    "\"DTCADASTRO\",\"UNIDADE\",\"CODFORNEC\",\"DTEXCLUSAO\",\"PCOMPRA\",\"PVENDA\" " +
    				    "from produto ";
			PreparedStatement consulta = conexao.prepareStatement(sql);
			ResultSet resultado = consulta.executeQuery();
			lista = new ArrayList<Produto>();
			while(resultado.next()){
				  Produto produto = new Produto();
				  
				  produto.setCodProduto(resultado.getInt("CODPROD"));
				  produto.setDescricao(resultado.getString("DESCRICAO"));
				  produto.setEmbalagem(resultado.getString("EMBALAGEM"));
				  produto.setCodigoBarra(resultado.getInt("CODIGOBARRA"));
				  produto.setCategoria(resultado.getInt("CODCATEG"));
				  produto.setDataCadastro(resultado.getDate("DTCADASTRO"));
				  produto.setUnidade(resultado.getString("UNIDADE"));
				  produto.setFornecedor(resultado.getInt("CODFORNEC"));
				  produto.setDataExclusao(resultado.getDate("DTEXCLUSAO"));
				  produto.setPrecoCompra(resultado.getDouble("PCOMPRA"));
				  produto.setPrecoVenda(resultado.getDouble("PVENDA"));
				  
				  lista.add(produto);
			}
			return lista;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
    }

E no JSP eu fiz o seguinte:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%@page import="aplic.controle.model.dao.CategoriaDao"%>
<jsp:useBean id="produto" scope="session" class= "aplic.controle.model.vo.Produto" />
<jsp:useBean id="categoria" scope="session" class= "aplic.controle.model.vo.Categoria" />
<jsp:useBean id="categoriadao" scope="session" class= "aplic.controle.model.dao.CategoriaDao" />
<jsp:useBean id="listaProduto" scope="request" class="java.util.ArrayList"/> 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link  rel=stylesheet href="paginas.css" type="text/css">
<link  rel=stylesheet href="listagem.css" type="text/css">
<title>Listar Produtos</title>
</head>
<body>
<div id="geral">
<div id="banner"></div>
<div id="menu"><%@ include file="/menu.jsp" %></div>
<div id="conteudocorpo">
<h3 class="htres">Lista de Produtos</h3>
<form name="frmProduto" method="post">
<div id="resultado">
<table class="titulo">
<tr>
 <td class="cel">C&oacute;digo</td>
 <td class="cel">Descri&ccedil;&atilde;o</td>
 <td class="cel">Embalagem</td>
 <td class="cel">C&oacute;digo de Barras</td>
 <td class="cel">Categoria</td>
 <td class="cel">Data Cadastro</td>
 <td class="cel">Unidade</td>
 <td class="cel">Fornecedor</td>
 <td class="cel">Data Exclus&atilde;o</td>
 <td class="cel">Pre&ccedil;o de Compra</td>
 <td class="cel">Pre&ccedil;o de Venda</td>
 <td class="cel">Excluir</td>
</tr>
<c:forEach items="${listaProduto}" var="lista"> 
<tr>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.codProduto}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.descricao}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.embalagem}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.codigoBarra}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
//aqui mostra o código e não a descrição da categoria
<c:out value="${lista.categoria}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.dataCadastro}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
 <c:out value="${lista.unidade}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarCliente&codProduto=<c:out value="${lista.codProduto}"></c:out>">
//aqui mostra o código e não o nome do fornecedor
 <c:out value="${lista.fornecedor}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codCliente=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.dataExclusao}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.precoCompra}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=AlterarProduto&codProduto=<c:out value="${lista.codProduto}"></c:out>">
<c:out value="${lista.precoVenda}"></c:out></a></td>
 <td class="cel"><a href="ServletProduto?acao=ExcluirProduto&cod=<c:out value="${lista.codProduto}"></c:out>">X</a></td>
</tr>
</c:forEach>
</table>
 </div>
</form>
 </div>
 <div id="rodape">
 <p>Sistema JavaWeB desenvolvido por Walgnei Luiz Cardoso 2011. &copy; Todos os direitos reservados.</p>
 </div>
 </div>
</body>
</html>

A questão é que eu quero mostrar o nome e não o código da categoria e do fornecedor. Em PHP eu faço isso tranquilo mas em java eu não sei o modo de fazer e nem de chamar o método.

Obrigado pela atenção.