基于Locale的Jetty重定向

我想基于请求客户端的区域设置 – 重定向Jetty中的URL,服务器端。

  1. 客户端发出主机请求:port / help / index.html (’help’是webapp war)
  2. 服务器端我读取客户端语言环境,例如’ GB ‘并重定向到单独的webapp,例如* host:port / help_GB / index.html *

我认为这将像运行我的Jetty服务器的服务器端代码一样简单: –

String i18nID = Locale.getDefault().getCountry(); RewriteHandler rewrite = new RewriteHandler(); rewrite.setRewriteRequestURI(true); rewrite.setRewritePathInfo(false); rewrite.setOriginalPathAttribute("requestedPath"); RedirectRegexRule r = new RedirectRegexRule(); r.setRegex("/help/(.*)"); r.setReplacement("/help_" + i18nID + "/$1"); rewrite.addRule(r); server.setHandler(rewrite); 

但这不起作用,我为所有’host:port / *’地址获得404s。 然后我注意到我无论如何都得到了语言环境服务器端,我想要客户端,所以我编写了自己的处理程序: –

  private class MyHandler extends RewriteHandler { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) { try { String country = baseRequest.getLocale().getCountry(); String newTarget = target.replace("/help/", "/help_" + country + "/"); if (target.contains("/help/") /*TODO And not GB locale */) { response.sendRedirect(newTarget); } else { super.handle(target, baseRequest, request, response); } } catch(Exception e) { /*DEBUG*/System.out.println(e.getClass() + ": " + e.getMessage()); e.printStackTrace(); } } } 

…并使用它而不是RewriteHandler。 这接受’/ help /’请求,不重定向,不包含一些页面元素和404s,其他URI不包含帮助。

我做错了什么或使用重写/重定向处理程序某种方式它们不应该被使用?!

重定向到另一个webapp应该可以使用像这样的filter