簡體   English   中英

如何將InputStream從jsp傳遞到servlet

[英]How to pass an InputStream from a jsp to a servlet

我必須在jsp頁面上打印一些以InputStream形式獲取的圖像。

首先,我有servlet,它通過以下方式將包含InputStream的變量傳遞到jsp頁面:

request.setAttribute("Image", InputStream);
request.getRequestDispatcher(pagename).include(request, response);

在我的jsp頁面中,我有這個來獲取那個InputStream:

${requestScope.VariableContainingInputStream}

要將InputStream轉換為圖像,我應該這樣使用servlet:

<img src="ServletName">

如何將InputStream傳遞到該servlet?

如何將InputStream傳遞到該servlet?

你不會的 您的JSP將創建一個臨時(或永久)文件,並將InputStream的內容寫入其中。 然后,您將提供一個可以提供該文件內容的終結點。

然后,您將在JSP的<img>元素中提供指向該端點的URL。

如果你把它作為一個InputStream,我假設圖像動態生成或一般來說,你有什么事情 ,給它取決於你的一些參數。

您應該考慮一下普通的(或愚蠢的...)瀏覽器如何工作:

  • 用戶單擊鏈接,提交按鈕或在地址欄中傳遞網址
  • 瀏覽器生成相應的請求並將其發送到服務器
  • 服務器會生成一個(通常為HTML)頁面, 其中包含指向圖像的鏈接 ,並將其發送回瀏覽器
  • 瀏覽器分析頁面,並發送單獨的圖像請求
  • 服務器為每個請求發送回一個圖像
  • 瀏覽器顯示包含圖像的整頁

(您可以用css頁,js腳本或任何其他資源替換圖像)

所以,你應該在運行你的JSP撰寫HTML頁面,但在寫的時候輸入流<image source=/ImageServlet_url?params_for_current_image/>

然后,當瀏覽器請求圖像時,圖像servlet將請求InputStream並將其直接放入響應主體中,並在響應頭中使用正確的類型。

到目前為止,這是解決問題的最強大的方法。 如果確實不是一個選擇,並且InputStream僅在運行jsp時才起作用,則必須放入session屬性。 然后,當調用ImageServlet時,它將在會話中查找並發送它。 問題在於InputStream不一定是可Serializable並且將不可序列化的項放在會話中是不安全的。 所以你應該:

  • 在應用程序中的某個位置設置全局Hash<String, InputStream>
  • 嘗試將InputStream放入會話中時,實際上將其放入哈希中(具有唯一鍵)並將鍵存儲在會話中
  • 從會話獲取InputStream從會話獲取密鑰並從哈希中獲取InputStream ……不要忘記將其從哈希中刪除...

強烈建議您堅持第一種解決方案,不要在HTML頁面的請求和圖像之間出現口語或網絡錯誤或斷電...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM