Criar um carrinho é simples.
Para começar é preciso entender os escopo web : aplicação , sessão, requisição e página.
Estes escopos são “variáveis globais” onde as coisas podem ser guardas e obtidas depois. Só que cada escopo tem uma vida util e no fim dessa vida tudo o que foi guardado é apagado.
O escopo de aplicação durante durante a aplicação toda , ou seja, enquanto o servidor está ligado. Aqui são guardadas coisas que pertencem ao sistema como um todo. Por exemplo, os usuários que estão logados.
O escopo de requisição só dura durante uma chamada do browser ao servidor. Só dura durante uma chamada.
O escopo de sessão dura durante uma “sessão de uso”. uma sessão de uso é um conceito artificial que o servidor cria. É útil agrupar várias chamadas ao servidor num conceito de “sessão”. Então o esocpo de sessão sura mais que uma requisição, mas menos que a aplicação e o servidor amarra a sessão ao browser que a chamou, ou seja, ao usuário (em traços largos).
O carrinho é um conceito que dura mais que uma requisição e é associado ao usuário, logo, ele tem que ficar guardado na sessão. O carrinho em si, pode ser uma abstração qualquer. Pode ser um List de alguma coisa ou um objeto da classe Carrinho. O ponto é que tem que estar guardado na sessão.
Em java servlets sempre ha como ter acesso à requisição (objeto request) e à resposta (objeto response). Do request é possível obter a sessão (getSession() e da sessão é possível obter a aplicação (getSevletContext()).
E é isto o básico. Quando a pessoa colocar o produto no carrinho, pegue o carrinho da sessão. Se não houver nenhum crie um vazio e coloque na sessão nesse momento. Depois é só repetir para cada produto que a pessoa colocar.
quando for para a tela de pedido, pegue o carrinho que está na sessão , liste os produtos, liste os preços , faças as contas do total. quando a pessoa efetivar a compra, gera a nota fiscal com as mesmas informações, impostos, etc…
O ponto é que a sessão tem uma vida util que expira ao fim de um tempo que o usuário não a usar. Normalmente meia hora. Portanto, se o usuário colocar um monte de coisa no carrinho e for embora, quando voltar depois, o carriho estará vazio. Existem tecnicas para perlongar a vida da sessão, mas isso envolve outros recursos além do web container. então, por agora, já que é uma coisa acadêmica, use a sessão sem se preocupar que ela expira.