Как показать страницу JSP с помощью сервлета с изображением в ответе? - PullRequest
0 голосов
/ 14 июня 2011

Код сервлета doGet () для получения изображения из базы данных и сохранения изображения в ответе

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

// Get userid from session

try {

    // Get photos from database in (image)

    // Init servlet response.
    response.reset();
    response.setBufferSize(DEFAULT_BUFFER_SIZE);
    response.setContentType(image.getContenttype());
    response.setHeader("Content-Length", String.valueOf(image.getLength()));
    response.setHeader("Content-Disposition", "inline; filename=\"" + image.getTitle()
    + "\"");

    // Prepare streams.
    BufferedInputStream input = null;
    BufferedOutputStream output = null;

    try {
        // Open streams.
        input = new BufferedInputStream(image.getPhoto(), DEFAULT_BUFFER_SIZE);
        output = new BufferedOutputStream(response.getOutputStream(),
                 DEFAULT_BUFFER_SIZE);

        // Write file contents to response.
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        int length;
        while ((length = input.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
    } finally {
        // Gently close streams.
        output.close();
        input.close();
    }

    //Redirect it to photo page
    RequestDispatcher rd = request.getRequestDispatcher
        ("/webplugin/jsp/profile/photos.jsp");
    rd.forward(request, response);

} catch (Exception e) {
    e.printStackTrace();
}

}

Однако, когда этот сервлет показывает страницу JSP, он показывает only image, а не страницу JSP.

JSP код:

... JSP code

<img src="Servlet url">

... JSP code cont...

Какой вывод я получаю:

  1. Я получаю изображение вместо изображения внутри JSP
  2. Когда я использую RequestDispatcher/ sendRedirect () Я получаю следующее исключение java.lang.IllegalStateException: Cannot forward after response has been committed

Вопрос:

  1. Как получить изображение внутри JSP вместо простого изображения в браузере
  2. Какчтобы избежать выше исключения?

РЕДАКТИРОВАТЬ: мой Web.xml выглядит так

<servlet>
    <servlet-name>Photo Module</servlet-name>
    <servlet-class>app.controllers.PhotoServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Photo Module</servlet-name>
    <url-pattern>/Photos</url-pattern>
</servlet-mapping>

Ответы [ 2 ]

4 голосов
/ 14 июня 2011

Как получить изображение внутри JSP вместо просто изображения в браузере

Введите URL-адрес файла JSP, содержащий элемент <img> в адресе браузерабар.

http://localhost:8080/contextname/webplugin/jsp/profile/photos.jsp


Как избежать выше исключения?

Удалите следующие строки из кода сервлета.

//Redirect it to profile page
RequestDispatcher rd = request.getRequestDispatcher
    ("/webplugin/jsp/profile/photos.jsp");
rd.forward(request, response);

Сервлет должен просто вернуть изображение.Ничего более.Загружать и отображать изображение должен сам веб-браузер, а не веб-сервер.

См. Также:

2 голосов
/ 14 июня 2011

1 вы изменяете ответ и затем пересылаете, это бесполезно. не делай этого.

2 Как получить изображение из сервлета в jsp

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