2

我正计划开始一个网络项目,并且一直在寻找最佳选择。最终我选择坚持使用 Java + Seam + J Boss AS + JPA Hibernate。

但是关于 URL 重写它是一个非常漫长的过程,没有很多成就。

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

基本上我希望这些映射像 foo.com/category/sub-category/sub-sub-category

  • 什么可以帮助我实现这一目标?
  • 其他的可能性是什么?
  • URL 重写有多灵活?
  • 我可以将非分层数据附加到我的网址中吗?例如... .../类别/子类别/类型/子子类别

我关于灵活性的问题主要是因为 RESTFUL 应该是核心。因此,如果 URL 重写不是那么灵活,我将不得不仔细考虑我的设计。

问候。

4

5 回答 5

2

您可以使用 Seam 的内置 URL 重写,或者如果您希望重写规则更灵活,您可以使用来自http://tukey.org/urlrewrite/的 UrlRewriteFilter 。以下两者的示例:

Seam 的内置重写(无论如何,它可能会使用封面下的 tukey 过滤器)

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

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

接下来,将重写规则添加到pages.xml文件中

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

在这种情况下,传入的 url 用作

/home/vehicles/cars/fords

将被视为请求

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

同样,如果页面具有可用的命名请求参数,则出站 url 将被转换。

或者您可以按如下方式使用 Tucky UrlRewriteFilter

将 Tuckey UrlRewriteFilter jar 添加到您可以从这里获取的项目中

http://tukey.org/urlrewrite/

接下来添加过滤器您的web.xml文件

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

最后将一个名为urlrewrite.xml的文件添加到您的 WEB-INF 目录中。该文件将定义您的重写规则。您可能希望对正则表达式有所了解。该文件应如下所示

^/home.seam?category=(. )&sub-category=(. )&sub-sub-category=(.*)$ /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>

Seam doco 在这里 - Seam 文档

Tucky UrlRewriteFilter 文档在这里 - Tuckey RewriteFilter 文档

于 2009-07-31T05:34:23.960 回答
1

url 重写的其他选项呢?

漂亮脸蛋?

于 2009-07-21T01:32:17.543 回答
1

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

更新:有人创建了一个示例项目,展示了如何集成它们以及相关的论坛帖子

Restlet 2.0 教程描述了如何处理 URL 重写和重定向。

于 2009-07-20T21:48:40.820 回答
1

URI 构造与 REST 正交。见:http ://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

于 2009-07-20T22:02:57.203 回答
0

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

我选择 resteasy 作为其余框架,它工作得很好而且很容易(重写和测试,和 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来自休息
  • ProduceMime或者ConsumeMime是你应该消费或制作的哑剧
  • @QueryParam是 URL@PathParam的参数和你应该得到的参数

所以这个 get 将接收来自的调用/webservice/web?param=lalala并返回格式中的字符串application/xml

于 2009-08-06T19:45:16.907 回答