通过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上就这样了。
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上就这样了。
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
不知道为什么他就把所有的http申请都写到log文件里去了而我的servlet什么都收不到了,不知道是哪里去config这个东西让他把所有的stream都直接转走了。