[英]How to close a HTTP connection from the HttpServlet
我在Tomcat 6.0.26中運行servlet。 servlet通過HTTP POST接受來自客戶端的文件上載。 我想停止從HttpServlet端上傳文件。 我沒有運氣,嘗試了以下方法:
我用谷歌搜索,但沒有找到直接的答案。 請告知解決方案。
謝謝。
使用標准Servlet和Commons FileUpload API是不可能的。 基本上,為了能夠立即中止連接,您應該物理地抓住底層套接字並關閉它。 但是,此套接字由Web服務器控制。 另請參閱此相關問題: 如何在沒有響應標頭的情況下顯式終止來自服務器的http連接 。
然而,很少有測試證實,當Commons FileUpload的大小超過限制時,它不會將整個文件緩沖在內存中。 它將讀取輸入流,但只是忽略並丟棄讀取的字節(也是已讀取的字節)。 因此,內存效率不一定是這里的問題。
要解決實際問題,您基本上希望在客戶端而不是服務器端驗證文件大小。 這可以通過Java Applet或Flash應用程序實現。 例如,分別是JumpLoader和SWFUpload 。
使用標准API無法做到這一點。 如果你這樣做,你就違反了一些協議標准/ RFC。 那你為什么要那樣做?
相反,發送沒有http正文的“連接:關閉”響應(http標頭)。
這里有一些瘋狂的解決方法:您可以根據處理HTTP請求的套接字編寫(或找到某處)某些防火牆獨立應用程序,解析標頭,如果請求與您的自定義條件匹配,則防火牆將其轉發給Tomcat,否則返回HTTP錯誤響應。 或者您可以嘗試使用一些Apache規則來調整Apache < - > Tomcat。
問題或多或少是從servlet中止上傳以限制文件大小的重復
你嘗試過使用Apache Commons FileUpload嗎?
服務器對象中有一個setFileSizeMax方法,表示從請求中上載文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.