【Java & Tomcat】コンテンツタイプの設定(setContentType)※サンプルプログラム付き

  • このエントリーをはてなブックマークに追加
  • Pocket

この記事ではWebアプリケーションの出力結果に影響する「コンテンツタイプ」の設定について説明する。

コンテンツタイプの設定の仕方

コンテンツタイプの設定とは、クライアントサーバー間のコンテンツの種類を設定することである。コンテンツの種類には次のようなものがある。実際に設定する時は、MIMEタイプを使用して設定を行う。

コンテンツの種類

MIMEタイプ

HTML文章

text/html

JPEG画像

image/jpeg

PDF文書

application/pdf

このコンテンツタイプは、HttpServletResponse.オブジェクトのメソッドを呼び出すことにより設定できる。

書き方の基本は簡単だ。

HttpServletResponseオブジェクト.setContentType(java.lang.String type);

実際のコードはこうなる。

response.setContentType("text/html");

また、コンテンツの中で使われる文字コード(Shift_JISやUTF-8など)も、日本語を表示させる場合に設定する。

response.setContentType("text/html; charset=Shift_JIS");

文字コードをsetCharacterEncoding()メソッドで単独で設定するとこともできる。

HttpServletResponseオブジェクト. setCharacterEncoding (java.lang.String type);

注意点として、サーブレットは、レスポンスのgetWriterメソッドを呼び出す前に、また、レスポンスをコミットする前にsetContentTypeメソッドを呼び出さなければならない。そうしないとsetContentTypeメソッドによる設定は無効になってしまう。

setContentTypeのAPI仕様

setContentTypeのAPI仕様をここに示しておこう。

setContentType(java.lang.String type)

戻り値の型

void

内容

もしレスポンスがまだコミットされていないならば、クライアントに送るレスポンスのコンテンツタイプを設定する。

与えられたコンテンツタイプは、設定をコード化する文字列、例えば、「text/html; charset=UTF-8」といった文字列を含むかもしれない。getWriterメソッドが呼び出される前にこのメソッドが呼び出された時だけ、レスポンスの文字コードは与えられたコンテンツタイプに設定される。

このメソッドは、コンテンツタイプと文字コードを変えるために繰り返し呼び出されるかもしれない。もしレスポンスがコミットされた後に呼び出されるならば、このメソッドは無効になる。 もし、getWriterメソッドが呼び出された後かもしくはレスポンスがコミットされた後に、呼び出されるならば、それはレスポンスの文字コードを設定しない。

もしプロトコルがそうする方法を提供するなら、コンテナはサーブレットのレスポンスのライターのために使われるコンテンツタイプと文字コードを、クライアントへ知らせなければならない。HTTPの場合は、コンテンツタイプヘッダーが使われる。

 

引数:type - コンテンツのMIMEタイプを指定する文字列

 

参照:setLocale(java.util.Locale), setCharacterEncoding(java.lang.String),

getOutputStream(), getWriter()

setContentTypeを使用しないサンプルプログラム

このサンプルプログラムは、setContentTypeを使わずに半角英数字と日本語を表示する。この場合、文字コードが設定されていないので、日本語が正しく表示されない。

実行結果

ブラウザにURL:http://localhost:8080/Servlet/NotSetContentTypeを入力し、Enterを押す。

表示されるブラウザ画面:

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] アノテーションの宣言をする。
  • [2] HttpServletを継承して、NotSetContentTypeクラスを定義する。
  • [3] doGet()メソッドをオーバーライドして定義する。
  • [4] HTMLを出力するためのPrintWriterオブジェクトを取得する。
  • [5]-[8] PrintWriterオブジェクトに「abcdefABCDEF」と「あいうえおかきくけこ」を表示するHTMLコードを出力する。

setContentTypeを使用したサンプルプログラム

このサンプルプログラムは、setContentTypeを使ってMIMEタイプと文字コードの設定を行い、半角英数字と日本語を表示する。この設定は、レスポンスのgetWriterメソッドを呼び出す前に行われている。この場合、日本語も正しく表示される。

実行結果

ブラウザにURL:http://localhost:8080/Servlet/SetContentTypeを入力し、Enterを押す。

表示されるブラウザ画面:

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] アノテーションの宣言をする。
  • [2] HttpServletを継承して、SetContentTypeクラスを定義する。
  • [3] doGet()メソッドをオーバーライドして定義する。
  • [4] Content Typeを設定する。
  • [5] HTMLを出力するためのPrintWriterオブジェクトを取得する。
  • [6]-[9] PrintWriterオブジェクトに「abcdefABCDEF」と「あいうえおかきくけこ」を表示するHTMLコードを出力する。

まとめ

この記事では実際にsetContentTypeを使用するか、しないかで出力結果が大きく異なることを確認した。サンプルプログラムを実際に動作させて確かめてみよう。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*

ゼロからエンジニアを目指す方へ
短期間でエンジニアになる方法

必要な勉強や技術の最新動向、本当に使えるIT資格、学習に役立つ国からの奨励金などの情報を無料でお届け

資料を見てみる