通过curl命令可以模拟post的行为,我通过命令:
curl --connect-timeout 5 --data-binary @filename.txt http://localhost/treatcurlServelet 
来上传文件,假设我的servelet名字就叫:treatcrulServelet 而我上传的文件叫filename.txt
servlet端,我通过以下代码来获得上传文件并把它打印在catalina.out里,
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class curlReceiveServlet  extends HttpServlet{
/**
 * 
 */
private static final long serialVersionUID = 1L; public void init() throws ServletException {

}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("hello, you are in curl");
}
protected void doPost(HttpServletRequest request, HttpServletResponse resp)
throws ServletException, IOException {
ServletInputStream sis = null;
try {
sis = request.getInputStream();

if (sis != null) {
print(sis);
sis.close();
}
}
catch (IllegalStateException e) {
e.printStackTrace();
}
}      private void print(ServletInputStream sis) throws java.io.IOException 
      {
       System.out.println("begin to output the input file.");
      StringBuffer fileData = new StringBuffer(1000);
      BufferedReader reader = new BufferedReader(new InputStreamReader(sis));
      char[] buf = new char[1024];
      int numRead = 0;
      while ((numRead = reader.read(buf)) != -1) {
      String readData = String.valueOf(buf, 0, numRead);
      fileData.append(readData);
      buf = new char[1024];
      }
      reader.close();
      System.out.println(fileData.toString());
      }
}
程序很简单,就是把inputStream写到log里而已,在两台服务器上运行都正常,但是第三台服务器:ubuntu 6.04中,就会产生一个catalina_log.2009-09-22.txt的文件,文件内容如下:
2009-09-22 17:00:15 RequestDumperValve[Catalina]: REQUEST URI       =/treatcurlServlet
2009-09-22 17:00:15 RequestDumperValve[Catalina]:           authType=null
2009-09-22 17:00:15 RequestDumperValve[Catalina]:  characterEncoding=null
2009-09-22 17:00:15 RequestDumperValve[Catalina]:      contentLength=3208
2009-09-22 17:00:15 RequestDumperValve[Catalina]:        contentType=application/x-www-form-urlencoded
2009-09-22 17:00:15 RequestDumperValve[Catalina]:        contextPath=/tedetis
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             header=user-agent=curl/7.15.1 (x86_64-pc-linux-gnu) libcurl/7.15.1 OpenSSL/0.9.8a zlib/1.2.3 libidn/0.5.18
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             header=host=127.0.0.1:8080
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             header=accept=*/*
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             header=content-length=3208
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             header=content-type=application/x-www-form-urlencoded
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             header=expect=100-continue
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             locale=fr_FR
2009-09-22 17:00:15 RequestDumperValve[Catalina]:             method=POST
2009-09-22 17:00:16 RequestDumperValve[Catalina]:          parameter= hi in test of curl.
2009-09-22 16:58:28 RequestDumperValve[Catalina]:           pathInfo=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]:           protocol=HTTP/1.1
2009-09-22 16:58:28 RequestDumperValve[Catalina]:        queryString=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]:         remoteAddr=127.0.0.1
2009-09-22 16:58:28 RequestDumperValve[Catalina]:         remoteHost=127.0.0.1
2009-09-22 16:58:28 RequestDumperValve[Catalina]:         remoteUser=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]: requestedSessionId=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]:             scheme=http
2009-09-22 16:58:28 RequestDumperValve[Catalina]:         serverName=127.0.0.1
2009-09-22 16:58:28 RequestDumperValve[Catalina]:         serverPort=8080
2009-09-22 16:58:28 RequestDumperValve[Catalina]:        servletPath=/curl
2009-09-22 16:58:28 RequestDumperValve[Catalina]:           isSecure=false
2009-09-22 16:58:28 RequestDumperValve[Catalina]: ---------------------------------------------------------------
2009-09-22 16:58:28 RequestDumperValve[Catalina]: ---------------------------------------------------------------
2009-09-22 16:58:28 RequestDumperValve[Catalina]:           authType=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]:      contentLength=-1
2009-09-22 16:58:28 RequestDumperValve[Catalina]:        contentType=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]:            message=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]:         remoteUser=null
2009-09-22 16:58:28 RequestDumperValve[Catalina]:             status=200
假设我的filename.txt文件里面就只包含了hi in test of curl.这句话,
但是我的catalina.out里并没有输出这个,而只有前面开始输出的标志:“begin to output the input file”,说明inputstream对于这个servlet是空的。
希望达人能够解释一下这个的原因,因为在另外2太server上都是正确运行的,而在第三胎server上就这样了。