2010-11-23 10 views
0

Ich arbeite an einem JSP (test.jsp) in einer Web-App mit einem Servlet-Kontext von/Hallo. Ich tue das folgende:Request Attribute über c: Import Kontexte

<c:import url = "/other/altTest.jsp" context="/" /> 

Es scheint, dass Anforderung an test.jsp verfügbaren Attribute auf die importierte jsp nicht verfügbar sind, aus dem c: import (altTest.jsp), vermute ich aufgrund der Kontextparameter. Könnte jemand bitte den Grund dafür erklären und eine alternative Methode vorschlagen, wie man das JSP dorthin importiert, wo ich auf Anforderungsattribute zugreifen kann?

Antwort

3

Die c:import löst unter der Decke eine neue und unabhängige HTTP-Anfrage. Selbst wenn sich die Datei im selben Kontext befand, hatte sie keinen Zugriff auf dieselbe Anforderung, wie die übergeordnete JSP geöffnet wurde.

Ihre beste Wette besteht darin, die Informationen als Anforderungsparameter weiterzuleiten oder als Sitzungsattribut zu speichern und dann von der importierten JSP aus der Sitzung zu entfernen. Dies erfordert jedoch, dass die verschiedenen Kontexte die gleiche Sitzung teilen - dies ist konfigurierbar auf Servletcontainer-Ebene, in zum Beispiel Tomcat, setzen Sie das emptySessionPath Attribut auf true in context.xml.

Eine Alternative ist ein Servlet stattdessen zu verwenden, wobei Sie ServletContext#getContext() tun können, den anderen Servlet-Kontext zu erhalten (nur wenn crossContext Attribut true in context.xml gesetzt ist) und dann die RequestDispatcher erhalten und schließlich die forward() auf sie berufen. Dies ist mit JSP-Tags nicht möglich.