Java Web - Problema em preencher os dados do formulário

Olá, pessoal!
Estou desenvolvendo um sistema web de cadastro de livros, porém, estou encontrando dificuldades na hora de editar um livro e carregar suas informações no formulário.
Consegui implementar corretamente a função de Cadastrar, Listar e Excluir. Mas para Alterar os dados não estou tendo sucesso.
Se alguém puder dar uma ajuda, seguem abaixo as classes:

LivroController.java

import com.br.livros.modelo.Livro;
import java.sql.SQLException;
import java.util.ArrayList;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class LivroController {
    
    LivroCRUD livroCRUD = new LivroCRUD();
    
    //Esta ação abre o formulário de cadastro (cadastro.jsp) e,
    //após o usuário clicar no botão "Salvar", os dados são gravados no banco de dados.
    //Em seguida, a página cadastro-salvar.jsp é chamada para mostrar que os dados foram salvos com sucesso.
    @RequestMapping ("/cadastro")
    public String cadastro() {

        return "cadastro";
    }
    
    //Esta ação abre a página cadastro-salvar.jsp e serve para mostrar que 
    //os dados foram salvos com sucesso.
    //Além disso, nessa página é possível ir para a página inicial (index.jsp) ou
    //para a lista de livros (lista.jsp).
    @RequestMapping ("/cadastro-salvar")
    public String salvar (@RequestParam ("titulo") String titulo, 
            @RequestParam ("ano") int ano, 
            @RequestParam ("estado") String estado,
            @RequestParam ("disponivel") String disponivel, 
            @RequestParam ("status")String status) {        
        
        Livro novoLivro = new Livro();
        
        novoLivro.setTitulo(titulo);
        novoLivro.setAnolancamento(ano);
        novoLivro.setEstadoconservacao(estado);
        novoLivro.setDisponivel(disponivel);
        novoLivro.setStatus(status);

        livroCRUD.cadastrar(novoLivro);

        return "cadastro-salvar";
    }
    
     //Link excluir livro
    @RequestMapping("removerLivro")
    public String excluir(Livro livro) {
        
        livroCRUD.excluir(livro);
      
      return "redirect:lista";
    }    
    
    //Encaminha para a tela de edição de livro
    @RequestMapping("mostrarLivro")
    public String mostrar(int id, Model model) throws SQLException {      
      model.addAttribute("listaLivros", livroCRUD.buscarLivroPorId(id));
      return "mostrarLivro";
    }    
    
    //Realiza a alteração no livro (update no banco de dados)
    @RequestMapping("alterarLivro")
    public String alterar(Livro livro) {      
      livroCRUD.alterar(livro);
      return "redirect:lista";
    }
    
    //Esta ação abre a página lista.jsp e exibe todos os registros do banco de dados.
    //Além disso, é possível retornar para a página inicial (index.jsp).
    @RequestMapping ("/lista")
    public String listar(Model model) {

        ArrayList<Livro> livrosCadastrados = livroCRUD.listaTodos();

        model.addAttribute("listaLivros", livrosCadastrados);

        return "listar";
    }
    
    //Esta ação abre a página index.jsp.
    //A partir desta página é possível ir para o formulário de cadastro (cadastro.jsp) ou para
    //a lista de livros (livros.jsp).
    @RequestMapping ("/index")
    public String index () {
    
        return "index";
    }    
}

LivroCRUD.java


import java.awt.HeadlessException;
import com.br.livros.modelo.Livro;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;

public class LivroCRUD {

    ConexaoBD conexaobd = new ConexaoBD();
    Livro livros = new Livro();

    //Método que insere os dados digitados no formulário no Banco de dados.
    public void cadastrar (Livro livro) {

        String sql = "insert into livros (titulo, anolancamento, estadoconservacao, disponivel, status) values (?, ?, ?, ?, ?)";

        try {

            PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);

            ps.setString(1, livro.getTitulo());
            ps.setInt(2, livro.getAnolancamento());
            ps.setString(3, livro.getEstadoconservacao());
            ps.setString(4, livro.getDisponivel());
            ps.setString(5, livro.getStatus());
            ps.execute();
            
        } catch (HeadlessException | SQLException ex) {
            
        }
    }

    //Método que insere os dados digitados no formulário no Banco de dados.
    public void alterar (Livro livro) {

        String sql = "update livros set titulo = ?, anolancamento = ?, estadoconservacao = ?, disponivel = ?, status = ? where id = ?";

        try {

            PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);

            ps.setString(1, livro.getTitulo());
            ps.setInt(2, livro.getAnolancamento());
            ps.setString(3, livro.getEstadoconservacao());
            ps.setString(4, livro.getDisponivel());
            ps.setString(5, livro.getStatus());
            ps.setInt(6, livro.getId());
            ps.execute();
            
        } catch (HeadlessException | SQLException ex) {
            
        }
    }
    
    //Método que exclui o livro do Banco de dados.
    public void excluir(Livro livro) {

        String sql = "update livros set status = 'I' where id = ?";

        try {

            PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);

            ps.setInt(1, livro.getId());
            ps.execute();
            
        } catch (HeadlessException | SQLException ex) {
            
        }
    }
    
    //Método que lista os registros do banco de dados.
    public ArrayList<Livro> listaTodos() {
        
        String sql = "select * from livros where status = 'A'";

        ArrayList<Livro> dados = new ArrayList<>();

        conexaobd.abrirConexao();

        conexaobd.executaSql(sql);

        try {
            conexaobd.rs.first();

            do {
                //Prenchendo as linhas da tabela.
                Livro lv = new Livro();
                
                lv.setId(conexaobd.rs.getInt("id"));
                lv.setTitulo(conexaobd.rs.getString("titulo"));
                lv.setAnolancamento(conexaobd.rs.getInt("anolancamento"));
                lv.setEstadoconservacao(conexaobd.rs.getString("estadoconservacao"));
                lv.setDisponivel(conexaobd.rs.getString("disponivel"));
                lv.setStatus(conexaobd.rs.getString("status"));
                
                dados.add(lv);
                
            } while (conexaobd.rs.next());

        } catch (SQLException ex) {
            
        }
        
        return dados;
    }
    
    public Livro buscarLivroPorId(int id) throws SQLException{
        
        String sql = "select * from livros where id = ?";
        
        Livro livro = new Livro();

        try {

            PreparedStatement ps = conexaobd.abrirConexao().prepareStatement(sql);

            ps.setInt(1, livro.getId());
            
            ResultSet rs = ps.executeQuery();
            
            while (rs.next()) {               
                livro.setId(rs.getInt("id"));
        	livro.setTitulo(rs.getString("titulo"));
                livro.setAnolancamento(rs.getInt("anolancamento"));
                livro.setEstadoconservacao(rs.getString("estadoconservacao"));
                livro.setDisponivel(rs.getString("disponivel"));
                livro.setStatus(rs.getString("status"));
            }
            
        } catch (HeadlessException | SQLException ex) {
            
        }
        
        return livro;
    }

    private static class PrepareStatement {

        public PrepareStatement() {
        }

        private ResultSet executeQuery() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        private void close() {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    }
}

