Defina a mensagem de notificação como atributo de solicitação, que deve aparecer após o sendRedirect
Criei dois conjuntos de servlets: exibições e controladores / manipuladores
Visualizações: Execute leituras simples e encaminhe dados paraJSPsControladores: Execute atualizações ou inserções de banco de dados e envie uma notificação para umJSP ou um servlet do tipo ViewA notificação aqui é uma mensagem de status para o usuário. Exemplo: "Você atualizou blah com sucesso ..."
Se eu usarrequestDispatcher.forward()
nos controladores e o usuário atualiza (depois que o Controlador passou o controle para visualizar / jsp) a página confirmando reenviar, há uma chance de ações duplicadas serem executadas
Se eu usarresponse.sendRedirect()
Não consigo enviar notificações sem defini-las na sessão
Existe uma boa prática de design que ajude aqui? Qualquer bom link para o MVC para java sem estruturas que lida com esse cenário específico seria apreciado.
Não estou usando Spring ou Struts - apenas HTTPServlets antigos
Exemplo - Controlador:
public XServlet extends HttpServlet{
public void processRequest(request, response) throws ...{
//Do some stuff here
if(success){
setUserMessage("Hooray ur profile pic is uploaded!");
} else {
setUserMessage("Oh no! We couldn't upload that file its too biG!");
}
//Send the notification
request.setAttribute("status", getUserMessage());
request.getRequestDispatcher("editProfile.jsp").forward(request, response);
}
}
Isso significa que, se o usuário tentar atualizar a página, o controle passará novamente para esse controlador e algumas ações poderão ser repetidas desnecessariamente.
No entanto, se eu usarsendRedirect()
não posso mostrar a mensagem de status sem recorrer a um atributo de sessão ou anexá-lo ao URL.