我有一个很好的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请求而不需要一个结尾的斜杠,并让返回的页面中的相对链接指向正确的位置?
有人请指教...
我真的试图类似于你的建议是什么东西。在ServerResource中,我重写了URI,并为其添加了斜杠。我能够找到正确的资源,但相对URI仍然很糟糕。如果你是在暗示这一点,那么我显然缺少一些东西。你是否建议我放置一个可以重定向的过滤器?我应该使用什么类/方法?请详细说明。 –
我建议客户端重定向,所以浏览器可以正确解析相对URI。然后,您可以重新使用重定向器或自定义的Filter子类。 –
谢谢。这是我需要的信息。我最终创建了一个Redirector.MODE_CLIENT_PERMANENT模式的重定向器,并最终让事情发挥作用。不过,我不确定CLIENT_PERMANENT和CLIENT_TEMPORARY之间的区别。希望我能得到更多关于这些的信息。 –