Java Seamframework-Restful URL-如何?
我计划开始一个网络项目,我一直在寻找最好的选择。最终,我选择使用Java+Seam+J Boss作为+JPA Hibernate 但是对于URL重写来说,这是一个非常漫长的过程,没有很多成就 我将有一个层次结构,例如类别->子类别->子类别 基本上我想让它们像foo.com/category/sub-category/sub-sub-category那样映射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中吗?例如/类别/子类别/类型/子类
- 是什么帮助我做到这一点
- 还有什么其他的可能性
- URL重写有多灵活
- 我可以将非层次数据附加到我的url中吗?例如/类别/子类别/类型/子类别
描述如何处理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
来自Rest@GET
或ProduceMime
是您应该使用或制作的mimeconsumermime
是URL的参数,@QueryParam
是您应该获得的参数@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
}
}