2010年7月4日日曜日

サーブレットからクライアントブラウザを知る方法

お久しぶりです。一ヶ月以上空いてしまいました。
サーブレットは、クライアントブラウザからに表示指示に対して、クライアントブラウザにHTMLページを送信します。しかし、クライアントブラウザの表示機能には差があるため、クライアントブラウザによっては、出力するHTMLページを変更する必要があります。
サーブレットを構築するためのTomcatでは、リクエストを発行したブラウザを検知する方法があります。
クライアントからブラウザ表示指示を送信すると、サーブレット上のdoGetやdoPostメソッドが呼び出されます。この際のパラメータであるHttpServletRequest内のヘッダーからユーザーエージェント文字列を取得してブラウザを判別することが可能です。
世の中にある各ブラウザのユーザーエージェント文字列は、userAgent一覧のように沢山ありブラウザを特定するプログラムを作成するのは大変面倒です。

このようなとき、私は、JavaのStringTokenizerを使って対応しています。
StringTokennizerは、文字列内の空白など文字列を分割する文字(区切り文字)を指定します。すると、この文字が発見されると同時に、分割することができます。

例えば、
    StringTokenizer st = new StringTokenizer(myString, " /");
    while(st.hasMoreTokens()) {
      String s = st.nextToken();
    }
とすると、区切り文字が空白と「/」なので、myString文字列が、"aaaa/bbbb"の場合には、"aaaa"と"bbbb"に分割されます。これをnextTokenメソッドとhasMoreTokenメソッドを使って取り出します。

このメソッドを使って、ユーザーエージェント文字列を解析し、ブラウザを判断することができます。さらに、ブラウザのバージョン情報などの取得も可能です。

    StringTokenizer st = new StringTokenizer(user_agent, " ();,/");
    while(st.hasMoreTokens()) {
      String s = st.nextToken();
      if(0 <= s.indexOf("MSIE")) {
        browser = IEブラウザ
        break;
      }
      if(0 <= s.indexOf("Chrome")) {
        browser =Chromeブラウザ
        break;
      }
      ......
      ......
    }

皆さんも、使って頂ければと思います。

0 件のコメント:

コメントを投稿