1

Eclipseファイル名とフォームからのファイルを受け取り、ユーザーが指定したファイル名でEclipseディレクトリに新しいファイルを作成するサーブレットを作成しました。したがって、ユーザーがファイル名に firstImage と言って、デスクトップから画像を呼び出したstackoverflow.png場合、私のサーブレットはfirstImage.png私のディレクトリにファイルを作成し、その内容をそこに置きstackoverflow.pngます。

問題は、フォームに記入してファイルに書き込むとしましょうgmustudent/images/firstImage.png。その URL http://localhost:8086/gmustudent/images/firstImage.pngにアクセスすると、何も表示されません。しかし、Eclipse で gmustudent プロジェクトに移動したら、それを右クリックしてクリックするとRefreshfirstImage.pngディレクトリにポップアップが表示され、URL が機能するようになりました。

これは明らかに問題です。このフォームを使用するたびにプロジェクトを更新する必要はありません。サーブレットが実行されるたびにプロジェクトを更新するコードをサーブレットの最後に追加する方法を教えてください。ありがとうございました。

4

1 に答える 1

0

最善の方法は、サーブレットを使用して画像をストリーミングすることです。ストリーミングとは、サーバーでファイルを読み取り、応答でバイトを送り返すサーブレットがあることです。

public class ImageServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

        response.setContentType("image/jpeg");

        String pathToWeb = getServletContext().getRealPath(File.separator);
        File f = new File(pathToWeb + "avajavalogo.jpg");
        BufferedImage bi = ImageIO.read(f);
        OutputStream out = response.getOutputStream();
        ImageIO.write(bi, "jpg", out);
        out.close();

    }

}

web.xml。_

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="tomcat-demo" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <servlet>
        <servlet-name>ImageServlet</servlet-name>
        <servlet-class>test.ImageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ImageServlet</servlet-name>
        <url-pattern>/image</url-pattern>
    </servlet-mapping>

</web-app>

Web URL リンクが機能しない理由は、web.xmlファイル内のディレクトリをマップしていない可能性があるためです。ベスト プラクティスは、上記のような別のサーブレットを使用して画像をストリーミングすることです。この質問も参照してください。

于 2012-12-06T00:51:09.177 に答える