Wo kommt getRequestDispatcher("Pfad") Aussehen?
Mit embedded tomcat, dieser code:
System.out.println("getServletPath: " + request.getServletPath());
System.out.println("getServletContext: " + request.getServletContext().getContextPath());
System.out.println("getServerName: " + request.getServerName());
System.out.println("getServerPort: " + request.getServerPort());
Druckt:
getServletPath: /example
getServletContext:
getServerName: localhost
getServerPort: 9090
Bedeutet das, dass:
request.getRequestDispatcher("/example/read.jsp").forward(request, response);
Wird der Blick auf diese URL zu forward(request, response)
die JSP:
http://localhost:9090/example/read.jsp
?
Gibt es eine Möglichkeit zu drucken, was absolute URL getRequestDispatcher("relativePath")
ist Adressierung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Servlet-Spezifikation erklärt dies
Diese Regeln sind die folgenden
Fragen Sie
Nein, es muss nicht das senden einer HTTP-Anfrage, damit der Weg hat nichts zu tun mit einem URI. Es ist eher eine innere Pfad, den Servlet-container wird versucht, eine übereinstimmung mit seinen verschiedenen url-mappings für Servlets.
Du auch Fragen,
Nicht. Und es ist nicht gerade eine absolute URL. Es ist ein Weg, können behandelt werden, indem eine Ressource in der web-Anwendung Kontext.
Nach der Bearbeitung, Sie
addWebapp
zu IhremTomcat
Instanz.Senden Sie eine Anfrage an
Gehe ich davon aus, dass
read.jsp
ist inIch glaube, dass es in den öffentlich zugänglichen Teil der web-Anwendung und damit der Servlet-container Rendern lassen und reagieren mit ihm.
Haben Sie auch Hinzugefügt eine webapp mit
addContext
scheint ähnlich zu seinaddWebapp
Hinzugefügt und servlet-mappings diese Kontext.
Ich war falsch über die
/example/*
nicht in der Lage zu handhaben/example
.Wenn Sie senden Sie eine Anfrage an
da der Kontext-Pfad", der
Context
oben verwendet werden und die Zuordnung wird mit demExampleController
registriert oben. IhreServlet
code wird ausgeführt und erreichenBeachten Sie die javadoc von
ServletRequest#getRequestDispatcher(String)
In anderen Worten, diese
Servlet
,ExampleController
registriert wurde, in derServletContext
zugeordnet, um die Kontext-Pfad""
, dh. root. Der Pfad/view2/example2/read.jsp
ist bezogen auf einen anderen Kontext. Da in diesem Kontext nicht eine Zuordnung für Sie, es antwortet mit einem 404.Können Sie einen Verweis zu einem anderen web-Anwendungen in einem anderen Kontext. Verwenden Sie
ServletContext#getContext(String)
. Zum BeispielNun, dass Sie die
ServletContext
können Sie eineRequestDispatcher
für eine Ressource in , dass Kontext.seit
ServletContext#getRequestDispatcher(String)
StaatenLetzte Antwort:
getRequestDispatcher("path")
Blick auf das Verzeichnis gesetzt, in deraddWebapp
Methode bei der Referenzierung einer JSP-Datei. Wenn Sie eine leere Seite oderNullPointerException
angezeigt wird stellen Sie sicher, dass Sie getan haben, die folgenden:addWebapp
Definitionen.addContext
dannaddWebApp
wie diese, so dass Sie beide aufROOT
:File base = new File("src/com/example/view");
context = tomcat.addContext("", base.getAbsolutePath());
tomcat.addWebapp(null, "/", base.getAbsolutePath());
request.getRequestDispatcher("/example/read.jsp").forward(request, response);
vorausgesetzt, dass das Verzeichnis /Beispiel existiert in"src/com/example/view"
./example
den kontextpfad der Anwendung?<wtv>/example
als URL?/example/*
, so eine Anfrage zu/example
behandelt werden würde durch das Servlet. So etwas wie/example/blabla
würde. Siehe Punkt 2 in meiner Antwort:This is done by stepping down the path tree a directory at a time, using the ’/’ character as a path separator.
addContext
und 3 andere mitaddWebapp
. Fügen Sie einfachnew File("src/com/example/view/example
alsbaseDir
für die ersteContext
. Denken Sie daran, dassaddWebapp
gibt eineContext
Objekt.read.jsp
imnew File("src/com/example/view");
?WEB-INF
Ordner und den Zugriff auf die Datei durch einen Pfad/WEB-INF/read.jsp
imgetRequestDispatcher
.addWebapp
? Und was passiert, wenn Sie zuerst tunaddContext
und dann die webapp?