[英]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,我假設圖像動態生成或一般來說,你有什么事情 ,給它取決於你的一些參數。
您應該考慮一下普通的(或愚蠢的...)瀏覽器如何工作:
(您可以用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.