Ola Vanessa.
Realmente há uma grande diferença no ponto de vista do usuário entre as duas abordagens, e até mesmo sobre o correto fluxo da aplicação. Vou brevemente comentar sobre cada um.
No forward a servlet indica ao Container Web (Tomcat) qual caminho interno de uma página ele deve percorrer. Como é uma "conversa" entre a servlet e o servidor java, você pode indica-lo para um caminho de pagina que esteja dentro do WEB-INF, que será alcançado com sucesso. Após ler o arquivo com sucesso, o servidor faz 1 response ao navegador com aquele conteúdo.
Já no redirect a servlet indica um endereço externo, e ela cria uma response ao navegador com status http 302. O navegador ao receber esse retorno com esse status, automaticamente cria uma nova request para o endereço indicado, que após processar no servidor java, faz um segundo response com o conteúdo.
O fato de uma abordagem ter 1 requisição e a outra conter 2 requisições faz toda diferença. Veja:
Forward:
- Usuario cria uma requisição com os dados de um formulário, na barra de URL do navegador ficaria como "/aplicacao/cadastrar"
- A servlet dentro do WebContainer recebe a requisição e executa o código
- Ao fazer foward para uma página, há um direcionamento interno para a leitura de um JSP, com uma mensagem de sucesso
- O conteúdo do JSP é retornado e exibido. Nesse caso na barra de URL do navegador ainda ficaria como "/aplicacao/cadastrar" (pois do ponto de vista do navegador só teve aquela requisição)
Veja que nesse caso o usuário está vendo em tela uma mensagem de sucesso, mas a barra do navegador ainda esta apontando ao cadastrar. E mais: os dados tbm estão "cacheado" pelo navegador. Assim, caso o usuário der um F5, o navegador irá reenviar o cadastro com os mesmos dados.
Redirect:
- Usuario cria uma requisição com os dados de um formulário, na barra de URL do navegador ficaria como "/aplicacao/cadastrar"
- A servlet dentro do WebContainer recebe a requisição e executa o código
- Ao fazer redirect para um endereco como "/aplicacao/sucesso.jsp" (e nao um caminho de diretorio interno da JSP), há uma resposta de fato ao navegador com esse endereço e o status http 302. Esse codigo é inserido automatico pela servlet ao dar redirect.
- O navegador ao receber isso, automaticamente, modifica a barra de URL do navegador para o endereço pedido, ficando como "/aplicacao/sucesso.jsp"
- Há assim uma segunda requisição ao WebContainer, que lê a JSP e cria o retorno do conteúdo
- O conteúdo do JSP é retornado e exibido. Nesse caso na barra de URL do navegador ficaria a ultima requisição "/aplicacao/sucesso.jsp"
Veja que nesse caso ao usuario dar F5, ele vai estar sempre pedido a página de sucesso e não um cadastro novo. Essa é a forma mais segura de retornar um sucesso ao usuário.