当前位置: 首页 > 知识库问答 >
问题:

在Servlet中获取表单值

龙宣
2023-03-14

我是servlet新手。我想做的是使用servlet将文件上传到我的服务器,同时我发送一个文本值,即在服务器端更改的文件名。问题是我使用ajax帖子将表单数据提交给servlet,但在我的servlet中,我从request.get参数中获取空值。

这是我的html;

$("#fileUp").html(  "<form enctype='multipart/form-data' id='uploadForm' action='" + url + "/PrjHRService/FileUpload'>"+
                        "<input name='file' id='file' type='file' size='50'>"+
                        "<input name='fname' type='text' >"+
                        "<input id='btnUpload' value='Upload' type='submit'>"+
                        //"<div id='imgLink'></div>"+
                        "</form>" );

这是我对服务器的jquery ajax调用;

$("#uploadForm").submit(function() {            
            var formData = new FormData($(this)[0]);
            $.ajax({
                   type: "POST",
                   url: $("#uploadForm").attr("action"),
                   data: formData, 
                   async: false,
                   success: function(data)
                   {
                       if(data.res === "true"){
                         jsi.showMsg("Uploaded Successfully");
                         $("#imgLink").html("Uploaded Successfully");
                       }else{
                         jsi.showMsg("Error Uploading");    
                       }
                   },
                   contentType: false,
                   processData: false
                 });

            return false; // avoid to execute the actual submit of the form.
        });

这就是我如何从servlet中的表单中获取值;在这里,您将看到一行字符串fileExt=request。getParameter(“fname”);我发现fileExt为null,这是我的问题。

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
      // Check that we have a file upload request
      isMultipart = ServletFileUpload.isMultipartContent(request);
      response.setContentType("application/json");
      String fileExt=request.getParameter("fname");
      java.io.PrintWriter out = response.getWriter( );
      if( !isMultipart ){

         JSONObject o=new JSONObject();
          try {
            o.put("res", "false");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          out.println(o.toString());

         return;
      }
      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);
      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);
      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );

      try{ 
      // Parse the request to get file items.
      List fileItems = upload.parseRequest(request);

      // Process the uploaded file items
      Iterator i = fileItems.iterator();
      while ( i.hasNext () ) 
      {
         FileItem fi = (FileItem)i.next();
         if ( !fi.isFormField () )  
         {
            // Get the uploaded file parameters
            String fieldName = fi.getFieldName();
            String fileName = fi.getName();
            //String[] parts = fileName.split(".");
            //fileName = parts[0] + "." + parts[1];
            String contentType = fi.getContentType();
            boolean isInMemory = fi.isInMemory();
            long sizeInBytes = fi.getSize();
            // Write the file
            if( fileName.lastIndexOf("\\") >= 0 ){
               file = new File( filePath + 
               fileName.substring( fileName.lastIndexOf("\\"))) ;
            }else{
               file = new File( filePath + 
               fileName.substring(fileName.lastIndexOf("\\")+1)) ;
            }
            fi.write( file ) ;
            JSONObject o=new JSONObject();
            o.put("res", "true");
            //out.println("Uploaded Filename: " + fileName + "<br>");
            out.println(o.toString());
            //out.println("Uploaded Successfully");
         }
      }
     /* out.println("</body>");
      out.println("</html>");*/
   }catch(Exception ex) {
       System.out.println(ex);
   }
   }

共有1个答案

阚吕恭
2023-03-14

如果要上传文件,

您必须记住,将POSTenctype="multipart/from-data"一起使用会将所有表单的参数添加到POST正文中,这与enctype="Application/x-www-form-urlencoded"不同,其中参数连接到请求URL(QUERY_STRING)。方法getParameter仅适用于通过URL发送的参数。因此,在您的情况下,您需要读取POST数据,解析它并找出fname的值。POST可能如下所示:

-----------------------------8022333619518
Content-Disposition: form-data; name="fname"

myfilename.txt
-----------------------------8022333619518
Content-Disposition: form-data; name="submit"

Send
-----------------------------8022333619518--

如果您手动将一些参数添加到URL中,则getParameter方法将找到它。

由于你没有上传任何文件(不是吗?)您可以将应用程序设置为使用getParameter,因为它将所有表单的输入添加到URL。但您的代码表明,您稍后将上载文件,因此它对文件内容无效。

当您从Apache使用ServletFileUpload时,您可以看到parseParameterMap方法,获取map,然后获取fname参数(它应该是列表中的第一个元素)作为FileItem并使用getString获取其内容。它应该是您正在寻找的:

Map<String, List<FileItem>> map = ServletFileUpload.parseParameterMap(request);
List<FileItem> list = map.get("fname");
if (list != null && list.size() >= 1) {
    FileItem item = list.get(0);
    System.out.println("And the winner is... " + item.getString);
}
else {
    System.out.println("Dammit! Still no luck!");
}

 类似资料:
  • 问题内容: 我的函数中有一个简单的表单,如下所示: 我应该在访问和字段中写些什么? 问题答案: 使用输入上的事件来更新组件的状态并在以下位置访问它: 工作提琴。 另外,阅读文档,有一整节专门讨论表单处理:表单 以前,您还可以使用React的双向数据绑定帮助器mixin来实现相同的功能,但是现在不建议使用它来设置值和更改处理程序(如上所述): 文档在这里:双向绑定帮助器。

  • 使用以下字段设计薪资类: •name:包含员工姓名的字符串•idNumber:表示员工ID号的int值•rate:包含员工时薪率的double值•hours:表示该员工工作时数的int值 类还应具有以下方法: 谢谢你的帮助...

  • 我正在尝试使用spring data JPA repository方法在数据库中插入4个表单字段name、age、location和address。当我将表单提交到操作时,控制器不会无法接收提交的值。在控制器操作中获取null。在这里,我尝试使用spring、spring boot和spring data JPA。下面是我的控制器, 我的形式是, 导入javax.persistence.*;

  • 问题内容: 我需要从表单获取数据。 我使用JavaScript创建表单: 那么我需要从输入字段中获取数据。 这是我的视图函数: 但我得到一个错误: 帮我从表格中获取数据。 问题答案: 从Flask的请求对象获取表单数据: 你还可以设置默认值以避免400错误,如下所示:

  • 我想在窗体的操作重定向它之前从窗体中获取值。例如,在这个表单中,我想抓取“text_one”并将其发送到数据库,然后再将其重定向到google。我还想在谷歌上看到“text_one”。我该怎么办?

  • 问题内容: 如何获得HTML表单的值以传递给JavaScript? 它是否正确?我的脚本有两个参数,一个来自文本框,一个来自下拉框。 问题答案: HTML: JS: