Как получить изображение с сервлетом и отобразить его с помощью класса GWT Image? - PullRequest
5 голосов
/ 27 июня 2011

Я использую следующий код как часть серверного класса GWT (сервлет) для GWT-RPC.

private void getImage() {
        HttpServletResponse res = this.getThreadLocalResponse();
        try {
            // Set content type
            res.setContentType("image/png");

            // Set content size
            File file = new File("C:\\Documents and Settings\\User\\image.png");
            res.setContentLength((int) file.length());

            // Open the file and output streams
            FileInputStream in = new FileInputStream(file);
            OutputStream out = res.getOutputStream();

            // Copy the contents of the file to the output stream
            byte[] buf = new byte[1024];
            int count = 0;
            while ((count = in.read(buf)) >= 0) {
                out.write(buf, 0, count);
            }
            in.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Сервлет работает, когда я нажимаю кнопку на клиенте.Я хочу использовать класс Image для загрузки изображения в клиент, но я не знаю, как получить URL-адрес изображения из сервлета в код клиента для его отображения.Это правильная процедура или есть другой способ?Я использую GWT для клиента и GWT-RPC для связи клиент-сервер.

1 Ответ

12 голосов
/ 27 июня 2011

Сервлеты отвечают на различные HTTP-методы: GET, POST, PUT, HEAD.Поскольку вы используете GWT new Image(url), а он использует GET, вам нужен сервлет, который обрабатывает метод GET.

Чтобы сервлет мог обрабатывать метод GET, он должен переопределить метод doGet(..) HttpServlet.

public class ImageServlet extends HttpServlet {

    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException {

        //your image servlet code here
        resp.setContentType("image/jpeg");

        // Set content size
        File file = new File("path/to/image.jpg");
        resp.setContentLength((int)file.length());

        // Open the file and output streams
        FileInputStream in = new FileInputStream(file);
        OutputStream out = resp.getOutputStream();

        // Copy the contents of the file to the output stream
        byte[] buf = new byte[1024];
        int count = 0;
        while ((count = in.read(buf)) >= 0) {
            out.write(buf, 0, count);
        }
        in.close();
        out.close();
    }
}

Затем необходимо настроить путь к сервлету в файле web.xml:

<servlet>
    <servlet-name>MyImageServlet</servlet-name>
    <servlet-class>com.yourpackage.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyImageServlet</servlet-name>
    <url-pattern>/images</url-pattern>
</servlet-mapping>

Затем вызвать его в GWT: new Image("http:yourhost.com/images")

...