2011-03-29 109 views
0

我试图通过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')。为什么?

由于

回答

1

1)通过servlet处理在运行中输入,它是一个良好的/常见的做法?

取决于功能要求。我个人会使用一个接受HTTP multipart/form-data请求而不是原始请求主体的servlet。这样它就可以在普通的HTML表单中重用。

2)我的代码似乎删除回车符('\ n')。为什么?

给定的代码示例没有这样做。也许你已经简化了它,你最初使用BufferedReader#readLine()而不使用PrintWriter#println()readLine()确实吃CRLFs。

在给定的代码片段中还有更多问题/效率低下,但我不能给出一个体面的答案,因为你似乎没有实际上运行你在问题中发布的代码。

+0

“我的代码没有这样做”,是的,但是'\ n'已经在curl的输出中删除了。我刚刚从我的代码中删除了该软件包的名称。 – Pierre 2011-03-29 14:26:21

+0

我在阅读您的答案后查看了http://commons.apache.org/fileupload/streaming.html。谢谢。 – Pierre 2011-03-29 14:59:54

+0

我在本地尝试了您的servlet代码(尽管使用'java.net.URLConnection'代替curl),并且保留了换行符。 – BalusC 2011-03-29 15:04:19

相关问题