4 Stimmen

Dynamische URLs in Java-Webanwendungen (wie in Rails)

Ich bin ein Ruby on Rails Entwickler, der eine Webanwendung in Java programmiert. Ich versuche etwas Ähnliches zu erreichen wie in Rails. In Rails ist es möglich, einen Link mit localhost:8000\Users\1 aufzurufen, wenn Users ein Modell ist und 1 die ID eines bestimmten Benutzers ist. Ich würde gerne etwas Ähnliches in Java bekommen.

Ich arbeite in einem MVC-Design, bei dem meine JSP-Seiten die Ansicht und meine Servlets die Controller sind. Ich habe ein Servlet namens Users erstellt, das die Seite users.jsp rendern soll; jetzt kann ich zu dieser Seite über die URL localhost:8000\projectName\Users gelangen. Ich würde gerne localhost:8000\projectName\Users\1 zur Seite user.jsp routen, während das entsprechende Servlet dafür sorgt, dass der richtige Benutzer (mit der ID=1) auf die Seite gelangt.

Haben Sie eine Idee, wie ich das erreichen kann?

Ich mache das in einem Universitätsprojekt und darf keine Frameworks verwenden. Außerdem würde ich lieber etwas codieren, anstatt etwas zu installieren.

9voto

BalusC Punkte 1034465

Jetzt kann ich über die URL localhost:8000\Projektname\Benutzer auf diese Seite gelangen, ich möchte localhost:8000\Projektname\Benutzer\1 auf die Seite user.jsp umleiten, während das entsprechende Servlet den richtigen Benutzer (mit der ID=1) in die Seite einfügt.

Einfach. Weisen Sie dem Servlet ein URL-Muster von /Benutzer/* zu, anstatt von /Benutzer. Sie können dann die Pfadinformationen (den Teil nach /Benutzer in der URL, also in Ihrem Beispiel /1) wie folgt abrufen:

String pathInfo = request.getPathInfo();
// ...

Sie können einfach auf die übliche Weise zu benutzer.jsp weiterleiten.

Long id = Long.valueOf(pathInfo.substring(1));
Benutzer benutzer = benutzerService.find(id);
request.setAttribute("benutzer", benutzer);
request.getRequestDispatcher("/WEB-INF/benutzer.jsp").forward(request, response);

0 Stimmen

Ok... fast geschafft. Ich erhalte null von request.getPathInfo() ist das ein Fehler oder mache ich etwas falsch.

0 Stimmen

Das wird passieren, wenn keine Pathinfo vorhanden ist. Es scheint, dass Sie die Zuordnung von /Users zu /Users/* nicht geändert haben oder eine hängende/zweite Zuordnung zu /Users haben. Beheben Sie es entsprechend. Wie in meiner Antwort angegeben, sollten Sie /Users/* anstelle von /Users verwenden (und daher nicht beide haben, wie fälschlicherweise in der Antwort von jemand anderem hier vorgeschlagen). Eine weitere mögliche Ursache ist, dass Sie anstelle eines Servlets einen Filter verwendet haben, aber das ist ein zu offensichtlicher Fehler.

3voto

powerMicha Punkte 2683

Ich würde das über ein Servlet und Servlet-Mappings wie folgt in web.xml versuchen

    UserServlet
    com.example.UserServlet

    UserServlet
    /Users

    UserServlet
    /Users/*

Dann versuchen Sie in Ihrem UserServlet, die vollständige URL zu erhalten und diese nach Ihren Bedürfnissen zu analysieren. Beispiel:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {

   String url = reg.getRequestURL();

   //... letzten Teil nach dem Schrägstrich erhalten und ihn auf Ihre ID analysieren

}

Siehe http://download.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServletRequest.html für weitere Dokumentation über die Anfrage und wie ihre Parameter abgerufen werden können

1voto

Jacob Punkte 40193

UrlRewriteFilter ist wie mod_rewrite, aber für Tomcat. Sie können es verwenden, um Ihre URLs suchmaschinenoptimiert zu gestalten. Sie können auch Apache+mod_rewrite+Tomcat verwenden.

0 Stimmen

Du musst die Dateien einfach nur in WEB-INF kopieren, das ist kaum eine Installation. ;) Viel Glück mit dieser Anforderung.

0 Stimmen

Anleitung zur Konfiguration.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X