2009-06-22 7 views
1

J'essaie d'utiliser des servlets comme couche de contrôleur et des JSP comme couche de vue. Un grand nombre des exemples/tutoriels que j'ai lu suggère de faire somehting comme ceci:Utilisation simultanée de servlets et de JSP entraînant une boucle inattendue

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // add something for the JSP to work on 
    request.setAttribute("key", "value"); 

    // show JSP 
    request.getRequestDispatcher("main.jsp")forward(request, response); 
} 

Cela fonctionne très bien pour l'exemple simple, mais quand je fais un pas vers le haut (même un peu):

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // add something for the JSP to work on 
    request.setAttribute("key", "value"); 

    String pathInfo = request.getPathInfo(); 
    if ((pathInfo != null) && (pathInfo.length() > 1)) { 
     // get everything after the '/' 
     pathInfo = pathInfo.subSequence(1, pathInfo.length()).toString(); 

     if (pathInfo.equals("example")) { 
      request.getRequestDispatcher("alternate.jsp").forward(request, response); 
     } 
    } 

    // show JSP 
    request.getRequestDispatcher("main.jsp").forward(request, response); 
} 

Autant que je sache ce qui se passe est que si je vais à (par exemple) http://localhost/main/example il frappe la servlet, arriver à l'endroit où il distribue à alternate.jsp, puis il exécute à nouveau le servlet mais cette fois au lieu du pathInfo égalant "exemple "Cela équivaut à" alternate.jsp ", de sorte qu'il tombe dans la distribution main.jsp. Comment puis-je faire exécuter différents fichiers JSP avec une logique similaire à celle ci-dessus?

pour faire bonne mesure la mise en correspondance dans le web.xml est:

<servlet> 
    <servlet-name>Main</servlet-name> 
    <servlet-class>com.example.MainServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Main</servlet-name> 
    <url-pattern>/main/*</url-pattern> 
</servlet-mapping> 
+0

Eh ... Je pense que je vais devoir retravailler massivement cette question pour obtenir la réponse dont j'ai besoin. –

+0

Ok, après avoir réduit le problème et essayé d'autres tests, j'ai trouvé une meilleure question. http://stackoverflow.com/questions/1030302/how-can-i-map-a-root-servlet-so-that-other-scripts-are-still-runnable –

Répondre

2

Bizarrement, je cherchais juste à ce sous un autre angle. Voir here, section 7.3.2 Procédure de correspondance des servlets pour plus d'informations sur l'ordre des correspondances.

Récapitulatif: Les mappages basés sur les chemins sont basés sur les mappages basés sur l'extension, de sorte que vous détournez le mappage JSP.

+0

Est-ce que quelqu'un a des suggestions pour d'autres approches? –

Questions connexes