Java 将jsp多部分/表单数据表单中的输入值发送到servlet

Java 将jsp多部分/表单数据表单中的输入值发送到servlet,java,forms,jsp,servlets,Java,Forms,Jsp,Servlets,我有一个包含表单的JSP <form action="upload" method="post" enctype="multipart/form-data"> <fieldset> <input name="nom" class="input-xlarge focused" id="nom" type="text" value=""> <input name="date"

我有一个包含表单的JSP

        <form action="upload" method="post" enctype="multipart/form-data">
        <fieldset>
            <input name="nom" class="input-xlarge focused" id="nom" type="text" value=""> 
            <input name="date" class="input-xlarge focused" id="date" type="text" value="">
            <input type="file" name="file" /> 
            <button type="submit" class="btn btn-primary">Envoi</button>
        </fieldset>
    </form>

恩沃伊
其中包含两个字段(nom和date),并要求将文件上载到服务器上

在servlet方面,我有以下内容:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    String UPLOAD_DIRECTORY = request.getServletContext().getRealPath("/")+"imgs/";
    //process only if its multipart content
    if(ServletFileUpload.isMultipartContent(request)){

        String nom = request.getParameter("nom");
        String date = request.getParameter("date");
        log.debug("upload parameters: "+nom+" "+date);


        try {
            List<FileItem> multiparts = new ServletFileUpload(
                                     new DiskFileItemFactory()).parseRequest(request);

            for(FileItem item : multiparts){
                if(!item.isFormField()){
                    String name = new File(item.getName()).getName();
                    item.write( new File(UPLOAD_DIRECTORY + File.separator + name));
                }
            }

           //File uploaded successfully
           request.setAttribute("message", "File Uploaded Successfully");
           log.debug("File updated successfully");
        } catch (Exception ex) {
           request.setAttribute("message", "File Upload Failed due to " + ex);
           log.debug("File upload failed: "+ex);
        }          

    }else{
        request.setAttribute("message",
                             "Sorry this Servlet only handles file upload request");
        log.debug("file upload only !");
    }

    //request.getRequestDispatcher("/result.jsp").forward(request, response);

}
protectedvoiddopost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
字符串UPLOAD_DIRECTORY=request.getServletContext().getRealPath(“/”)+“imgs/”;
//仅当其多部分内容
if(ServletFileUpload.isMultipartContent(请求)){
字符串nom=request.getParameter(“nom”);
字符串日期=request.getParameter(“日期”);
log.debug(“上传参数:+nom+”+date);
试一试{
List multiparts=新建ServletFileUpload(
新建DiskFileItemFactory()).parseRequest(请求);
用于(文件项:多部分){
如果(!item.isFormField()){
字符串名称=新文件(item.getName()).getName();
item.write(新文件(UPLOAD_DIRECTORY+File.separator+name));
}
}
//文件上载成功
request.setAttribute(“消息”,“文件上传成功”);
调试(“文件更新成功”);
}捕获(例外情况除外){
request.setAttribute(“消息”,“文件上载因“+ex”而失败);
log.debug(“文件上传失败:”+ex);
}          
}否则{
request.setAttribute(“消息”,
“抱歉,此Servlet仅处理文件上载请求”);
调试(“仅文件上传!”);
}
//request.getRequestDispatcher(“/result.jsp”).forward(请求,响应);
}
文件上载工作正常,但我无法使用request.getParameter检索我的两个参数(nom和date)

我可以检索多部分/表单数据中的参数吗?如何才能做到这一点?

在使用
enctype=“multipart/form data”
时,您不能通过使用
request.getParameter(“nom”)直接获取参数

在这种情况下,表单字段不能作为请求的参数使用,它们包含在流中,所以您需要从流中获取它们。 一种可能的方法是使用commons fileupload。这是官方的示例代码(请参阅“处理上传的项目”一节)

使用
enctype=“multipart/form data”
时,不能通过使用
request.getParameter(“nom”)直接获取参数

在这种情况下,表单字段不能作为请求的参数使用,它们包含在流中,所以您需要从流中获取它们。 一种可能的方法是使用commons fileupload。这是官方的示例代码(请参阅“处理上传的项目”一节)

// Process the uploaded items
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
    FileItem item = iter.next();

    if (item.isFormField()) {
        processFormField(item);
    } else {
        processUploadedFile(item);
    }
}
 // Process a regular form field if (item.isFormField()) {
     String name = item.getFieldName();
     String value = item.getString();
     ... }