2009-07-20 71 views
13

我當前必須生成一個顯示字符串文本的圖像,我需要在Servlet上創建此圖像,然後以某種方式將圖像傳遞給JSP頁面,以便它可以顯示它。我試圖避免保存圖像,而是以某種方式將圖像傳輸到JSP。幫助將圖像從Servlet傳送到JSP頁面

自從我開始尋找將圖像從Servlet傳遞到JSP的方法後,我還沒有找到生成圖像的方法。

編輯: JSP頁面已經做出,而不是由servlet創建的,我必須將圖像傳遞到現有JSP

任何幫助表示讚賞。

回答

30

您需要將圖像作爲字節數組寫入響應的輸出流。事情是這樣的:

byte[] imageBytes = getImageAsBytes(); 

response.setContentType("image/jpeg"); 
response.setContentLength(imageBytes.length); 

response.getOutputStream().write(imageBytes); 

然後在你的JSP您只需使用標準img元素:

<img src="url to your servlet"> 
+0

我將不得不在JSP頁面中會顯示圖像 – ChronoXIII 2009-07-20 15:40:35

1

如果我正確理解你的問題,事件的順序將是:

  1. 您生成一個HTML頁面;
  2. 該HTML頁面發送給客戶端;和
  3. 客戶端瀏覽器讀取圖像URL並將其作爲單獨請求進行請求。

因此,您無法生成圖片並將其傳遞給JSP。但是,您可以生成網址以獲取圖像並將其放入JSP中。這很容易通過servlet傳遞給HttpServletRequest對象(JSP中的請求範圍)。例如,生成:

<a href="http://myhost.com/image_servlet?id=1234"/> 

您並沒有真正說出該文本是什麼或生成該圖像需要哪些信息。如果您無法將其封裝到GET URL中,則可能需要添加額外信息並將其放入HttpSession中,以便在下一個獲取圖像請求時檢索它。

7

既可以在相同的反應不 回報,因爲你返回不同的類型(例如text/html類型的HTML頁面和image/jpeg類型的圖像)。

對於這樣的事情,我會在初始servlet請求(包含HTML頁面)期間生成圖像。我將它存儲在我的servlet中的緩存中,然後用包含帶該句柄的圖像的URL的圖像標記寫入HTML頁面。

例如該瀏覽器向http://whatever/page

,servlet生成的圖像,並在頁面像

<img src="http://whatever/image/unique_handle_to_image"> 

寫HTML標籤瀏覽器將呈現HTML頁面,併爲這個問題到一個新的請求的一部分,我帶圖像句柄的servlet。

例如瀏覽器現在要求http://whatever/image/unique_handle_to_image

然後我返回圖像作爲內容類型image/jpeg或類似。

所以你有兩個要求。一個用於渲染圖像並臨時存儲的頁面,以及第二個用於返回圖像的頁面。你必須記得清除圖像緩存,但這很簡單。我不會擔心存儲大量圖像,因爲來自瀏覽器的兩個請求通常(!)快速連續發送。

  1. 我想這是可以使用data uri提供您的瀏覽器支持它,並建立類似

    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==" alt="Red dot" /> 
    

注意有一些圍繞這些需要注意的地方。查看鏈接頁面。

3

我會做一些沿着這條線來實現這一目標:

在你把一個鏈接到圖像的JSP頁面:

<img src="servlet/path?word=value">the rest</img>

該鏈接指向你的servlet,它會產生,使用請求圖像參數,您不需要保存它,只需將它放入響應的輸出流。您必須記住爲此servlet禁用瀏覽器緩存。

首先顯示JSP頁面,然後請求所有圖像,它應該工作得很好。

當然,你不應該把文本顯示在這樣的參數中,你應該以某種方式對它進行加密或者將它存儲在HTTP會話中。

希望這會有所幫助。

1
... 
response.setContentType("image/jpeg"); 
response.setContentLength(imageBytes.length); // imageBytes - image in bytes 
response.getOutputStream().write(imageBytes);// 
outStream.flush(); 
outStream.close();