2009-06-07 7 views
6

J'ai effectué un googled et googlé pendant des heures sur la façon de faire une redirection dans jsp ou des servlets. Cependant, lorsque j'essaie de l'appliquer, cela ne fonctionne pas.Impossible de rediriger avec response.sendRedirect

code que j'ai à l'intérieur page jsp:

<% 
    String articleId = request.getParameter("article_id").toString(); 
    if(!articleId.matches("^[0-9]+$")) 
    { 
     response.sendRedirect("index.jsp"); 
    } 
%> 

Je sais de débogage qui fonctionne regexp et si tout temps, articleId n'est pas le numéro, l'if va à l'intérieur, mais quand il atteint response.sendRedirect il doesn ne fait pas de redirection.

Est-ce que quelque chose me manque dans ce cas?

Merci d'avance.

Répondre

22

Vous devez return après redirigeant:

response.sendRedirect("index.jsp"); 
return; 
+1

C'est ce que c'était. L'ajout de retour est travaillé. Je vous remercie. – Dmitris

+5

Cela vaut la peine de considérer le "pourquoi" de cela. SendRedirect() ajoute un en-tête à la réponse HTTP, et c'est tout. Si vous continuez à écrire du contenu dans la réponse, le navigateur peut considérer que l'en-tête de redirection est superflue et l'ignorer. Il est toujours utile de considérer l'ordre dans lequel vous appelez des méthodes sur l'objet de réponse, il peut souvent conduire à des modes de défaillance impairs sans raison évidente. L'API Servlet est assez explicite pour décrire ces problèmes potentiels. – skaffman

+0

[J'ai aussi le même problème] (http://stackoverflow.com/q/9866964/1041341), j'ai essayé cette solution mais je ne suis pas allée là-bas, merci de nous aider –

1

Y a-t-il du contenu avant ce scriptlet? Si c'est le cas, la redirection ne fonctionnerait pas.

En outre, la pratique courante est d'avoir une telle logique à l'intérieur d'une servlet ou d'une autre classe servant de contrôleur, et de laisser la JSP gérer uniquement le rendu du code HTML. Cela peut aussi résoudre votre problème. Par exemple, voir here

+0

[J'ai aussi le même problème] (http://stackoverflow.com/q/9866964/1041341), j'ai essayé cette solution, mais ne pas woking là, s'il vous plaît aider –

Questions connexes