2016-04-13 36 views
1

Ich habe eine search.jsp Seite, die etwas HTML-Inhalt und ein Formular hat. Wenn das Formular übergeben wird, verarbeitet ein Servlet die Formulardaten und leitet die Ergebnisse an die search.jsp-Seite weiter. Allerdings wird die URL im Browser nach der Form der Verarbeitung zum Servlet Namen geändert:Wie ändere ich die URL nach dem Weiterleiten eines Servlets an die JSP-Seite?

http://localhost:8080/MyProject/SearchServlet

nicht die search.jsp Seite:

http://localhost:8080/MyProject/Search.jsp 

Wie ich die URL der Suche ändern .jsp? Mit anderen Worten, ich möchte nur die Seite search.jsp aktualisieren, um die Ergebnisse auf derselben Seite anzuzeigen. Wie kann ich das machen?

Antwort

1

Sie können das nicht tun, indem Sie die Anfrage weiterleiten: Sie müssen dem Browser sagen, dass er eine neue HTTP-Anfrage generieren soll, indem Sie die Methode response.sendRedirect() verwenden.

Jetzt ist die Frage, warum die URL-Leiste den Namen der Jsp anzeigen soll?

Das Verstecken des echten Zielpfads ist eine erwünschte Funktion beim Weiterleiten von Anfragen: Benutzer müssen die serverseitigen Weiterleitungen (so wird es auch genannt) in Ihrer Web-App nicht kennen. Denken Sie darüber nach: Um seine Aufgaben auszuführen, kann ein Servlet die Anfrage möglicherweise mehrere Male weiterleiten, bevor es zum endgültigen Zielort kommt: Sie möchten nicht, dass sich die URL-Leiste jedes Mal ändert.

Geben Sie Ihrem Servlet einen schickeren Namen wie "Suchen" anstatt "SearchServlet", damit die Benutzer wissen, dass sie sich auf der Suchseite Ihrer Webanwendung und nicht auf der Seite "SearchServlet" befinden.

Darüber hinaus, wenn Sie eine professionelle Website besuchen, werden Sie fast nie die Erweiterung .jsp oder .html oder .php in der Adressleiste sehen. Das ist zwar keine Anforderung oder Spezifikation, und Ihnen steht es frei, dies zu tun. Ich glaube jedoch, dass der erste Ansatz Best Practice ist (es sieht für mich sogar noch besser aus). Es gibt sogar einen Ordner WEB-INF, dessen Ziel es ist, Ihre .jsp-Seiten vor dem direkten Zugriff über die URL-Leiste zu verbergen.

Was ich gerne mache, ist ein Servlet als Landing-Welcome-Seite der Web-App, das für die Weiterleitung und Weiterleitung von Anfragen zuständig ist, basierend auf der Benutzereingabe und der inneren Arbeit der Anwendung.

Nun zurück zu Ihrer letzten Anfrage (pun intended)

„Mit anderen Worten, ich möchte nur die search.jsp Seite zu aktualisieren, um die Ergebnisse in der gleichen Seite angezeigt werden soll. Wie kann ich das tun?“

Was ich tun würde, ist:

  1. die Benutzer auf "Suchen" Servlet vom Servlet willkommen/home umleiten.

  2. In der DoGet-Methode des Such-Servlets würde ich die Anfrage an die search.jsp-Seite weiterleiten (Sie könnten Attribute vor der Weiterleitung einstellen, wenn Sie müssen).

  3. In der search.jsp würde ich das Action-Attribut des Formulars auf "Suchen" (der Name des Servlets) und die Methode auf POST setzen.

  4. In der DoPost-Methode des Such-Servlets würden Sie implementieren, welche Logik Sie implementieren möchten und schließlich die Anfrage an die Suche weiterleiten.jsp

Nach der Suchtaste schlagen (und auch nach dem Submit-Button geklickt wird), was der Benutzer in der Adressleiste sieht, ist einfach

http://localhost:8080/MyProject/Search 

Hoffnung, den Sinn macht.

0

Verwenden Sie dasselbe search.jsp für die Suche und das Ergebnis? Es ist möglich, den gleichen JSP zu verwenden, um beide Funktionen auszuführen, aber es ist einfacher und wünschenswert, einen anderen JSP zu erstellen, der nur die Ergebnisse zeigt.

Wenn Sie die Ergebnisse in search.jsp nicht sehen können, stellen Sie sicher, dass Sie die richtige Antwort in der Servlet-Klasse festlegen, bevor Sie sie an das jsp weiterleiten, und auch, ob Sie die von der Servlet-Klasse gesendete Antwort lesen richtig in der Jsp.

Wenn Sie wollen, die Seite überhaupt nicht zu aktualisieren, dann gehen Sie für AJAX.