<FORM name="form1"  METHOD="POST" ACTION="Servlet" ENCTYPE="multipart/form-data">
  <input type="hidden" name="name" value="中文" >
</FORM>
为了上传文件,form属性中写了ENCTYPE="multipart/form-data"。可是在Servlet中 request.getParameter("name"); 无法取得隐藏表单name的值,取得的是null.如果把form属性中的ENCTYPE="multipart/form-data"去掉就可以,但是为了传文件还不能去掉.如果把form的提交方式改为ACTION="Servlet?name=<%=name%>"也可以取到值,但是表单实在太多,都用Servlet?name=<%=name%>"这种方式的话,恐怕太麻烦,也实在太多,更不灵活!请那位高手指点指点!!

解决方案 »

  1.   

    这是在SunOne服务器上在iplanet服务器上就没有这种问题。
      

  2.   

    用 SmartUpload ,他给封装好了,否则就自己在 request.getInputStream() 里面解析。
      

  3.   

    用JSPSmartUpload或common-fileupload来做在表单里加了
    ENCTYPE="multipart/form-data"直接用request.getParameter("name"); 是取不到值的
      

  4.   

    form属性中写了ENCTYPE="multipart/form-data"之后
    在Servlet中不能使用 request.getParameter("name");    boolean isMultipart = FileUpload.isMultipartContent(request);
        // Create a new file upload handlerupload.setSizeMax(100 * 1048576);
          upload.setRepositoryPath(".");
          List items = upload.parseRequest(request);
          Iterator iter = items.iterator();
          while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();
            //文本域
            if (item.isFormField()) {
              String name = item.getFieldName();
              if (item.getFieldName().equals("ID")){
                ID = item.getString();
              }
    }}
      

  5.   

    DiskFileUpload upload = new DiskFileUpload();
      

  6.   

    请问3楼的,用SmartUpload 封装 是指怎么封装?
    还有楼上的,问一下
     if (item.isFormField()) {
              String name = item.getFieldName();
              if (item.getFieldName().equals("ID")){
                ID = item.getString();
              }
    这段代码中的getFieldName这个方法是什么意思!
      

  7.   

    smartupload 中已经封装好了新的request,也就是说原来的文件上传数据是直接取不到的,在smartupload中经过封装后使用它的request就可以了。
      

  8.   

    请问FileUpload和DiskFileUpload 是在那个包里面?
      

  9.   

    smartupload 要怎么封装呢?
      

  10.   

    在表单里加了
    ENCTYPE="multipart/form-data"直接用request.getParameter("name"); 是取不到值的给楼猪一个上传文件的servlet示例
    /**
    * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
    */
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    resp.setContentType(CONTENT_TYPE);
    req.setCharacterEncoding("GBK");
    PrintWriter out = resp.getWriter(); HttpSession session = req.getSession();
    List list = null ;
    String error = "" ;
    try {

    String category=(String)session.getAttribute("category");
     
    filePath = getServletContext().getRealPath("/WEB-INF/");

    //文件上传
    loadFile(filePath, req, resp);
      }catch(Exception e){
    error = e.getMessage();
    logger.error(error);
    e.printStackTrace();
    } if(error.equals("") && list.size()>0){
    error = "部分人员学号重复或不存在" ;
    }
    req.setAttribute("error",error);
    req.setAttribute("result",list);
    getServletContext().getRequestDispatcher("result.jsp").forward(req , resp); }
     
    //文件上传
    public void loadFile(
    String filePath,
    HttpServletRequest req,
    HttpServletResponse resp)
    throws Exception {
    DiskFileUpload fu = new DiskFileUpload();
    fu.setSizeMax(10000000); //设置上传文件最大长度 10M bytes
    fu.setSizeThreshold(4096);
    // maximum size that will be stored in memory
    boolean br = myCreateDir(filePath);
    fu.setRepositoryPath(filePath);
    List fileItems = fu.parseRequest(req);
    Iterator i = fileItems.iterator();
    FileItem fi = null;
    while (i.hasNext()) {
    fi = (FileItem) i.next();
    if (fi.getName() == null) {
    break;
    }
    fileName = getFileName(fi.getName());
    File f = new File(filePath + fileName);
    fi.write(f);
    }
    }
    //创建目录
    private boolean myCreateDir(String dirName) {
    try {
    File f = new File(dirName); if (f.exists()) {
    return true;
    } String parentDir = f.getParent(); if (parentDir == null) {
    return false;
    } File pf = new File(parentDir); if (pf.exists()) {
    return f.mkdir();
    } else if (myCreateDir(parentDir)) {
    return f.mkdir();
    } else {
    return false;
    }
    } catch (Exception e) {
    System.err.println("创建目录时出现错误::  "+e.getMessage());
    e.printStackTrace();
    return false;
    }
    }
    //获取文件名
    private String getFileName(String Path) {
    String str = Path;
    String ret = "";
    if (Path == null)
    return "";
    if (str.indexOf("\\") > 0) {
    int Index = str.lastIndexOf("\\");
    ret = str.substring(Index + 1);
    }
    return (ret);
    }
      

  11.   

    问题解决了
    SmartUpload mySmartUpload = new SmartUpload();
    mySmartUpload.initialize(config, request, response);
    mySmartUpload.upload();
    name = mySmartUpload.getRequest().getParameter("name");原来这样就可以,,哎,我实在太笨了