准备jar包:commons-fileupload-1.2.2.jar

 commons-io-2.0.1.jar

在jsp页面form表单属性必须是:enctype="multipart/form-data" method="post",

在servlet中代码为

protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        try {
            String storePath = getServletContext().getRealPath("files");
            DiskFileItemFactory factory = new DiskFileItemFactory();// 设置环境
            boolean isMulti = ServletFileUpload.isMultipartContent(request);// 判断form是否是enctype="multipart/form-data"
            if (!isMulti) {
                System.out.println("不能上传文件!");
                return;
            }
            ServletFileUpload upload = new ServletFileUpload(factory);// 核心类
            List<FileItem> lists = upload.parseRequest(request);
            for (FileItem fileItem : lists) {//遍历form字段
                if (fileItem.isFormField()) {
                    // 普通字段
                    String fileName = fileItem.getFieldName();
                    String value = fileItem.getString();
                    System.out.println(fileName + "==" + value);
                } else {
                    // 上传字段
                    InputStream in = fileItem.getInputStream();
                    String fileName = fileItem.getName();
                    fileName = fileName
                            .substring(fileName.lastIndexOf("\\") + 1);// 防止在某些浏览器上取出的fileName是文件的全路径,只取文件名
                    String storeFile = storePath + "\\" + fileName;
                    OutputStream os = new FileOutputStream(storeFile);
                    byte[] b = new byte[1024];
                    int len = -1;
                    while ((len = in.read()) != -1) {
                        os.write(b, 0, len);
                    }
                    os.close();
                    in.close();
                }
            }
        } catch (FileUploadException e) {
            throw new RuntimeException("服务器繁忙...");
        }
    }