2012-01-18 5 views
0

私のウェブアプリケーションはGoogle Maps APIに基づいており、jarファイル内の画像にアクセスしようとして問題があります。私は二つのことを行うことができるようにしたいGoogleマップ画像ファイルがjarファイル内にあるマーカー

  • はjavascriptのマップでマーカーを表示します。
  • スタティックマップにマーカーを表示します。

いずれの場合も、画像ファイルのパスを指定する必要があります。このイメージは、Webアプリケーションがサーバーにデプロイされると、/ WEB-INF/libフォルダーにあるjarファイル内にあります。

私は次の行が働くだろうと思った: iconMarker.image = "WEB-INF/libに/ cimCore.jar/META-INF /リソース/ IMG /!" + ilMarker.icon。

しかし、それは、クライアントのブラウザに次のエラーを示しています 「NetworkError:404ノーFound- http://ip/cimWeb/WEB-INF/lib/cimCore.jar!/META-INF/resources/img/gsearch.png

パスはので、私はによってアクセスすることを推測OKです「!」文字は適切な方法ではありません。

答えて

0

あなたはクラスローダから画像バイトをロードし、その応答にこれらのバイトをストリームするサーブレットを使用する必要があります:

  • 使用MyServlet.class.getResourceAsStream("/META-INF/resources/img/gsearch.png")画像
  • コールの入力ストリームを取得します
  • response.setContentType("image/png")
  • は、入力ストリームからすべてのバイトを読み込む応答出力ストリームを取得し、出力ストリーム
にそれらを書きます

MVCフレームワークのほとんどは、URLのパターンをクラスパスリソースにマッピングすること、または少なくとも上記のアルゴリズムの一部を実装することをサポートしています。

または、これらのイメージをjarファイルから抽出し、外部アクセス可能なリソースのwebappのツリーに配置することができます。

サイドノート:WEB-INFは外部からアクセスできません。もしあなたが望んでいたことが可能だったなら、誰もがJavaベースのWebアプリケーションのjarファイルと設定を盗むことができました。

+0

ご協力いただきありがとうございます。私が使用するフレームワークであるMyFacesを見ていきます。もっと汎用的な解決策があると思った。 –

+0

URLのライブラリ名プロパティを使用してJSF 2のソリューションを見つけました。 http://...webpath../javax.faces.resource/image.png.faces?ln = imgただし、jarファイル内で新しいライブラリを指定するには、次の構造体を使用する必要があります。jar/META- INF/resources/img –

関連する問題