JSP源代码:
<%@page contentType="text/html;charset=gb2312"%>
<form action="/fileserver/FileServiceServet" method="POST">
<div align="left">
<input type='text' name='var1'><br>
<input type='text' name='var2'><br>
<input type='text' name='var3'><br>
<input type="submit" value="开始发送">
<input type="reset" value="重 设">
</div>
</form>JSP提交一个Sevlet执行,
Servlet源代码:public class FileServiceServet extends HttpServlet {
/**
 * post service
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
int length = request.getContentLength();
InputStream input = request.getInputStream();
// request binary data
byte[] data = new byte[] {};
if (length != 0 && length != -1) {
data = new byte[length];
int i = 0;
int c = 0;
while ((c = input.read()) != -1) {
data[i] = (byte) c;
i++;
}
if (i != length) {
String message = "There are " + length
+ "bytes available in inputstream,but " + i
+ " bytes read actually!";
// baseBean.base_log4j_file.error(message);
this.writeResponse(response, message.getBytes());
return;
}
}
System.out.println(request.getParameter("var1"));
System.out.println(request.getParameter("var2"));

String s = new String(data);

System.out.println(s);
} 假设我在JSP页面的表单中的每个输入框中输入3,4,5,
可发现Servvet输出如下:
null
null
var1=3&var2=4&var3=5,这我就纳闷了,按理说应该是输出
3
4
var1=3&var2=4&var3=5
才对的呀?为什么var1,var2的值变成null了呢?
真是纳闷,

解决方案 »

  1.   

    因为你已经getInputStream了,Servlet中不可以重复调用这个方法两次,所以后续的getParameter会失败并返回null
    其实在getInputStream后,Servlet服务器就认为你自己负责流的解析了,不再需要服务器帮助你解析
      

  2.   

    但是还有一个问题,
    对于输入流的解析,到底谁解析,什么时候解析,Servlet是如何做出决定的呢?
      

  3.   

    你可以这样看,你首次调用getParameter时,服务器判断是否已经曾经getInputStream,如果没有则服务器去getInputStream并解析之,如果已经获取过则直接返回null
      

  4.   

    http://community.csdn.net/Expert/topic/5138/5138867.xml?temp=.8484003