基于语言环境的码头重定向 [英] Jetty Redirect Based on Locale

查看:101
本文介绍了基于语言环境的码头重定向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to -based on the locale of the requesting client- redirect a URL, server side in Jetty.

  1. 客户端请求 host:port/help/index.html (帮助"是网络应用大战)
  2. 服务器端,我读取了客户端的语言环境,例如" GB "并重定向到单独的Web应用,例如* host:port/help_GB/index.html *
  1. client makes a request for host:port/help/index.html ('help' being a webapp war)
  2. server side I read the clients locale, e.g. 'GB' and redirect to a seperate webapp, e.g. *host:port/help_GB/index.html*

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

I thought this would be as simple as the server side code that runs my Jetty server:-

    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.然后,我注意到无论如何我都在获取语言环境服务器端,并且我希望它在客户端端,所以我编写了自己的处理程序:-

But this doesn't work, I get 404s for all 'host:port/*' addresses. I then noticed that I was getting the locale server side anyhow and I want it client side so I wrote my own handler:-

  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/"请求,不重定向,不包含某些页面元素和其他不包含帮助的URI的404s.

...and used that instead of RewriteHandler. This accepts '/help/' requests, doesn't redirect, doesn't include some page elements and 404s every other URI not containing help.

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

Am I doing something wrong or using the rewrite/redirect handlers some way they're not supposed to be used?!

推荐答案

应该使用像这样

这篇关于基于语言环境的码头重定向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