2 Stimmen

Java Seamframework - Restful URLs - Wie geht das?

Ich habe vor, ein Webprojekt zu starten, und ich habe nach der besten Option gesucht. Letztendlich habe ich mich für Java + Seam + J Boss AS + JPA Hibernate entschieden.

Aber was das URL-Rewriting angeht, war es ein langer Weg, ohne viele Erfolge.

Ich werde eine hierarchische Struktur haben, z. B. Kategorie -> Unterkategorie -> Unter-Unterkategorie.

Im Grunde möchte ich, dass diese wie foo.com/category/sub-category/sub-sub-category abgebildet werden

  • Was hilft mir, dies zu erreichen?
  • Welche anderen Möglichkeiten gibt es?
  • Wie flexibel ist die URL-Umschreibung?
  • Kann ich nicht-hierarchische Daten in meine Url einfügen? Bsp. .../Kategorie/Unterkategorie/Typ/Unter-Unterkategorie

Meine Fragen zur Flexibilität sind vor allem deshalb, weil RESTFUL ein Kernstück sein soll. Wenn das Umschreiben von URLs also nicht so flexibel ist, muss ich mein Design sorgfältig überdenken.

Herzliche Grüße.

0 Stimmen

Hatten Sie damit Erfolg?

2voto

Aaron Chambers Punkte 1346

Sie können das in Seam eingebaute URL-Rewriting verwenden, oder wenn Sie mehr Flexibilität bei den Rewrite-Regeln wünschen, können Sie den UrlRewriteFilter von http://tuckey.org/urlrewrite/ . Beispiele für beides unten:

Die in Seam eingebaute Umschreibung (der wahrscheinlich sowieso den Tuckey-Filter unter der Abdeckung verwendet)

Aktivieren Sie zunächst das Url-Rewriting in der komponenten.xml Datei

<web:rewrite-filter view-mapping="*.seam"/>

Als nächstes fügen Sie die Rewrite-Regeln zur seiten.xml Datei

<page view-id="/home.xhtml">
    <rewrite pattern="/home/{category}/{sub-category}/{sub-sub-category}" />
</page>

In diesem Fall diente eine eingehende Url als

/home/vehicles/cars/fords

Wird so zugestellt, als wäre es ein Ersuchen um

/home.seam?category=vehicles&sub-category=cars&sub-sub-category=fords

Auf die gleiche Weise werden ausgehende URLs konvertiert, wenn die Seite die genannten Request-Parameter zur Verfügung hat.

Oder Sie könnten den Tucky UrlRewriteFilter wie folgt verwenden

Fügen Sie das Tuckey UrlRewriteFilter jar zu Ihrem Projekt hinzu, das Sie hier herunterladen können

http://tuckey.org/urlrewrite/

Als nächstes fügen Sie den Filter Ihrer web.xml Datei

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

Fügen Sie schließlich eine Datei namens urlrewrite.xml in Ihr WEB-INF-Verzeichnis. In dieser Datei werden Ihre Rewrite-Regeln definiert. Wahrscheinlich sollten Sie mit Regex vertraut sein. Die Datei sollte wie folgt aussehen

^/home.seam?category=(. )&unter-kategorie=(. )&unter-unterkategorie=(.*)$ /home/$1/$2/$3

<rule match-type="wildcard">
   <from>/home\/$1\/$2\/$3</from>
   <to type="redirect">/home.seam?category=$1&sub-category=$2&sub-sub-category=$3</to>
</rule>

Die Naht-Doku ist hier - Dokumentation der Nähte

Tucky UrlRewriteFilter Doku ist hier - Tuckey RewriteFilter Doku

0 Stimmen

Sieht so aus, als ob der Markdown-Parser meine Regex-Ausdrücke nicht mag ;) In der Tat hat er einen ganzen Haufen Text herausgenommen. Ich füge ihn zu einem anderen Kommentar hinzu

0 Stimmen

Sollte nach "Die Datei sollte wie folgt aussehen" stehen: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" " tuckey.org/res/dtds/urlrewrite3.0.dtd "> <urlrewrite> <rule> <from>^/home.seam?category=(.*)&sub-category=(.*)&sub-sub-category=(.*)$</from> <to type="redirect">/home/$1/$2/$3</to> </rule> Sollte mit '<rule match-type...' fortfahren

1voto

Rich Seller Punkte 81404

Ich benutze Restlet um die Zuordnung von Ressourcen zu handhaben. Ich habe nicht versucht, es mit Seam, aber ich verstehe, sie passen gut zusammen.

Update: Jemand hat eine Beispielprojekt wie sie zu integrieren sind, und eine zugehörige Forumsbeitrag .

Le site Restlet 2.0 Tutorial beschreibt, wie URL-Umschreibungen und -Umleitungen zu handhaben sind.

1voto

aehlke Punkte 14161

Die URI-Konstruktion ist orthogonal zu REST. Siehe: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

1 Stimmen

In der Tat. Anstatt solche URIs "RESTful" zu nennen, könnte man sie "coole URIs" nennen (eine dumme Bezeichnung - aber eine etablierte, korrekte).

1voto

Wie sieht es mit anderen Optionen für das Umschreiben von URLs aus?

Hübsche Gesichter?

0voto

Diego Dias Punkte 20329

Ich verwende die gleichen Frameworks, die Sie zu verwenden planen (Java + Seam + J Boss AS + JPA Hibernate), und auch RestFul Webservices sind mein Kern.

Ich wähle resteasy als Rest-Frameworks und es funktioniert sehr gut und einfach (sowohl zum Umschreiben als auch zum Testen, genauso wie easymock). Auch ist es ein Jboss Produkt und funktioniert gut mit Seam, einfach zu integrieren.

Als Beispielcode:

@Path("/webservice")

public class Web
{

    @GET
    @Path("{web}")
    @ProduceMime("application/xml")
    public String test(@QueryParam("param") String param, @PathParam("web") String web) 
{
//  code here
}
}
  • @Path ist Ihr "Wurzelpfad" der Klasse (Ihr wirklicher "Wurzelpfad" würde auf components.xml )
  • @GET ist von Rest
  • ProduceMime ou ConsumeMime ist die Pantomime, die Sie konsumieren oder produzieren sollten
  • @QueryParam sind die Parameter der URL und @PathParam die Parameter, die Sie erhalten sollten

Dieser wird also einen Anruf erhalten von /webservice/web?param=lalala und geben eine Zeichenkette in der application/xml Format.

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