Listar.jsp

<%-- 
    Document   : livros
--%>

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Livros Web - Lista de Livros</title>
    </head>
    <body>
        <font face="Calibri">
        <h1 align="center">Lista de Livros</h1>
        <c:if test="${listaLivros.size() == 0}">
            <div align="center">N&atildeo existem registros a serem exibidos.</div>
        </c:if>
        <c:if test="${listaLivros.size() > 0}">
                <table border="1" align="center">
                    <th bgcolor="B0 C4 DE">T&iacutetulo</th>
                    <th bgcolor="B0 C4 DE">Ano do Lan&ccedilamento</th>
                    <th bgcolor="B0 C4 DE">Estado de Conserva&ccedil&atildeo</th>
                    <th bgcolor="B0 C4 DE">Dispon&iacutevel</th>
                    <th bgcolor="B0 C4 DE" colspan="2">A&ccedil;&atilde;o</th>

                <c:forEach items="${listaLivros}" var="livro">
                    <tr align="center" bgcolor="B0 E0 E6">
                        <td>${livro.titulo}</td>
                        <td>${livro.anolancamento}</td>
                        <td>${livro.estadoconservacao}</td>
                        <td>${livro.disponivel}</td>
                        <td><a href="mostrarLivro?id=${livro.id}&titulo=${livro.titulo}&anolancamento=${livro.anolancamento}&estadoconservacao=${livro.estadoconservacao}&disponivel=${livro.disponivel}&status=${livro.status}">Alterar</a></td>
                        <td><a href="removerLivro?id=${livro.id}">Remover</a></td>
                    </tr>                
                </c:forEach>
            </c:if>
        </table> <br> <br>
        <div align="center">
            <a href="index">P&aacutegina Inicial</a>
        </div>
        </font>

    </body>
</html>

MostrarLivro.jsp (PROBLEMA: ESSA PÁGINA NÃO CARREGA AS INFORMAÇÕES DOS LIVROS)

<%-- 
    Document   : mostrarLivro
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Livros Web - Cadastro de Livros</title>
    </head>
    <body>
        <font face="Calibri">
            <h1 align="center">Alterar Livros</h1>
            <form action="alterarLivro" method="post">
                <input type="hidden" name="id" value="${listaLivros.id}" />
                <table border="1" align="center">
                    <tr bgcolor="B0 E0 E6">
                        <td>
                            <br>
                            <b>T&iacutetulo:</b> <br>
                            <input type="text" id="titulo" name="titulo" size="50" maxlength="100" value="${listaLivros.titulo}"> <br> <br>
                            <b>Ano de Lan&ccedilamento:</b> <br>
                            <input id="anolancamento" type="number" name="ano" min="1700" max="2050" size="50" maxlength="100" value="${listaLivros.anolancamento}"> <br> <br>
                            <b>Estado de Conserva&ccedil&atildeo:</b> <br>
                            <select id="estadoconservacao" name="estado" value="${listaLivros.estadoconservacao}">
                                <option value="Danificado">Danificado</option>
                                <option value="Regular">Regular</option>
                                <option value="Bom">Bom</option>
                                <option value="Excelente">Excelente</option>
                            </select> <br> <br>
                            <b>Dispon&iacutevel?</b>
                            <input id="disponivel" type="radio" name="disponivel" value="${listaLivros.disponivel}"> Sim    
                            <input id="disponivel" type="radio" name="disponivel" value="${listaLivros.disponivel}"> N&atildeo <br> <br>
                            <input id="status" type="hidden" name="status" value="A">
                        </td>
                    </tr>
                </table> <br> <br>
                <div align="center">
                    <button align="center">Salvar</button> <br> <br>
                    <a href="index">P&aacutegina Inicial</a>
                </div>
            </form>
            <a href="index" align="center" value="< Voltar"></a>
        </font>
    </body>
</html>

Se tiver faltando mais informações, me avisem.