J'essaye de finaliser un processus d'inscription pour ma webapp, mais je suis confondu avec le forwarding/redirections de servlet (encore). Le flux ressemble à ceci:Utilisation de forward()/redirect() pour un processus d'inscription?
// /signup/index.jsp
<form action='/user/signup'>
</form>
<%
if (request.getAttribute("msg") != null) {
%><div><%= request.getAttribute("msg") %><%
}
%>
// Servlet which maps to '/user/signup':
public void doPost(..) {
// process signup params..
// I want to show the user /signup/index.jsp again after completion:
req.setAttribute("msg", "signup worked!");
req.getRequestDispatcher("/signup/index.jsp").forward(req, resp);
}
lorsque j'utilise la méthode forward(), le navigateur affiche l'URL de l'action post encore:
/user/signup
mais le contenu est de:
/signup/index.jsp
c'est ce que forward() est censé faire. Je ne suis pas sûr si cela est déroutant à l'utilisateur si - l'URL est différente de la page qui a réellement généré le contenu.
je suis entré dans ce que Twitter ne, regarde comme ils sont foward() uant l'utilisateur autour de:
// twitter.com/signup
if (ok) {
forward("/find_sources/suggestions");
if (ok) {
forward("/find_sources/contacts");
if (ok) {
forward("/find_sources/anyone");
if (ok) {
forward("/");
}
}
}
else {
forward("/signup"); // error msg displayed here etc
}
Dans ce qui précède, si vous vous trompez sur la page d'inscription initiale, votre navigateur affiche le/compte/create url, mais le contenu de la page ressemble à/signup - donc je suppose qu'ils font la même chose que moi (je suppose que les options forward()/redirect() sous-jacentes sont les mêmes pour tous les serveurs http, pas spécifique à jsp).
Mon flux est-il normal alors? Devrais-je le faire d'une autre manière? Je suppose que les options sont:
- Utilisez forward() et acceptez que l'URL soit de l'URL d'action.
- Utilisez redirect() et stockez les messages que je veux montrer à l'utilisateur dans une session.
Merci