Показать изображение в JSP с помощью сервлета - PullRequest
0 голосов
/ 01 сентября 2011

Я работаю над приложением, в котором информация о пользователях добавляется и модифицируется (обновляется).

В добавить модуль , администратор вводит данные пользователя и уникальный идентификатор (abc001) генерируется при нажатии кнопки «Добавить».и администратор также сохраняет изображение / изображение (имя: abc001) пользователя в расположении сервера (// адрес некоторого местоположения-ip / диск / образы D).

В Модуль «Обновление» , администратор может изменять данные пользователя, но не может изменять идентификатор.

Мне нужно какое-то направление в нескольких сценариях.

Если администратор «обновляет» конкретного пользователя, изображение этого пользователя, присутствующего на сервере, должно отображаться на странице, как только администратор нажимает кнопку обновления.

Код изображения в JSP:

<img height="100px;" width="100px;" src="........." alt="Candidate Image"></img>

Я написал сервлет, но не знаю, как вызывать разные изображения, соответствующие разным пользователям, и отображать изображение на странице профиля.

пользователь В профиле пользователя будет отображаться пользователь A В профиле пользователя B будет отображаться изображение пользователя B и т. Д.

Код сервлета Фрагмент

public class UpDatePhoto extends HttpServlet {

    public UpDatePhoto () {
        super();
        // TODO Auto-generated constructor stub
    }

   private static final long serialVersionUID = -8071854868821235857L;
   private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
   private String imagePath;

   *public void init() throws ServletException {
        this.imagePath = "D:\\photo_not_available_large.png";
    }*

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        String requestedImage = request.getPathInfo();
        if (requestedImage == null) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
            return;
        }

        File image = new File(imagePath, URLDecoder.decode(requestedImage, "UTF-8"));

        String contentType = getServletContext().getMimeType(image.getName());

        if (contentType == null || !contentType.startsWith("image")) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
            return;
        }

        response.reset();
        response.setBufferSize(DEFAULT_BUFFER_SIZE);
        response.setContentType(contentType);
        response.setHeader("Content-Length", String.valueOf(image.length()));
        response.setHeader("Content-Disposition", "inline; filename=\"" + image.getName() + "\"");

        BufferedInputStream input = null;
        BufferedOutputStream output = null;

        try {

            input = new BufferedInputStream(new FileInputStream(image), DEFAULT_BUFFER_SIZE);
            output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);

            byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }
        } finally {

            close(output);
            close(input);
        }
    }


    private static void close(Closeable resource) {
        if (resource != null) {
            try {
                resource.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

} 

Изображение недоступно по http, но доступнодоступен только в виде файла, сервлет должен был бы открыть файл изображения, прочитать содержимое и поместить их в буфер ответов ".... не уверен, что я прав.

Может ли кто-нибудь направить меняв направлении и помочь мне, как получить изображение из каталога на сервере и отобразить правильное изображение для пользователя.

1 Ответ

1 голос
/ 01 сентября 2011

Мне трудно понять конкретную проблему, но я считаю, что ваша основная проблема в том, что вы не знаете, как установить imagePath соответственно?Это имеет неправильное значение. Код показывает, что он должен быть установлен в корневую папку, в которую помещены все изображения.В базовой платформе операционной системы вам необходимо сопоставить //some-location-ip address/D drive/images как сетевой диск в проводнике Windows, например, Z:, а затем использовать его в imagePath.

this.imagePath = "Z:";

Он также ожидаетимя файла изображения в качестве pathinfo информации.Итак, предполагая, что ваш сервлет сопоставлен с шаблоном URL /images/*, тогда ваш <img src> должен выглядеть в основном так:

<img src="images/filename.png" />

Вы также можете заполнить его динамически с помощью EL.Например, с уникальным именем пользователя, вошедшего в систему:

<img src="images/${user.name}.png" />

Что касается использования замещающего изображения "D:\\photo_not_available_large.png", вы можете установить его, когда File#exists() вернет false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...