2013-01-31 22 views
0

我有一个很好的Restlet应用程序,其组件高度重视以下几点:的Restlet “斜线” 的行为

 cmp.getDefaultHost().attach("/mycmd",ProcessReq.class); 

而当请求URL是http:// <我的主机>/mycmd /时,ProcessReq类返回一个index.html,其中包含指向其他页面的链接。这些页面在同一目录中的index.html,并在我的index.html像下面的例子相对页面引用:

<a href="otherpage.html">Other Page</a> 

什么我发现,但问题在于,用户往往期望使用不带尾随“/”的URL,例如:http:// < my-host >/mycmd。不幸的是,当他们这样做时,所有到相关页面的链接都被搞砸了。

当您使用http:// <我的主机>/mycmd /显示的index.html,然后单击“其他页”链接时,浏览器(正确地)去到http:// <我的主机> /mycmd/otherhost.html。不幸的是,当您执行http:// < my-host >/mycmd(没有结尾斜杠)时,到其他页面的链接会将浏览器发送到http:// < my-host > /otherpage.html,这当然会返回一个404错误。

我搜索了互联网,发现Restlet库已被设计为要求在默认情况下我所做的各种URL之后有一个尾部的斜线。然而,这需要我的用户疯狂。

是否有某种方式来配置或操纵请求(或响应),以便我可以发送这种类型的URL请求而不需要一个结尾的斜杠,并让返回的页面中的相对链接指向正确的位置?

有人请指教...

回答

1

的解决方案,我建议是,如果用户忘记键入自动重定向客户端浏览器的URI以斜杠。因此,你的相对URI将保持简单。

否则,你需要给每个相对URI如再次添加目录名“mycmd/otherhost.html”

+0

我真的试图类似于你的建议是什么东西。在ServerResource中,我重写了URI,并为其添加了斜杠。我能够找到正确的资源,但相对URI仍然很糟糕。如果你是在暗示这一点,那么我显然缺少一些东西。你是否建议我放置一个可以重定向的过滤器?我应该使用什么类/方法?请详细说明。 –

+0

我建议客户端重定向,所以浏览器可以正确解析相对URI。然后,您可以重新使用重定向器或自定义的Filter子类。 –

+0

谢谢。这是我需要的信息。我最终创建了一个Redirector.MODE_CLIENT_PERMANENT模式的重定向器,并最终让事情发挥作用。不过,我不确定CLIENT_PERMANENT和CLIENT_TEMPORARY之间的区别。希望我能得到更多关于这些的信息。 –