Servlet3.0中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();
	}
	
}

 

你可能感兴趣的:(Servlet3.0 文件上传)