2010-12-10 21 views
6

Spring 3.0 belgelerindeki Section 15.3.2.3 Supported handler method arguments and return types numaralı belgede, bir java.io.OutputStream veya java.io.Writer öğesinin, yanıt içeriğinin oluşturulmasında @RequestMapping "ile açıklanmış bir yöntemin bir parametresi olarak belirtilebileceğini belirtir. Servlet API'sı tarafından gösterilen OutputStream/Writer. " Yazarı bitirmeden veya açık kalması kaydıyla yazarın kapatılması, yöntemin sorumluluğudur mu ve diğer bir Bahar süreci kapanacak mı?Yazar parametresini Spring 3 denetleyicime kapatmalı mıyım?

+0

Bu akışlar Servlet API'sından alındığı için, http://stackoverflow.com/questions/1159168/should-one-call-close-on-httpservletresponse-getoutputstream-getwriter – axtavt

+0

olası yinelemesine bakın [Kapatmam gerekir mi? servlet outputstream?] (http://stackoverflow.com/questions/1829784/should-i-close-the-servlet-outputstream) – BalusC

cevap

3

Yalnız bırakmalıdır. Genel bir kural olarak, kodunuz açılmadıysa, o da kapatmamalı.

Bu durumda, tüm akışları temizleme ve kapatma işleminden sorumlu olan sunucu kabı (Yay değil) sorumludur.

Kendiniz yapın kendiniz yaparsanız, bunun herhangi bir zarar vereceğinden şüpheliyim, ancak buna gerek yok.

+0

Tamam, bahar tarafından sağlanan akışı kapatmamalıyım, ama ya bir boru kullanırsam CSVWriter yazarı = yeni CSVWriter (springWriter); writer.writeLine ("blabla"); Yazarı kapatmazsam (veya en azından yıkayarak), herhangi bir işi kaybedebilirim çünkü bir çeşit tamponda yapılır. –

1

skaffman'ın doğru, onu kapatmak zorunda değilsiniz, ve muhtemelen yapmamalısınız, ancak kodla uğraşıyorsanız özellikle nihayetinde 'nihayet' bir maddede durmak() için hala iyi bir fikirdir. Bu istisnalar atar, yani bir veritabanından dışa aktarır.

İlgili konular