オーケーを使用して画像にアクセスすることができますので、私は答えを考え出しました。画像をロードするには、BufferedOutputStream経由でバイナリデータを書き出すために実際にJavaコードが必要であることが判明しました(私はTomcatがそれを世話すると思っていました)。
具体的には、HTMLの「/images/logo.jpg」のようなパスを使用可能なイメージに変換するサーブレットが必要です。サーブレットは、/ images/*のサーブレットへのサーブレットマッピングを介して呼び出されます。/images/*の一部を抽出することで、正確なイメージ名を取得でき、サーブレットはそれを読み込むことができます。私のプロジェクトでは、DisplayImageがC:/.../Entertainment_mgmt/src/servlets/DisplayImage.java
で発見されていること
...
<servlet>
<servlet-name>DisplayImage</servlet-name>
<servlet-class>servlets.DisplayImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayImage</servlet-name>
<url-pattern>/images/*</url-pattern>
</servlet-mapping>
...
注:
はここ(WEB-INF/web.xml
に追加する)サーブレットマッピングです。
もちろん、マッピングに必要なものを追加できます。マッピングは、localhost:8040/images/logo.jpg
のようにURLに表示されます。または、<img src="/images/logo.jpg" />
というHTMLページ内に表示されます。サーブレットの点からは、どちらも同じことです。上記のマッピングに従って、両方ともサーブレットDisplayImageによって処理されます。
DisplayImageサーブレットhereのコードが見つかりました。私はそれを少し変更した:あなたのコンピュータ上のimagesBase
へのフォルダを設定することができます
package servlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DisplayImage extends HttpServlet {
public final String imagesBase = "F:\\Workspaces\\Java\\Projects\\Entertainment_mgmt\\src\\images/";
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
String URLAfterWebDomain = request.getRequestURI();
//Only accept mappings as src="/images/whatever.jpg", even if web.xml has other mappings to this servlet.
if(URLAfterWebDomain.startsWith("/images/") == false)
return;
//get the image name, or even directory and image, e.g. /images/music/beethoven.jpg:
String relativeImagePath = URLAfterWebDomain.substring("/images/".length()); //will get "music/beethoven.jpg"
System.out.println("\nFetching image from "+imagesBase+relativeImagePath);
response.setContentType("image/jpeg"); //as far as I know, this works for PNG as well. You might want to change the mapping to /images/*.jpg if it's giving problems
ServletOutputStream outStream;
outStream = response.getOutputStream();
FileInputStream fin = new FileInputStream(imagesBase+relativeImagePath);
BufferedInputStream bin = new BufferedInputStream(fin);
BufferedOutputStream bout = new BufferedOutputStream(outStream);
int ch =0; ;
while((ch=bin.read())!=-1)
bout.write(ch);
bin.close();
fin.close();
bout.close();
outStream.close();
}
}
、それはあなたのプロジェクトのフォルダ内にある必要はありません。 /images/
フォルダの名前を/pics/
などに変更することもできます。
ここで、<img>
タグをHTMLに配置すると、src="/images/whatever.jpg"
属性を使用してDisplayImageサーブレットを呼び出し、画像を表示できます。そのイメージを再配置することができます。
これは、HTMLを書き出す他のサーブレットでも行うことができます。その場合、サーブレットは独立して呼び出され、HTTP経由で独立して出力されます(これは、一部のWebページではテキストが最初にロードされ、イメージは後でロードされます)。
HTMLはファイルへのパスを期待していません。 HTTP URLが、HTTPサーバーによって提供されるイメージを指していることを期待しています。あなたのイメージは、Webサーバーによって提供される "Webページ"の下にある必要があります。また、HTMLには、ローカルファイルパスではなく、これらのイメージへのHTTP URLが含まれている必要があります。 '' –
@JBNizet:__now__を取得します。しかし、ほとんどのブラウザーがハードドライブ上のファイルパスから直接画像を開くことができるので、私は混乱しました。私はTomcatがそのギャップを埋めることを期待し、ページと共に画像を提供しました。 –