2008-11-27 10 views
3

désolé mais je n'ai pas le code réel avec moi, mais je vais essayer d'expliquer:Servlet étant appelé deux fois!

J'ai un servlet mis en correspondance avec les éléments suivants:

/admin/* 

Alors, cela va à un servlet:

public class AdminController extends MainController { 
    public void doPost(HttpServletRequest request, HttpServletResponse response) { 
     // Do stuf here 
    } 
} 

Voici MainController:

public class MainController extends HttpServlet { 
@Override 
public void service(ServletRequest request, ServletResponse response) { 
    String requesturi = ((HttpServletRequest)request).getRequestURI(); 
    reqlist = Arrays.asList(requesturi.substring(requesturi.indexOf(Util.rootPath) + Util.rootPath.length()).split("/")); 
    reqlist = reqlist.subList(1, reqlist.size()); 

    doPost((HttpServletRequest)request, (HttpServletResponse)response); 
} 

Ainsi, la demande est passé à AdminController, pas de problème, mais ensuite j'ai reallized quelque chose:

Le servlet est appelé deux fois!. Et cela me cause beaucoup d'erreurs ..

Quelqu'un at-il une idée à ce sujet? C'est parce que j'ai utilisé une sorte d'héritage? Merci pour tout!

Répondre

8

La méthode HttpServlet.service est appelée pour tous les types de requêtes et ce que vous voyez est une requête HEAD, puis une requête GET ou POST. Au lieu d'implémenter le service, il suffit d'implémenter doGet ou doPost. Ce qui est communément fait est de simplement implémenter un de doPost ou doGet et ensuite appeler l'autre de celui pour lequel vous n'avez pas d'implémentation.

+0

Vous êtes le meilleur, merci à tous. –

+0

Salut, je suis confronté au même problème ... et j'ai implémenté la méthode doPost() seulement ... mais chaque fois que je fais face à ce problème, même mon site web a été hébergé .. J'ai créé un lien pour appeler cette servlet ... Aide – Pedantic

2

J'ai résolu le même problème de manière simple.

Si vous développez en local et accédez à votre application avec l'adresse http://127.0.0.1 qui est un réseau de bouclage, changez l'adresse en http://localhost qui est directe.

Ce problème ne se produira pas si vous l'exécutez réellement sur l'hébergement Web ou sur le serveur et y accédez à partir du réseau externe.

9

Bien que ce soit un vieux fil mais ma réponse peut aider quelqu'un. Aujourd'hui, j'ai fait face au même problème. Mon servlet particulier fonctionne bien plus tôt et soudainement il a commencé à appeler la méthode doGet deux fois. Lors de l'enquête, j'ai trouvé que mon navigateur chrome a extension de validateur html qui appelle le servlet à nouveau avec la même demande de validation html. Après avoir désactivé l'extension, le problème a été résolu.

+0

Après 3 heures de recherche à travers le code doFilter, le descripteur web, les filtres-mappings, cela a sauvé ma route en descente. Je t'aime. :) –

+0

Merci pour la réponse, l'extension GitLab m'a causé ça –

0

A eu le même problème, et j'ai essayé tout ce qui est mentionné ci-dessus et sur d'autres messages, mais le problème était seulement sur local.

Si rien ne fonctionne pour vous aussi, essayez un déploiement :)

Questions connexes