parameter、Part的区别 - HttpServletRequest

111 阅读1分钟

html页面展示

  html页面的代码

<body>
     <form action="FileServlet" method="post" 
enctype="multipart/form-data">
           <input type="file" name="newFile"/>
           <br><br>
           <input type="text" name="name" value="lrc">
           <br><br>
           <input type="submit" name="上传" value="上传文件"/>
     </form>
</body>


页面效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vMXQER0W-1576003471109)(en-resource://database/12605:1)]

servlet请求处理

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    System.out.println("\nparameter方式获取参数---------------------------");		
    Enumeration<String> enums= req.getParameterNames();		
    while(enums.hasMoreElements()) {
        String paraName = enums.nextElement();
        String paraValue = req.getParameter(paraName);
        System.out.println(paraName + ": " + paraValue);
    }


    System.out.println("\npart方式获取参数---------------------------");		
    Collection<Part> parts = req.getParts();
    for(Part part : parts) {
        String partName = part.getName();
        String partValue = req.getParameter(partName);
        System.out.println(partName + ": " + partValue);
    }


    System.out.println("\ntext类型标头part-------------------------------------");		
    Part part2 = req.getPart("name");
    System.out.println(part2.getName());
    System.out.println(part2.getContentType());

    Collection<String> headerNames2 = part2.getHeaderNames();
    for(String headName : headerNames2) {
        Collection<String> headValues = part2.getHeaders(headName); 
        System.out.println(headName + ": " + headValues);
    }


    System.out.println("\nfile文件类型标头part---------------------------------");
    Part part = req.getPart("newFile");
    System.out.println(part.getName());
    System.out.println(part.getContentType());
    Collection<String> headerNames = part.getHeaderNames();
    for(String headName : headerNames) {
        Collection<String> headValues = part.getHeaders(headName); 
        System.out.println(headName + ": " + headValues);
    }

}

当文件上传时,控制台的打印情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oh9XFQ2D-1576003471127)(en-resource://database/12607:1)]

结论

  1. Part能获取所有的请求参数的参数名,而Parameter只能获取非文件类型的参数名
  2. Part不能获得普通参数的参数值,只能从 getParameter(String) 获取参数值
  3. 想要上传文件到服务器,必须使用Part获得二进制的输入流
  4. Part能获得上传文件的文件大小、文件类型