第一次是在过滤器中执行  能获取里面的参数
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload df = new ServletFileUpload(factory);
List file=null;
FileItem ff = null;
String bb=null;

try {
file = df.parseRequest(request);
} catch (FileUploadException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Iterator iter = file.iterator();
while (iter.hasNext()) {}
接着进入servlet 和上同样的代码 但iter.hasNext()却变为了false  这是为什么
我这产生的是新对象啊

解决方案 »

  1.   

    你说组件使用了两次?
    为什么要使用两次,不明白?
    你的第一次的iter已经到记录末尾了
    第二次使用当然为false
      

  2.   

    file = df.parseRequest(request);
    可df是产生的新对象啊  那么 Iterator iter 也应该是新的集合
      

  3.   

    第一次的iter已经循环到结尾了第二次使用当然为false了!!
      

  4.   

    我问的是 在filter和一个servlet中有上面代码同样的拷贝  这servlet里面的iter与filter页的iter的hashcode是不一样 的  filter页确实是取到了最后一个 所以没了 可我这个servlet又是一个iter 为什么却获取不到值
      

  5.   

    刚刚我测试了            System.out.println(factory);
    System.out.println(df);
    System.out.println(file);
    System.out.println(iter); 在filter中是org.apache.commons.fileupload.disk.DiskFileItemFactory@1973732org.apache.commons.fileupload.servlet.ServletFileUpload@a8e5ac[name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000000.tmp, size=9bytes, isFormField=true, FieldName=hidden1, name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000001.tmp, size=3bytes, isFormField=true, FieldName=name, name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000002.tmp, size=3bytes, isFormField=true, FieldName=password, name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000003.tmp, size=2bytes, isFormField=true, FieldName=password1, name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000004.tmp, size=2bytes, isFormField=true, FieldName=email, name=Winter.jpg, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000005.tmp, size=105542bytes, isFormField=false, FieldName=file, name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000006.tmp, size=2bytes, isFormField=true, FieldName=question, name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997[code=Java]e_12111e23c35__7fef_00000007.tmp, size=2bytes, isFormField=true, FieldName=answer, name=null, StoreLocation=C:\apache-tomcat-6.0.18\temp\upload_23d6997e_12111e23c35__7fef_00000008.tmp, size=6bytes, isFormField=true, FieldName=button]java.util.AbstractList$Itr@7e86b8[/code]在servlet中是 file是空的  难道执行了df.parseRequest(request); 这句话后 就直接把数据删了 
    可我查了源代码没见有删的地方啊?
    org.apache.commons.fileupload.disk.DiskFileItemFactory@f3bed9org.apache.commons.fileupload.servlet.ServletFileUpload@76a247[]
    java.util.AbstractList$Itr@980461
      

  6.   

    会不会file = df.parseRequest(request);
    他在源码下先判断
    如果有实例的话
    就不重新创建了