基于Locale的Jetty重定向

时间:2013-10-10 11:11:54

标签: java redirect web jetty locale

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

即。

  1. 客户端请求 host:port / help / index.html ('help'是webapp war)
  2. 服务器端我读取了客户端区域设置,例如' GB '并重定向到单独的网络应用,例如*主机:端口/ help_GB / index.html中*
  3. 我认为这就像运行我的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不包含帮助。

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

1 个答案:

答案 0 :(得分:0)

应该使用Filter like so

重定向到其他网络应用