【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

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

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する