Como adicionar duas tabelas (produtos e serviços) em uma venda(carrinho de compras)

Olá Pessoal, estou fazendo um projeto que tem como funcionalidade principal a parte de vendas(carrinho de compras), minha dúvida é como colocar mais um arraylist na minha parte de venda, atualmente o sistema está vendendo somente produto, quero acrescentar agora serviço, mas estou tendo dificuldades em fazer essa implementação, estou utilizando o padrão mvc por isso vou disponibilizar o codigo-fonte separados por partes modelo, visão e controle, vou ignorar algumas partes para ser mais específico, e vou estar deixando alguns prints de como está o sistema atualmente.

Parte de Modelo - VendaDAO.java

package modelo;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class VendaDAO extends DataBaseDAO{
    public void registrar(Venda v) throws Exception{
        this.conectar();
        String sql = "INSERT INTO venda (id_funcionario,id_cliente,data_venda) VALUES(?,?,now())";
        PreparedStatement pstm = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
        pstm.setInt(1, v.getVendedor().getId());
        pstm.setInt(2, v.getCliente().getId());
        pstm.execute();
        ResultSet rs = pstm.getGeneratedKeys();
        if(rs.next()){
            v.setId(rs.getInt(1));
        }
        for(ItemProduto ip :v.getCarrinho()){
            String sql_item = "INSERT INTO item_produto (id_venda,id_produto,quantidade,valor) VALUES(?,?,?,?)";
            PreparedStatement pstm_item = conn.prepareStatement(sql_item);
            pstm_item.setInt(1, v.getId());
            pstm_item.setInt(2, ip.getProduto().getId());
            pstm_item.setInt(3, ip.getQuantidade());
            pstm_item.setDouble(4, ip.getValor());
            pstm_item.execute();
        }   
        this.desconectar();
    }
  
    public ArrayList<ItemProduto> itensProduto(int id) throws Exception{
        this.conectar();
        String sql = "SELECT * FROM item_produto WHERE id_venda=?";
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setInt(1, id);
        ResultSet rs = pstm.executeQuery();
        ArrayList<ItemProduto> lista = new ArrayList<ItemProduto>();
        while (rs.next()) {
            ItemProduto ip = new ItemProduto();
            ip.setId(rs.getInt("id"));
            ip.setQuantidade(rs.getInt("quantidade"));
            ip.setValor(rs.getDouble("valor"));
            ProdutoDAO pDAO = new ProdutoDAO();
            ip.setProduto(pDAO.carregarPorId(rs.getInt("id_produto")));
            lista.add(ip);
        }
        this.desconectar();
        return lista;
    }
    
    public ArrayList<ItemServico> itensServico(int id) throws Exception{
        this.conectar();
        String sql = "SELECT * FROM item_servico WHERE id_venda=?";
        PreparedStatement pstm = conn.prepareStatement(sql);
        pstm.setInt(1, id);
        ResultSet rs = pstm.executeQuery();
        ArrayList<ItemServico> lista = new ArrayList<ItemServico>();
        while (rs.next()) {
            ItemServico is = new ItemServico();
            is.setId(rs.getInt("id"));
            is.setQuantidade(rs.getInt("quantidade"));
            is.setValor(rs.getDouble("valor"));
            ServicoDAO sDAO = new ServicoDAO();
            is.setServico(sDAO.carregarPorId(rs.getInt("id_servico")));
            lista.add(is);
        }
        this.desconectar();
        return lista;
    }

Parte de Visão - form_compra.jsp

<%@page import="modelo.ItemProduto"%>
<%@page import="modelo.ClienteDAO"%>
<%@page import="modelo.Cliente"%>
<%@page import="modelo.Venda"%>
<%@page import="modelo.Produto"%>
<%@page import="java.util.ArrayList"%>
<%@page import="modelo.ProdutoDAO"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>compra</title>
    </head>
    <body>
        <%@include file="banner.jsp" %>
        <%
        Venda v = new Venda();
        Cliente c = new Cliente();
        try{
            String op = request.getParameter("op");
            if(op.equals("n")){
                int id = Integer.parseInt(request.getParameter("id"));
                ClienteDAO cDAO = new ClienteDAO();
                c = cDAO.carregarPorId(id);
                v.setCliente(c);
                v.setVendedor(uLogado);
                v.setCarrinho(new ArrayList<ItemProduto>());
                session.setAttribute("venda", v);
            }else{
                v = (Venda) session.getAttribute("venda");
            }
        }catch(Exception e){
            out.print("Erro:"+e);
        }
        
        %>
        <br/><br/>Vendedor:<%=v.getVendedor().getNome() %><br/>
        Cliente:<%=v.getCliente().getNome() %><br/>
        <h4>Catalogo: (<%=v.getCarrinho().size() %> itens no carrinho)</h4>
            <%
            ProdutoDAO pDAO = new ProdutoDAO();
            ArrayList<Produto> lista = new ArrayList<Produto>();
            try{
                lista = pDAO.listar();
            }catch(Exception e){
                out.print("Erro:"+e);
            }
            
            for(Produto p:lista){
            %>
            <div id="prod<%=p.getId() %>">
                <form method="get" action="gerenciar_carrinho.do">
                    <input type="hidden" name="id_produto" value="<%=p.getId() %>"/>
                    <input type="hidden" name="op" value="add"/>
                    
                    <%=p.getNome() %><br/>
                    <input type="number" value="1" name="quantidade" style="width: 40px;"/>
                    <input type="submit" value="ADD"/>
                </form>
            </div>
            <%
            }
            %>
        <br/>
        <a href="listar_cliente.jsp"><button>Cancelar</button></a> <a href="form_finalizar_compra.jsp"><button>Finalizar Compra</button></a>
    </body>
</html>

Parte de Visão - form_finalizar_compra.jsp

<%@page import="modelo.ItemProduto"%>
<%@page import="modelo.ClienteDAO"%>
<%@page import="modelo.Cliente"%>
<%@page import="modelo.Venda"%>
<%@page import="modelo.Produto"%>
<%@page import="java.util.ArrayList"%>
<%@page import="modelo.ProdutoDAO"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script type="text/javascript">
            function excluir(index,item){
                if(confirm("Tem certeza que quer excluir o item: "+item+"?")){
                    window.open("gerenciar_carrinho.do?op=del&index="+index,"_self");
                }
            }
        </script>
        
        <title>Finalizar Compra</title>
    </head>
    <body>
        <%@include file="banner.jsp" %>
        <h2>Finalizar Compra</h2>
        <%
        Venda v = new Venda();
        Cliente c = new Cliente();
        try{
            v = (Venda) session.getAttribute("venda");
        }catch(Exception e){
            out.print("Erro:"+e);
        }
        
        %>
        <br/><br/>Vendedor:<%=v.getVendedor().getNome() %><br/>
        Cliente:<%=v.getCliente().getNome() %><br/>
        <table border="1">
            <tr>
                <td>ITEM</td>
                <td>PRODUTO</td>
                <td>QTD</td>
                <td>VALOR</td>
                <td>TOTAL</td>
                <td>REMOVER</td>
            </tr>
            <%
            double total = 0;
            int cont=0;
            for(ItemProduto ip:v.getCarrinho()){
            %>
            <tr>
                <td align="center"><%=cont+1 %></td>
                <td><%=ip.getProduto().getNome() %></td>
                <td><%=ip.getQuantidade() %></td>
                <td>R$ <%=ip.getValor() %></td>
                <td>R$ <%=ip.getQuantidade()*ip.getValor() %></td>
                <td align="center">
                    <a href="#" onclick="excluir(<%=cont %>,<%=cont+1 %>);"><img src="imagens/excluir.png"/></a> 
                </td>
            </tr>
            <%
                total = total + (ip.getQuantidade()*ip.getValor());
                cont++;
            }
            %>
        </table>
        <div> Valor Total =================> R$ <%=total %> </div>
        <br/>
        <a href="listar_cliente.jsp"><button>Cancelar</button></a> <a href="form_compra.jsp?op=c"><button>Continuar Comprando</button></a> <a href="finalizar_compra.do"><button>Confirmar Compra</button></a>
    </body>
</html>

Parte de Controle - GerenciarCarrinho.java

package controle;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import modelo.ItemProduto;
import modelo.ItemServico;
import modelo.Produto;
import modelo.ProdutoDAO;
import modelo.Venda;

public class GerenciarCarrinho extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet GerenciarCarrinho</title>");            
            out.println("</head>");
            out.println("<body>");
            HttpSession session = request.getSession();
            try {
                
                Venda v = (Venda) session.getAttribute("venda");
                
                ArrayList<ItemProduto>  carrinho = v.getCarrinho();
               
                
                String op = request.getParameter("op");
                if(op.equals("add")){
                    Produto p = new Produto();
                    ProdutoDAO pDAO = new ProdutoDAO();
                    int id = Integer.parseInt(request.getParameter("id_produto"));
                    p = pDAO.carregarPorId(id);
                    int quantidade = Integer.parseInt(request.getParameter("quantidade"));
                    
                    ItemProduto item = new ItemProduto();
                    item.setProduto(p);
                    item.setQuantidade(quantidade);
                    item.setValor(p.getValor());
                    carrinho.add(item);
                    v.setCarrinho(carrinho);
                    session.setAttribute("venda", v);
                    response.sendRedirect("form_compra.jsp?op=c");
                } else if(op.equals("del")){
                    int index = Integer.parseInt(request.getParameter("index"));
                    carrinho.remove(index);
                    v.setCarrinho(carrinho);
                    session.setAttribute("venda", v);
                    response.sendRedirect("form_finalizar_compra.jsp");
                }
            } catch (Exception e) {
                out.print("Erro:"+e);
            }
            
            out.println("</body>");
            out.println("</html>");
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

Prints:

Resumindo: quero acrecentar uma tabela com os serviços ao lado da tabela de produtos e poder adicionar tudo em uma mesma compra, é isto