2010-09-08 4 views
0

J'ai écrit une page appelée login.jsp (tomcat6) qui a un formulaire de connexion (nom d'utilisateur, mot de passe, etc.).Comment empêcher la concaténation d'URL en double après la redirection?

J'ai mappé l'action de formulaire et le servlet de sorte que la soumission de formulaire entraîne l'appel du servlet de connexion.

1. login.jsp a une forme qui appelle la servlet.

<form name="login_form" action="servlet/login" method="POST"> 

2. mappage de servlet dans le descripteur de déploiement (web.xml)

<servlet> 
     <servlet-name>ServletLogin</servlet-name> 
     <servlet-class>com.masatosan.loginservlet.LoginServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
     <servlet-name>ServletLogin</servlet-name> 
     <url-pattern>/servlet/login</url-pattern> 
</servlet-mapping> 

Ainsi, à partir de la page jsp, lorsqu'un utilisateur clique sur le bouton de connexion, le servlet (LoginServlet.class) prend en charge l'activité de connexion.

Lorsque la connexion échoue à partir d'un mot de passe non concordant, la servlet redirige l'utilisateur vers la page de connexion.

extrait de code de LoginServlet.class

String address = "home.jsp" 
if(hasError) { 
    address = "register.jsp" 
} 
RequestDispatcher dispatcher = request.getRequestDispatcher(address); 
dispatcher.forward(request, response); 

Problème:

Il fonctionne très bien pour la première demande.

  1. Fournissez des informations d'identification non valides (nom d'utilisateur ou mot de passe incorrect) au formulaire de connexion.

  2. drapeau hasError est défini sur true et me redirige vers la page de connexion (avec l'URL changé de localhost: 8080/login.jsp à localhost: 8080/servlet/login)

Je suis heureux jusqu'à présent, mais pas après ce qui suit.

  1. Fournissez à nouveau des informations d'identification non valides pour le formulaire de connexion.

Résultat:

Maintenant, je reçois HTTP 404 et URL est: localhost: 8080/servlet/servlet/login (avec "servlet" extra)

La solution I » Je cherche est de rediriger vers la page de connexion d'origine lorsque je redirige un utilisateur en raison de l'échec de connexion. Est-il possible de rediriger vers login.jsp OU ne pas avoir de texte "servlet" supplémentaire dans l'URL qui provoque le 404? NOTE: Le didacticiel en ligne que j'ai lu mentionne ne pas inclure "servlet" dans le mappage d'URL comme je l'ai fait <url-pattern>/servlet/login</url-pattern> mais l'hôte jsp que je suis oblige de le faire (directive mount) en raison de la nécessité de distinguer php et autres. :(

MISE À JOUR:

J'ai trouvé sur le net, ne sont pas encore testé mais mettra à jour ...

response.sendRedirect(LOGIN_PAGE); 

Solution

L'approche sendRedirect était pas ce que je voulais. J'avais besoin de transmettre une demande/réponse via dispatcher mais sendRedirect ne prend qu'une réponse en argument.

L'astuce à la question originale était d'utiliser le chemin absolu dans la forme comme suggéré. Mon solution qui a travaillé est:

(login.jsp) 
<% 
String path = request.getContextPath(); 
%> 

<form name="login_form" action="<%= path %>/servlet/login" method="POST"> 

Répondre

1

Vous devez utiliser le chemin absolu ServletLogin dans votre définition de formulaire dans login.jsp:

<form name="login_form" action="/servlet/login" method="POST"> 
+0

Merci pour le conseil! –

Questions connexes