QA@IT

CSSファイルやJSファイルの読み込み、書き出し

5081 PV

Javaサーブレットで、タグで囲まれた外部CSSファイル、JSファイルを読み込みたいです。
現在、JavaサーブレットでHTMLを取得し、タグで囲まれたドキュメントに対して、ある処理を行ってPrintWriterクラスを使って出力を行っています。

元のHTMLを取得する際に、その元のHTMLに記述されている外部CSSファイル、JSファイルを読み込んで、反映させるにはどうしたらよいでしょうか?

  • 具体的なソースコードがないので、やりたいことが掴みきれてないのですが、
    HTML,JS,CSSのファイルがそれぞれ存在して、サーブレットからそれらのファイルを読み込んで
    最終的にブラウザに返すHTMLを生成するということでしょうか?
    -
  • はい!そういうことです! textはBufferedReaderで、画像はBufferedInputStreamで読み出せると思うのですが、JSやCSSなどはどうすればいいのか分からないのです。 -

回答

外部のページを別のサーバーから見せるような仕組み、
GoogleのウェブページキャッシュとかEvernoteのようなものだと思いますが、

基本的にJSやCSSの場所はブラウザがHTMLに書いてある通りに取得します。ですので、出力しているHTMLに書かれている通りにそれらがなければいけません。絶対URLで書かれていれば、そのサーバーにアクセスできないといけませんし、相対URLであれば表示しているURLから同じ相対位置にファイルがないといけません。

これをサーブレットで解決するには、ブラウザが処理できるようにHTMLを調整するか、ブラウザが求める場所にファイルを置くかしかありません。

一番楽なのは base属性を埋め込むことじゃないかと思います。ただし、すでにbase属性がある場合は取り除く必要があります。
http://reference.ascii.jp/html/base

あとはHTMLを解析して、リンクされているファイルを取得し、(サーブレットサーバーの)ローカルに保存するとか該当部分を書き換える事になってしまうと思います。その際、必要があればリンクのアドレスも書き換える必要がありますね。
ただ、HTMLを自前で解析するくらいならWebクローラを使って夜間に保管しておくとかした方がいいような気もします。

なお表示するHTMLがご自分のものであればいいですが、他所のものである場合は過剰アクセスなど迷惑にならないよう&ライセンスなどにも気を付けてください。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。