2010-10-02 8 views
2

J'ai un problème étrange ici, et je suis vraiment coincé, j'ai besoin de mal faire ce travail. J'ai donc une page dit index.jsp avec un lien dit "a href = servlet? Action = viewMenu". quand je clique sur ce lien, il va aller à doGet() sur mon servlet et voici le code dans mon servlet.L'URL n'affiche pas la bonne adresse après l'utilisation de la redirection de demande de servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
       String action = request.getParameter("action"); 
        if(action.equals("viewMenu")){ 
         address = "/viewAdminMenu.jsp"; 
        } 
       RequestDispatcher dispatcher = request.getRequestDispatcher(address); 
       dispatcher.forward(request,response); 
    } 

Ainsi, le code ci-dessus fonctionne très bien, mais après le transfert de la demande, mon navigateur affiche l'URL comme

localhost/projet/servlet? Action = ViewMenu. (Avec http: // au début)

Je ne veux pas l'URL ci-dessus comme je ne pouvais pas définir l'authentification de base avec tomcat, ce que je dois est

localhost/projet/viewAdminMenu.jsp (avec http: // au début)

J'ai essayé de trouver des informations à ce sujet mais je n'ai pas réussi à le comprendre.

Toute aide sera grandement appréciée.

Répondre

4

Si vous souhaitez que le navigateur accède à une URL différente, vous devez lui indiquer de rediriger plutôt que d'effectuer une redirection vers le serveur. Voir le sendRedirect() method of HttpServletResponse.

avant

  • une avant est réalisée en interne par le servlet
  • le navigateur est complètement ignorant qu'il a eu lieu, si son URL originale reste intacte
  • tout reload navigateur de la page résultante va simplement répéter la demande originale, avec l'URL d'origine

Rediriger

  • une redirection est un processus en deux étapes, où l'application Web indique au navigateur pour aller chercher une deuxième URL, qui diffère de la
  • un rechargement du navigateur d'origine de la deuxième URL ne répétera pas la demande initiale, mais plutôt chercher la deuxième URL
  • redirect est légèrement plus lent qu'un avant, car il nécessite deux requêtes du navigateur, pas un
  • objets placés dans le cadre de la demande initiale ne sont pas disponibles à la deuxième demande

(De Java Practices.)

+0

Je vois, merci beaucoup, je pense que je pouvais régler le problème d'ici. Merci – eds

+1

@eds si la réponse a fonctionné pour vous, marquez-le comme accepté – Bozho

+0

Btw, j'ai encore une question, sendRedirect ne semble pas fonctionner avec request.setAttribute. Y a-t-il du travail pour ça? – eds

Questions connexes