0

我想 - 基于请求客户端的语言环境 - 重定向 URL,在 Jetty 中的服务器端。

IE

  1. 客户端请求host:port/help/index.html('help' 是 webapp 战争)
  2. 服务器端我读取客户端区域设置,例如“ GB ”并重定向到单独的 Web 应用程序,例如 *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/*' 地址的 404。然后我注意到无论如何我都在获取语言环境服务器端并且我想要它在客户端所以我编写了自己的处理程序:-

  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/”请求,不重定向,不包含某些页面元素和 404,每隔一个不包含帮助的 URI。

我是在做错事还是以某种不应该使用的方式使用重写/重定向处理程序?!

4

1 回答 1

0

重定向到另一个 web 应用程序可能应该使用像这样的过滤器来完成

于 2013-10-18T07:54:07.080 回答