2009-07-20 3 views
2

Je prévois de démarrer un projet web, et j'ai cherché la meilleure option. En fin de compte, je choisis de rester avec Java + Seam + J Boss AS + JPA Hibernate. Mais en ce qui concerne la réécriture d'URL, cela a été un long processus, sans beaucoup de succès.Java Seamframework - URL de repos - Comment?

Je vais avoir une structure hiérarchique, Ex. Catégorie -> Sous-catégorie -> Sous-sous-catégorie.

Fondamentalement, je veux que ces à la carte comme foo.com/category/sub-category/sub-sub-category

  • Ce qui me permet d'atteindre ce?
  • Quelles sont les autres possibilités?
  • Quelle est la flexibilité de la réécriture d'URL?
  • Puis-je ajouter des données non hiérarchiques dans mon URL? Ex .. .../catégorie/sous-catégorie/type/sous-sous-catégorie

Mes questions concernant la flexibilité sont principalement parce que, RESTFUL est censé être noyau. Donc, si la réécriture d'URL n'est pas si flexible, je vais devoir réfléchir soigneusement à mon design.

Cordialement.

+0

Avez-vous eu de la chance avec ça? –

Répondre

1

J'utilise Restlet pour gérer le mappage des ressources. Je ne l'ai pas essayé avec Seam, mais je comprends qu'ils vont bien ensemble.

Mise à jour: Quelqu'un a créé un example project montrant comment les intégrer et un forum post associé.

Le Restlet 2.0 Tutorial décrit comment gérer la réécriture et la redirection d'URL.

1

Qu'en est-il des autres options de réécriture d'url?

Joliesfaces?

+0

http://ocpsoft.com/prettyfaces/ – Lincoln

2

Vous pouvez utiliser la réécriture d'URL intégrée de Seam, ou si vous souhaitez plus de flexibilité dans les règles de réécriture, vous pouvez utiliser UrlRewriteFilter de http://tuckey.org/urlrewrite/. Des exemples de deux ci-dessous:

Seam de intégré réécriture (qui prob utilise le filtre Tuckey sous les couvertures de toute façon)

d'abord activer la réécriture d'url dans le components.xml fichier

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

Ensuite, ajoutez les règles de réécriture aux pages .xml fichier

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

Dans ce cas, une URL entrante a été

/home/vehicles/cars/fords 

Sera servi comme si elle était une demande de

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

De la même façon, url sortants de sera converti si la page a les paramètres de requête nommés disponibles.

Ou vous pouvez utiliser le Tucky UrlRewriteFilter comme suit

Ajouter le pot Tuckey UrlRewriteFilter à votre projet que vous pouvez saisir d'ici

http://tuckey.org/urlrewrite/

Ensuite, ajoutez le filtre de votre votre web .xml fichier

<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> 

Enfin, ajoutez un fichier appelé urlrewrite.xml à votre répertoire WEB-INF. Ce fichier va définir vos règles de réécriture. Vous voudrez probablement être un peu familier avec regex. Le fichier doit se présente comme suit

^/home.seam? Category = (. ) & sous-catégorie = (.) & sous-sous-catégorie = (. *) $ /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> 

i Seam doco s ici - Seam documentation

Tucky UrlRewriteFilter Doco est ici - Tuckey RewriteFilter doco

+0

On dirait que l'analyseur de démarques n'aime pas mes expressions regex;) Enfait, il a dépouillé tout un tas de texte. Je vais l'ajouter à un autre commentaire –

+0

Devrait être après 'Le fichier devrait ressembler à': ^/home.seam? category = (. *) et sous-catégorie = (. *) et sous-sous-catégorie = (. *) $ /home/1 $/$ 2/3 $ devrait se poursuivre avec « < r ule type de match ... ' –

0

J'utilise les mêmes cadres que vous envisagez d'utiliser (Java + Seam + J BOSS + JPA Hibernate), et aussi webservices RESTful sont mon coeur .

Je choisis resteasy comme les cadres restants et cela fonctionne juste bien et facile (à la fois pour réécrire et pour tester, même que easymock). Aussi c'est un produit de jboss et fonctionne bien avec la couture, facile à intégrer.

En exemple de code:

@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 est votre "chemin racine" de la classe (votre vrai "root" serait configuré sur components.xml)
  • @GET est de repos
  • ProduceMime ou ConsumeMime est le mime que vous devez consommer ou produire
  • @QueryParam est le params de la URL et les paramètres @PathParam vous devriez obtenir

Donc, ce get recevoir un appel de /webservice/web?param=lalala et retourner une chaîne dans le format application/xml.

Questions connexes