2009-06-22 2 views
1

Ich versuche Servlets als Controller-Schicht und JSPs als Ansichtsschicht zu verwenden. Viele der Beispiele/Tutorials, die ich gelesen habe, deuten darauf hin, wie dies zu tun somehting:Servlets und JSP zusammen verwenden, was zu einer unerwarteten Schleife führt

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); 
} 

Dies funktioniert gut für das einfache Beispiel, aber wenn ich es Schritt nach oben (auch nur ein wenig):

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); 
} 

Soweit ich sagen kann, was passiert ist, dass, wenn ich zum Beispiel gehe http://localhost/main/example es trifft das Servlet, zu wo es zu alternate.jsp, dann führt es das Servlet erneut aber diesmal anstelle der pathInfo Equaling "Beispiel "Es entspricht" alternate.jsp ", also fällt es in den main.jsp-Versand.

Wie kann ich verschiedene JSP-Dateien mit einer ähnlichen Logik wie oben ausführen lassen?

nur für eine gute Maßnahme der Zuordnung in der web.xml ist:

<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 ... Ich denke, ich werde diese Frage massiv überarbeiten müssen, um die Antwort zu bekommen, die ich brauche. –

+0

Ok, nachdem ich das Problem etwas eingegrenzt habe und noch ein paar Tests gemacht habe, habe ich mir eine bessere Frage einfallen lassen. http://stackoverflow.com/questions/1030302/how-can-i-map-a-root-servlet-so-that-other-scripts-are-still-runnable –

Antwort

2

Merkwürdig ist, war auf der Suche ich das nur aus einem anderen Winkel. Siehe Abschnitt here, Abschnitt 7.3.2 Servlet-Matching-Verfahren für Informationen zur Reihenfolge der Übereinstimmungen.

Kurze Zusammenfassung: Pfadbasierte Zuordnungen trumpfen extensionsbasierte Zuordnungen ab, so dass Sie das JSP-Mapping entführen.

+0

Hat jemand irgendwelche Vorschläge für alternative Ansätze? –

Verwandte Themen