JSPでXMLデータを出力する際の注意

Servlet/JSP でXMLデータをレスポンスとして返すプログラムを書こうとしてつまずいた話。
JSPに下記プログラムを書いてFirefoxでテストしてみたところ。。。

<%@ page language="java" contentType="text/xml; charset=UTF-8" %>
<?xml version="1.0" encoding="UTF-8" ?>
<document-root>
<hogehoge1>HOGEHOGE1</hogehoge1>
<hogehoge2>HOGEHOGE2</hogehoge2>
</document-root>

「XML パースエラー: 実体の初めに XML またはテキスト宣言がありません。」

jsp-xml

ちなみに、IE11で開くと真っ白になる。

原因は、レスポンスデータが<?xml ~ ?>で始まっていないため。
ブラウザによっては、データの先頭がこれで始まっていないと、XMLデータとして解釈してくれないらしい。

jsp-xml2

なんでこんなデータになったのかというと、JSPの1行目がコンパイル後は空行として出力されるからである。

解決方法は2つ。
1.<%@ page trimDirectiveWhitespaces=”true” %>の行を追加する。
この1行を追加することで、コンパイル時に<% ~ %>を詰めた状態で出力してくれる。
2.<%@ page language=”java” contentType=”text/xml; charset=UTF-8″ %>を
<?xml ~ ?>以降に書く。

広告
カテゴリー: プログラミング, Java, Servlet タグ: , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中