java代码
servlet包
package servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import util.FileUtil;
public class RegistServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("registServlet");
InputStream is = null;
FileOutputStream fos = null;
if(!ServletFileUpload.isMultipartContent(req)) {
throw new RuntimeException("不是Multipart请求");
}else {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
List<FileItem> items = sfu.parseRequest(req);
for(FileItem item : items) {
if(item.isFormField()) {
String key = item.getFieldName();
String value = item.getString();
System.out.println("key:"+key+",value:"+value);
}else {
String fileName = item.getName();
System.out.println("fileName:"+fileName);
is = item.getInputStream();
String url = req.getServletContext().getRealPath("/file/a/b/c");
System.out.println("url:"+url);
fos = new FileOutputStream(FileUtil.createFile(url, fileName));
byte[] bytes = new byte[1024];
int len = 0;
while((len=is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} finally {
if(is != null) {
is.close();
}
if(fos != null) {
fos.close();
}
}
}
}
}
package servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ToRegistServlet extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("WEB-INF/jsp/regist.jsp").forward(req, resp);
}
}
filter包
package filter;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyFilter extends HttpFilter{
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
request.getServletContext().setAttribute("basePath", basePath);
super.doFilter(request, response, chain);
}
}
util包
package util;
import java.io.File;
public class FileUtil {
public static File createFile(String parentUrl, String childUrl) {
File file = new File(parentUrl);
if (!file.exists()) {
file.mkdirs();
}
File result = new File(parentUrl, childUrl);
return result;
}
}
html代码
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户注册</title>
</head>
<body>
<form action="<%=application.getAttribute("basePath") %>/regist.do" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
上传文件:<input type="file" name="registfile"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
web.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>fileloade</display-name>
<servlet>
<servlet-name>registServlet</servlet-name>
<servlet-class>servlet.RegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>registServlet</servlet-name>
<url-pattern>/regist.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>toRegisterServlet</servlet-name>
<servlet-class>servlet.ToRegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>toRegisterServlet</servlet-name>
<url-pattern>/toregist.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>myFilter</filter-name>
<filter-class>filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>