Servlet--上传文件

UploadServlet.java

package sadhu;
import javax.servlet.annotation.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;

@WebServlet(name="upload",urlPatterns={"/upload"})
@MultipartConfig
public class UploadServlet extends HttpServlet
{
	public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
	{
		response.setContentType("text/html;charset=GBK");
		PrintWriter out = response.getWriter();
		//获取普通请求参数
		String fileName = request.getParameter("name");
		//获取文件上传域
		Part part = request.getPart("file");
		//获取上传文件的类型
		out.println("上传文件的类型为:" + part.getContentType()+"<br/>");
		//获取上传文件的大小
		out.println("上传文件的大小为:" + part.getSize() + "<br/>");
		//获取该文件的上传域的Header Name
		Collection<String> headerNames = part.getHeaderNames();
		//遍历文件上传域的Header Name、Value
		for(String headerName : headerNames)
		{
			out.println(headerName + "---->" + part.getHeader(headerName) + "<br/>");
		}
		//将上传的文件写入服务器
		part.write(getServletContext().getRealPath("/uploadFiles")+"/"+fileName);
		/*
		上面的Servlet使用了@MultipartConfig修饰。也可以在web.xml中用multipart-config子元素来达到同样的效果。
		*/
	}
}

index.jsp

<%@ page contentType="text/html;charset=GBK" language="java" errorPage=""%>
<!DOCTYPE html>
<html>
<head>
	<title>上传文件的练习</title>
</head>
<body>
	<!-- form表单的enctype有三个属性:
	application/x-www-form-urlencoded:这是默认的编码方式,它只处理表单域里的value属性的值,采用这种编码方式的表单会将表单域里的值处理成url编码方式。
	multipart/form-data:这种方式将会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定的文件的内容也封装到请求的参数里。
	text/plain:这种编码方式表单的action属性为mailto:url的形式是比较方便,这种方式主要适用于直接通过表单发送邮件的方式。
	如果要上传文件,采用默认的enctype(编码类型)的话讲只能获取到上传文件域的字符串,也就是客户机的绝对路径,服务器是不能访问客户机的文件系统的。
	-->
	<form method="post" action="upload" enctype="multipart/form-data">
		文件名称:<input type="text" id="name" name="name" /><br/>
		选择文件:<input type="file" id="file" name="file" /><br/>
		<input type="submit" value="上传" /><br/>
	</form>
</body>
</html>

web.xml

<?xml version="1.0" encoding="utf-8" ?>
<web-app version="3.1" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"> 
  <welcome-file-list>
	<welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

用javac命令把源文件 编译到字节码文件(classes)文件夹中,不要放在默认的包中。

然后运行后就能上传文件到自定义的Setvlet类中进行处理了。

需要在根目录创建一个存图片的文件夹。

ServletContext提供了动态的添加Servlet、Filter、Listener的方法。

你可能感兴趣的:(Servlet--上传文件)