Servlet 3.0 新特性 Part

312 阅读1分钟

Servlet 3.0 改进了部分API,这种改进很好地简化了Java Web开发。其中包括HttpServletRequest 增加了对文件上传的支持。

HttpServletRequest 提供了如下两个方法来处理文件上传:

  1. Part getPart(String name); 根据 name 来获取文件上传域
  2. Collection getParts(); 获取所有的文件上传域  

构造上传文件的表单

<form action="uploadServlet" method="post" enctype="multipart/form-data">
    上传文件:<input type="file" name="file"/><br/>
    文件描述:<input type="text" name="desc"/>
    <input type="submit"/>
</form>

 

使用方式

在需要处理文件上传的 Servlet 进行 @WebServlet + @MultipartConfig 注解

@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
}

 

可以通过 javax.servlet.http.HttpServletRequest.getPart(String name) 方法获得 Part 对象

 

javax.servlet.http.Part 接口方法:

方法作用
InputStream getInputStream() throws IOException;获得上传的输入流
String getContentType();获得 multipart 表单的字段值 content-type
String getName();获取 multipart 表单的字段名
String getSubmittedFileName();如果该 part 是文件,返回文件名;否则为 null
long getSize();获得 part 的大小
void write(String fileName) throws IOException;写文件
void delete() throws IOException;
String getHeader(String name);获得指定头的值
Collection getHeaders(String name);获得头的全部值
Collection getHeaderNames();获得全部的头名称

注意:

getSubmittedFileName 方法在 IE 10 测试的时候可能无法正确获取文件名,解决方式:

Internet 选项 > 安全 > 自定义级别 > 其他 > 禁用“将文件上传到服务器时包含本地目录路径”