次に、ヘッダ情報を利用して、クライアントの対応言語(Accept-Languageヘッダ)に応じて、異なる「こんにちは」を表示するheader.jsp(リスト3)を作成してみましょう(図3、注4)。
リスト3:header.jsp
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<html>
<head>
<title>ヘッダ情報による言語の変更</title>
</head>
<body>
<c:choose>
<c:when test="${fn:startsWith(header['Accept-Language'],'ja')}">
こんにちは!</c:when>
<c:when test="${fn:startsWith(header['Accept-Language'],'de')}">
Guten Tag!</c:when>
<c:when test="${fn:startsWith(header['Accept-Language'],'fr')}">
Bonjour!</c:when>
<c:otherwise>
Hello!</c:otherwise>
</c:choose>
</body>
</html>
図3:対応言語に応じて異なる言語のあいさつを表示 (画像をクリックすると別ウィンドウに拡大図を表示します)
※注4:
クライアントの対応言語は、ブラウザの設定で変更可能です。例えば、Internet Explorer 6.0ならインターネットオプションの[全般]タブ−[言語...]で変更できます。
ヘッダ情報を管理するのは、暗黙オブジェクトheaderの役割です。${header['ヘッダ名']}で指定されたヘッダ情報を取得します。例えば、Accept-Languageヘッダであれば、「fr-ca,ja;q=0.5」のような文字列を返すはずです。
<c:choose>要素は、<c:when>要素のtest属性に示された条件式がtrueである場合に、該当するブロック(複数のブロックに合致した場合には、最初に合致したブロック)を、すべての条件式がfalseであった場合には<c:otherwise>要素の内容を、それぞれ出力します。fn:startsWith関数については、表3を参照してください。
つまり、ここでは、Accept-Languageヘッダが"ja"(日本語)、"de"(ドイツ語)、"fr"(フランス語)ではじまる場合に、それぞれ対応する言語で「こんにちは」を表示するわけです。Accept-Languageヘッダが指定されたいずれでもない場合は、英語で「Hello!」と表示します。
|