我試圖通過HttpServlet(tomcat)處理大文本文件。通過HttpServlet處理InputStream到OutputStream
由於此文件可能很大,並且進程應該非常快,因此我不想在服務器上上傳文件,並且我使用方法HttpRequest.getInputStream
來即時處理輸入。例如,我想輸入用下面的代碼變換爲大寫:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class EchoServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
OutputStream out=null;
InputStream in=req.getInputStream();
if(in==null) throw new IOException("input is null");
try
{
resp.setContentType("text/plain");
out=resp.getOutputStream();
int c;
while((c=in.read())!=-1)
{
out.write((char)Character.toUpperCase(c));
}
}
catch(IOException err)
{
//ignore
}
finally
{
if(out!=null) out.flush();
if(out!=null) out.close();
in.close();
}
}
}
我調用我的servlet與CURL:通過servlet
curl -s -d @big.file.txt "http://localhost:8080/test/toupper"
1)處理在運行中輸入,這是一種很好/常見的做法嗎?
2)我的代碼似乎刪除回車('\ n')。爲什麼?
由於
「我的代碼沒有這樣做」,是的,但是'\ n'已經在curl的輸出中刪除了。我剛剛從我的代碼中刪除了該軟件包的名稱。 – Pierre 2011-03-29 14:26:21
我在閱讀您的答案後查看了http://commons.apache.org/fileupload/streaming.html。謝謝。 – Pierre 2011-03-29 14:59:54
我在本地嘗試了您的servlet代碼(儘管使用'java.net.URLConnection'代替curl),並且保留了換行符。 – BalusC 2011-03-29 15:04:19