Servlet3.0还有一个改变是改进了部分API,这种改进很好的简化了的了JAVA WEB的开发,其中一个改进就是HttpServletRequest增加了进文件上传的支持。 HttpServletRequest提供了如下两个方法来处理文
Servlet3.0还有一个改变是改进了部分API,这种改进很好的简化了的了JAVA WEB的开发,其中一个改进就是HttpServletRequest增加了进文件上传的支持。
HttpServletRequest提供了如下两个方法来处理文件上传
1、Part getPart(String name) :根据文件名来获取文件上传域;
2、Collection<Part> getParts():获取所有的文件上传域;
每个Part对象对应一个文件上传域,该对象提供了大量的方法来访问上传文件的文件类型、大小、输入流等,并提供一个write(String file)方法将文件文件写入服务器磁盘
上传文件一定要为表单设置enctype属性为multipart/form-data:表示以二进制流的方式处理表单
文件上传页面upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
文件名:<input type="text" id="name" name="name"/><br/>
请选择文件:<input type="file" name="file"><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
UploadServlet.java
使用Servlet3.0特性,使用注解@WebServlet与@MultipartConfig(处理文件上传)
package aniyo.upload.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
* Servlet 3.0增加对文件上传的支持
* @author aniyo
* blog:http://aniyo.iteye.com
*
*/
@WebServlet(name="upload",urlPatterns={"/upload"})
@MultipartConfig
public class UploadServlet extends HttpServlet{
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
PrintWriter out = response.getWriter();
//fileName用于测试在界面上自己随便输入的一个名字,自己可以根据时间或其他规则来命名
String fileName = request.getParameter("name");
//获取文件上传域
Part part = request.getPart("file");
out.println("上传文件的类型为:"+part.getContentType()+"<br/>");
out.println("上传文件的大小为:"+part.getSize());
//获取该文件的上传域
Collection<String> headerNames = part.getHeaderNames();
for(String headerName : headerNames){
out.println(headerName+"--->"+part.getHeader(headerName)+"<br/>");
}
//将上传的文件写入服务器
part.write(getServletContext().getRealPath("/uploadFiles"+File.separator+fileName));
}
/* (non-Javadoc)
* @see javax.servlet.GenericServlet#destroy()
*/
@Override
public void destroy() {
super.destroy();
}
/* (non-Javadoc)
* @see javax.servlet.GenericServlet#init()
*/
@Override
public void init() throws ServletException {
super.init();
}
}