请教各位大侠们哈!我在做一个文件上传的东西,直接用servlet来实现,可是其中有一个问题真是把我搞晕了,就是无论前台页面怎么修改,等提交表单后,结果在servlet中还是不能获取到相应的表单内容的值,结果还是为空,我想难道是没有提交成功,或者在传送数据过程中数据丢失了?等等,想了很多,搞了好久,问题还是不能解决,恳请各位帮帮忙!谢谢!我还是一个java初学者,很多东西不明不白的。

解决方案 »

  1.   

    文件上传的东西,直接用servlet来实现?看看你得代码
      

  2.   

    你是单纯的用Servlet来实现的!那可能出现在名字不一致的问题,还是要看看你代码
      

  3.   

    先看下有没进入这个servlet?在servlet写个打印语句。然后在页面传个其他的参数看看,看能不能在servlet里收到。
      

  4.   

    你是不是用apache自带的上传组件上传附件的?就是<input type="file" />这种形式的。如果用这种形式上传,getParameter是获取不到表单中的参数的。要用fileItem.isFormField()来判断。你google下就行了。呵呵。
      

  5.   

    注意提交方式是 get 还是 post
      

  6.   

    楼主是使用得fileipload或smartupload吧,我以前遇到过
    包含file的form里需要加上这段 encType=multipart/form-data method=post
      

  7.   

    Commons FileUpload方式:
    1 首先在dispatcher-servlet.xml中声明一个MultipartResolver:
    <bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize">
    <value>50000000</value>
    </property>
    <property name="maxInMemorySize">
    <value>4096</value>
    </property>
    <property name="defaultEncoding">
    <value>GBK</value>
    </property>
    </bean>
    2  表单 
    <form action="upload" enctype="multipart/form-data"><input type="file" name="myFile" /><input type="submit" value="Upload! " /></form>3 // 转型为MultipartHttpRequest:    
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;    
            // 获得文件:    
            MultipartFile file = multipartRequest.getFile(" file ");    
            // 获得文件名:    
            String filename = file.getOriginalFilename();    
            // 获得输入流:    
            InputStream input = file.getInputStream();    
            // 写入文件    
       
            // 或者:    
            File source = new File(localfileName.toString());    
            multipartFile.transferTo(source);    
    仅供参考
      

  8.   

     MultipartFile file = multipartRequest.getFile(" file ");    
    <input type="file" name="myFile" /> 
    ?????????????
     MultipartFile file = multipartRequest.getFile(" file ");    
    是不是应该是
     MultipartFile file = multipartRequest.getFile("myFile");  
    很久没做过文件上传的东西了
      

  9.   

    新手容易犯得错误是:session没有getparameter方法,只有getAttribute方法。
    检查下。
      

  10.   

    有写<form>吗,嘿嘿,莫笑,偶初学的时候的确犯过这样的错误的
      

  11.   

    页面代码是:
    <html>
    <head>
    <title>文件处理</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type='text/javascript' src='../dwr/engine.js'></script>
    <script type='text/javascript' src='../dwr/util.js'></script>
    <script type="text/javascript" src="../dwr/interface/UploadFile.js"></script>
    <script type="text/javascript" src="../appjs/myfileupload.js"></script>
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body>
    <form action="../Myservlet" id="form1" name="form1" enctype="multipart/form-data" method='post'>
    <div>
    <ul>
    <li>
    文件上传
    </li>
    </ul>
    </div>
    <div>
    <input id="uploadfile" type="submit" value="上传">
    </div>
    <div>
    <input type="file" name="addfilename">
    </div>
    </form>
    </body>
    </html>
    然后后台servlet部分是:
    public class Myservlet extends HttpServlet{
        public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
         java.lang.String filename = request.getParameter("addfilename");
         ServletFileUpload uploadfile = new ServletFileUpload();//文件上传组件核心类
         uploadfile.setHeaderEncoding("utf-8");//将各个表单字段的描述头内容转换成字符串时所使用的字符集编码
    PrintWriter out = response.getWriter();
         if(ServletFileUpload.isMultipartContent(request)){
         try {
         //希望大家看看这里,问题是由这里引起的
         //问题是一运行到这里就出错,提示好像说什么空指针异常,所以我就想是不是这里request根本没有东西,
         //于是我就添加了上面的第一句程序进行检查果然没有东西

      List<FileItem> filelist = uploadfile.parseRequest(request);//解析form中的各个字段的数据
      for(int i=0;i<filelist.size();i++){
      FileItem file1 = filelist.get(i);
      if(!file1.isFormField()){//判断是不是一个普通的表单字段
      String fileallname = file1.getName();//文件上传时的路径及文件名
      String inputname = file1.getFieldName();//获取文件输入框的name属性值
      String filecontent = file1.getString();//获取文件内容
      String contenttype = file1.getContentType();//获取文件类型
    // 正则匹配,过滤路径取文件名
       String regExp = ".+\\\\(.+)$";
       Pattern p = Pattern.compile(regExp);
       Matcher m = p.matcher(fileallname);
    // 保存上传的文件到指定的目录
                            // 在下文中上传文件至数据库时,将对这里改写
       file1.write(new File("d:\\test\\"+m.group(1)));
                               //item.write(new File("d:\\" + m.group(1)));
                               out.print("上传成功!");
      }
      }
    } catch (FileUploadException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
         }
        }
        public void doPost(HttpServletRequest request,HttpServletResponse response) {
    try {
    this.doGet(request, response);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  12.   

    文件上传时 form 中必填 enctype="multipart/form-data" 属性,如果直接在servlet中获取,是不能获取到表单中的值的
      

  13.   

    麻烦你帮我看一下我上面的代码有什么问题吗?另外我有点疑问就是,为什么在servlet中就不能获取表单中的值呢?
      

  14.   

    http://zhangjunhd.blog.51cto.com/113473/18331
      

  15.   

    你把写在doGet方法中的代码换到doPost方法中去
    你传过来的post 对应的应该用doPost方法 ,你可以试试,不知道我说的对不对 有异议请提出来
      

  16.   

    应该这样写:
    DiskFileItemFactory dfif = new DiskFileItemFactory();   
    dfif.setRepository(new File("c:\\temp")); //设定存储临时文件的目录。 
      ServletFileUpload fileupload = new ServletFileUpload(dfif);   
      

  17.   

    无法获取form中的值的问题,
    给你个忠告,做上传,要先传输,再获取form中的参数值。
    另外,可以拼成串放在url的“?”后面也可以传过去。