Mit sendRedirect innerhalb eines servlet weitergeleitet, mit der bitte dispatcher

Ich habe einen filter implementiert, mit der eine benutzerdefinierte Konvention zum laden von servlets und JSPs. In diesem übereinkommen verwende ich den folgenden code zum zählen der servlet:

servletContext
    .getRequestDispatcher( uriDispatcherLocator.getServletLocation( uri ) )
    .include( request, response );

und den folgenden code zum einbinden der JSP (in den gleichen filter):

servletContext
    .getRequestDispatcher( "/index.jsp" )
    .include( request, response );

Alles funktioniert einwandfrei, das servlet ausgeführt wird, dann enthält es die JSP und einige irrelevante benutzerdefinierte Regeln stattfinden.
Wie Sie sehen können, in dem Augenblick in dem ich eine servlet mit request dispatcher ich kann nicht senden Sie eine http-header-response an den client.
Das problem ist, dass ich will, dass die servlet-volle Kontrolle über die Antwort, als ob es genannt wurde, die aus dem inneren der filter (denn das filter wird nichts anderes tun, als dinamically mapping der servlets entsprechend Ihrer jeweiligen Klasse/JSP Lage in der Projekt-Datei-system).
Ich kann verwenden .forward() statt .include(), aber wenn ich tun ich werde nicht in der Lage sein, um eine JSP nachdem Sie das servlet ausgeführt wurde.

So, wie würde ich die Servlets führen Sie den code unten, wenn Sie einbezogen wird, durch einen filter per RequestDispatcher-Schnittstelle?

response.sendRedirect( "/somePath" );

Keine Javascript-hacks, ich bin bereit, senden Sie die korrekte HTTP-Antwort vom server, um den browser Verhalten sich korrekt.

--

BEARBEITEN:
In anderen Worten:

Möchte ich ändern Sie den Header an den client gesendet, von INNEN ein mitgeliefertes servlet mittels RequestDispatcher, aber die docs Staaten:

The included servlet cannot change the response status code or set headers; any attempt to make a change is ignored.
  • Sie kann nicht Rendern jsps, wenn Sie gehen, um zu senden eine Umleitung. Wahrscheinlich bin ich Missverständnis, was Sie zu erreichen versuchen.
  • Sie könnte eine exception werfen, in das servlet zu geben, den filter umleiten statt. Nicht die eleganteste Lösung, aber zumindest die decition umleiten könnte, bleiben Sie in der servlet...
  • Ich bin auch der servlet-content in die Antwort. Ich möchte das servlet, in der Lage sein, um die Bearbeitung der Kopf-und gehören die jsp mit dem filter.
  • Ich möchte nicht einfach umleiten. Manchmal sollte es erforderlich sein, um die Manipulation der Header irgendwie so I cant erstellen Sie eine Ausnahme geben für jedes Verhalten (obwohl es irgendwie ein wenig Sinn)
InformationsquelleAutor Fagner Brack | 2013-05-24
Schreibe einen Kommentar