Content-Typeを動的に指定することは可能なのか

今回は、前回のマネージャーKのコラム(ページは見つかったのか。見つかっていないのか。)でちょっとだけ話に挙がった「Content-Type」についてお話します。

Webcenter Sites(以下WCS)では、Content-Typeをテンプレート作成時に指定することができます。

Content-Typeはテンプレートの設定項目の1つである、ページレットパラメータで”cs.contenttype”をキーに指定します。

ページレット

しかし、このページレットパラメータで指定したcs.contenttypeの値は、そのテンプレートで常に固定となるため、動的にContent-Typeの変更ができません。
サーブレットプログラムでは、下記コードのようにContent-Typeを動的に変更できます。

response.setContentType("text/html");

WCSのテンプレートでこのコードを書いてもエラーは発生しませんが、有効にもならないのです。

それでは、動的にContent-Typeを変更したい要件が出たときにはどうするべきでしょうか。

実際に携わった案件では、使われる可能性のあるContent-Typeのテンプレートを全て用意し、アクセスに応じて適切なContent-Typeのテンプレートを呼び出す方法を取りました。

例えば、gifへのアクセスであれば、cs.contenttypeが”image/gif”のテンプレートを呼出し、pdfへのアクセスであれば、”application/pdf”のテンプレートを呼び出すといった感じです。

呼出し方は色々な方法がありますが、Apacheのrewriteを使うのも一つの方法です。

Rewriteを使ったテンプレート呼出しイメージ

rewrite_image

もう一つ、こちらはまだ検証前ではありますが、テンプレートを”XML”タイプで開発することでContent-Typeを動的に変更できる可能性があります。

XMLにはHTTPのヘッダーを設定するタグ(ICS.STREAMHEADER)が用意されていて、このタグを使うことによってContent-Typeの指定が可能だということです。

実際にこのタグが有効かどうかは次の機会に検証したいと思います。

今のところ、JSPでの開発ではContent-Typeを完全な動的化にする方法が見つかっていませんが、上記に挙げた方法が参考になれば幸いです。