Java Seamframework-Restful URL-如何?

Java Seamframework-Restful URL-如何?,java,seam,url-rewriting,Java,Seam,Url Rewriting,我计划开始一个网络项目,我一直在寻找最好的选择。最终,我选择使用Java+Seam+J Boss作为+JPA Hibernate 但是对于URL重写来说,这是一个非常漫长的过程,没有很多成就 我将有一个层次结构,例如类别->子类别->子类别 基本上我想让它们像foo.com/category/sub-category/sub-sub-category那样映射 是什么帮助我做到这一点 还有什么其他的可能性 URL重写有多灵活 我可以将非层次数据附加到我的url中吗?例如/类别/子类别/类型/子类

我计划开始一个网络项目,我一直在寻找最好的选择。最终,我选择使用Java+Seam+J Boss作为+JPA Hibernate

但是对于URL重写来说,这是一个非常漫长的过程,没有很多成就

我将有一个层次结构,例如类别->子类别->子类别

基本上我想让它们像foo.com/category/sub-category/sub-sub-category那样映射

  • 是什么帮助我做到这一点
  • 还有什么其他的可能性
  • URL重写有多灵活
  • 我可以将非层次数据附加到我的url中吗?例如/类别/子类别/类型/子类别
我关于灵活性的问题主要是因为RESTFUL应该是核心。因此,如果URL重写没有那么灵活,我将不得不仔细考虑我的设计

关于。

我用来处理资源的映射。我没有试过用Seam,但我知道它们很合身

更新:有人创建了一个演示如何集成它们和关联的


描述如何处理URL重写和重定向。

URI构造与REST正交。请参阅:

url重写的其他选项如何


Prettyfaces?

您可以使用Seam内置的URL重写,或者如果您希望在重写规则中具有更大的灵活性,可以从中使用URL重写筛选器。以下两个例子:

Seam的内置重写功能(哪个prob在封面下使用tuckey过滤器)

首先在components.xml文件中启用url重写

将被视为请求

/home.seam?category=vehicles&sub-category=cars&sub-sub-category=fords
同样,如果页面具有可用的命名请求参数,则将转换出站url

或者您可以按如下方式使用Tucky过滤器

将Tuckey过滤器jar添加到您的项目中,您可以从这里获取它

接下来,将过滤器添加到web.xml文件中


URL重写过滤器
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
URL重写过滤器
/*
要求
向前地
最后,将一个名为urlrewrite.xml的文件添加到WEB-INF目录中。此文件将定义您的重写规则。您可能希望对regex有点熟悉。该文件应如下所示

^/home.seam?类别=(.)和子类别=(.)和子类别=(.*)$ /住宅/$1/$2/$3


/首页\/$1\/$2\/$3
/home.seam?类别=$1&子类别=$2&子类别=$3

Seam doco在这里-


Tucky UrlRewriteFilter doco在这里-

我使用的框架与您计划使用的框架相同(Java+Seam+J Boss AS+JPA Hibernate),而且RestFul Web服务也是我的核心

我选择resteasy作为rest框架,它工作得很好,很容易(重写和测试都可以,和easymock一样)。它也是jboss产品,与seam配合使用,易于集成

作为示例代码:

@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
    是类的“根路径”(您真正的“根”将在
    components.xml
    上配置)
  • @GET
    来自Rest
  • ProduceMime
    consumermime
    是您应该使用或制作的mime
  • @QueryParam
    是URL的参数,
    @PathParam
    是您应该获得的参数

因此,此get将接收来自
/webservice/web?param=lalala
的调用,并以
应用程序/xml
格式返回字符串。

看起来标记解析器不喜欢我的正则表达式;)事实上,它删掉了一大堆文字。我将把它添加到另一个注释中,该注释应位于“文件应如下所示”之后:^/home.seam?category=(.*)和sub-category=(.*)和sub-sub-category=(.*)$/home/$1/$2/$3应继续使用“您在这方面运气好吗?确实如此。”。与其称这些URI为“RESTful”,不如称它们为“酷URI”(一个愚蠢的名字——但却是一个公认的、正确的名字)。
/home/vehicles/cars/fords
/home.seam?category=vehicles&sub-category=cars&sub-sub-category=fords
<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>
<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>
@Path("/webservice")

public class Web
{

    @GET
    @Path("{web}")
    @ProduceMime("application/xml")
    public String test(@QueryParam("param") String param, @PathParam("web") String web) 
{
//  code here
}
}