1.index.jsp
<a href="FileupLoad/upLoad.jsp">文件的上传</a>
<a href="queryAllServlet">文件的下载</a>
2.文件的上传
将文件上传到文件夹,该文件夹路径为发布到服务器的WEB-INF目录下的files目录,文件的路径等信息储存进数据库
2.0.在WEB-INF目录下的建立files目录,文件上传到该目录
2.1.FileupLoad目录下的upLoad.jsp
<%--
Created by IntelliJ IDEA.
User: H
Date: 2019/7/23
Time: 12:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>upLoad</title>
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
var i = 2;
$("#addFile").click(function () {
$(this).parent().parent().before("<tr class='file'><td>File" +
i + ":</td><td><input type='file' name='file" +
i + "'></td></tr><tr class='desc'><td>desc" +
i + ":</td><td><input type='text' name='desc" +
i + "'\"><button class='delete'>删除</button></td></tr>")
$(".delete").click(function () {
var $tr = $(this).parent().parent();
$tr.prev("tr").remove();
$tr.remove();
$(".file").each(function (index) {
$(this).find("td:first").text("File"+(index+1));
$(this).find("td:last input").attr("name","file"+(index+1));
})
$(".desc").each(function (index) {
$(this).find("td:first").text("desc"+(index+1));
$(this).find("td:last input").attr("name","desc"+(index+1));
})
return false;
})
i++;
return false;
})
});
</script>
</head>
<body>
<form action="../upLoadServlet" method="post" enctype="multipart/form-data">
<font color="red">${requestScope.message}</font>
<table>
<tr class="file">
<td>File1:</td>
<td><input type="file" name="file1"></td>
</tr>
<tr class="desc">
<td>Desc1:</td>
<td><input type="text" name="desc1"></td>
</tr>
<tr>
<td><input type="submit" value="Submit"></td>
<td>
<button id="addFile">新增一个附件</button>
</td>
</tr>
</table>
</form>
</body>
</html>
2.2.连接数据库
src目录下的c3p0-config.xml
<c3p0-config>
<!--配置连接池mysql-->
<named-config name="mvcapp">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/FileUpload</property>
<property name="user">root</property>
<property name="password">qq2694200519</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
jdbcUtil
package com.zx.fileUpLoad.c3po;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class jdbcUtil {
private static DataSource dataSource=null;
static {
dataSource=new ComboPooledDataSource("mvcapp");
}
/**
* 获取数据库连接
* @return
*/
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void realseConnection(Connection connection){
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
System.out.println("关闭数据库连接失败");
}
System.out.println("关闭数据库连接成功");
}
}
}
DAO
package com.zx.fileUpLoad.DAO;
import com.zx.fileUpLoad.c3po.jdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
public class DAO<T> {
public Class<T>clazz;
private QueryRunner queryRunner=new QueryRunner();
public DAO(){
Type type=getClass().getGenericSuperclass();
if(type instanceof ParameterizedType){
ParameterizedType parameterizedType=(ParameterizedType)type;
Type[]types=parameterizedType.getActualTypeArguments();
if(types!=null&&types.length>0){
clazz=(Class<T>)types[0];
}
}
}
public List<T>getForList(String sql,Object...args){
Connection connection=jdbcUtil.getConnection();
try {
System.out.println(clazz);
return queryRunner.query(connection,sql,new BeanListHandler<>(clazz),args);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public T get(String sql,Object...args){
Connection connection=jdbcUtil.getConnection();
try {
return queryRunner.query(connection,sql,new BeanHandler<>(clazz),args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
jdbcUtil.realseConnection(connection);
}
return null;
}
public <E>E getValue(String sql,Object...args){
Connection connection=null;
try {
connection=jdbcUtil.getConnection();
return (E)queryRunner.query(connection,sql,new ScalarHandler(),args);
} catch (Exception e) {
e.printStackTrace();
}finally {
jdbcUtil.realseConnection(connection);
}
return null;
}
public void Updata(String sql,Object...args){
Connection connection=jdbcUtil.getConnection();
try {
queryRunner.update(connection,sql,args);
} catch (SQLException e) {
e.printStackTrace();
}finally {
jdbcUtil.realseConnection(connection);
}
}
}
FilrUpLoadBeanDAO
package com.zx.fileUpLoad.DAO;
import com.zx.fileUpLoad.doMain.FilrUpLoadBean;
import java.util.List;
public interface FilrUpLoadBeanDAO {
public void sava(List<FilrUpLoadBean> filrUpLoadBeans);
public List<FilrUpLoadBean> getAll();
public FilrUpLoadBeanDAO get(int id);
public void Delete(int id);
}
impFilrUpLoadBeanDAO
package com.zx.fileUpLoad.imple;
import com.zx.fileUpLoad.DAO.DAO;
import com.zx.fileUpLoad.DAO.FilrUpLoadBeanDAO;
import com.zx.fileUpLoad.doMain.FilrUpLoadBean;
import java.util.List;
public class impFilrUpLoadBeanDAO extends DAO<FilrUpLoadBean> implements FilrUpLoadBeanDAO {
@Override
public void sava(List<FilrUpLoadBean> filrUpLoadBeans) {
String sql = "INSERT INTO Filruploadbean(fileName,filePath,fileDesc) VALUES(?,?,?)";
for (FilrUpLoadBean filr : filrUpLoadBeans) {
Updata(sql, filr.getFileName(), filr.getFilePath(), filr.getFileDesc());
}
}
@Override
public List<FilrUpLoadBean> getAll() {
String sql = "SELECT*FROM Filruploadbean";
return getForList(sql);
}
@Override
public FilrUpLoadBeanDAO get(int id) {
String sql = "SELECT*FROM Filruploadbean WHERE id=?";
return (FilrUpLoadBeanDAO) get(sql, id);
}
@Override
public void Delete(int id) {
String sql = "DELETE FROM Filruploadbean WHERE id=?";
Updata(sql,id);
}
}
FilrUpLoadBean
package com.zx.fileUpLoad.doMain;
public class FilrUpLoadBean {
private int id;
private String fileName;
private String filePath;
private String fileDesc;
public FilrUpLoadBean() {
}
public FilrUpLoadBean(String fileName, String filePath, String fileDesc) {
this.fileName = fileName;
this.filePath = filePath;
this.fileDesc = fileDesc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getFileDesc() {
return fileDesc;
}
public void setFileDesc(String fileDesc) {
this.fileDesc = fileDesc;
}
@Override
public String toString() {
return "FilrUpLoadBean{" +
"id='" + id + '\'' +
", fileName='" + fileName + '\'' +
", filePath='" + filePath + '\'' +
", fileDesc='" + fileDesc + '\'' +
'}';
}
}
2.3.用配置文件限制能上传文件的扩展名等信息
src下的upload.properties
exts=pptx,docx,doc,java,mp4
file.max.size=1048576
total.file.max.size=5242880
FileUpLoadProperties
package com.zx.fileUpLoad.doMain;
import java.util.HashMap;
import java.util.Map;
public class FileUpLoadProperties {
private FileUpLoadProperties(){}
private Map<String,String>propertiess=new HashMap<>();
private static FileUpLoadProperties instances=new FileUpLoadProperties();
public static FileUpLoadProperties getInstances(){
return instances;
}
public String getProperties(String key) {
return propertiess.get(key);
}
public void putProperties(String key,String value) {
this.propertiess .put(key,value);
}
}
监听器ReadPropertiesFile
package com.zx.fileUpLoad.Listener;
import com.zx.fileUpLoad.doMain.FileUpLoadProperties;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;
public class ReadPropertiesFile implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
InputStream in = getClass().getClassLoader().getResourceAsStream("upload.properties");
Properties properties = new Properties();
try {
properties.load(in);
for (Map.Entry<Object, Object> pro : properties.entrySet()) {
String propertiesName = (String) pro.getKey();
String propertiesValue = (String) pro.getValue();
System.out.println(propertiesName);
System.out.println(propertiesValue);
FileUpLoadProperties.getInstances().putProperties(propertiesName, propertiesValue);
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
若扩展名不合法所写的异常类
InvaildExtNameException
package com.zx.fileUpLoad.Exception;
public class InvaildExtNameException extends RuntimeException {
public InvaildExtNameException(String message) {
super(message);
}
}
2.4.upLoadServlet
package com.zx.fileUpLoad.Servlet;
import com.zx.fileUpLoad.DAO.FilrUpLoadBeanDAO;
import com.zx.fileUpLoad.Exception.InvaildExtNameException;
import com.zx.fileUpLoad.doMain.FileUpLoadProperties;
import com.zx.fileUpLoad.doMain.FilrUpLoadBean;
import com.zx.fileUpLoad.imple.impFilrUpLoadBeanDAO;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*;
public class upLoadServlet extends HttpServlet {
private static final String File_Path = "/WEB-INF/files/";
private static final String tempDirectoryPath="E:\\idea2018.1\\FileUpload\\tempDirectory";
private FilrUpLoadBeanDAO uploadFileDAO=new impFilrUpLoadBeanDAO();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletFileUpload upload = getServletFileUpload();
String FilePath=null;
// Set overall request size constraint
// 最大上传500m
upload.setSizeMax(1024*1024*500);
request.setCharacterEncoding("UTF-8");
try {
//把需要上传的items都放进该Map中
Map<String, FileItem> upLoadFiles = new HashMap<>();
//解析请求
List<FileItem> items = upload.parseRequest(request);
//1.构建FilrUpLoadBean的集合,同时填充upLoadFiles
List<FilrUpLoadBean> beans = buildFilUpLoadBeans(items, upLoadFiles);
//2.效验扩展名
vaidateExtName(beans);
//3.效验文件大小,解析时已经效验,我们只需通过异常得到结果
//4.进行文件上传操作
upload(upLoadFiles);
//5.把上传信息保存到数据库
savaUpLoadBean(beans);
FilePath=request.getContextPath()+"WEB-INF/promt/success.jsp";
} catch (Exception e) {
FilePath=request.getContextPath()+"FileupLoad/upLoad.jsp";
request.setAttribute("message",e.getMessage() );
e.printStackTrace();
}
request.getRequestDispatcher(FilePath).forward(request,response);
}
private void savaUpLoadBean(List<FilrUpLoadBean> beans) {
uploadFileDAO.sava(beans);
}
private void upload(Map<String, FileItem> upLoadFiles) {
for (Map.Entry<String, FileItem> upLoadFile : upLoadFiles.entrySet()) {
upload(upLoadFile);
}
}
private void upload(Map.Entry<String, FileItem> upLoadFile) {
InputStream in = null;
OutputStream outputStream = null;
try {
in = upLoadFile.getValue().getInputStream();
outputStream = new FileOutputStream(upLoadFile.getKey());
int len = 0;
byte[] b = new byte[1024];
while ((len = in.read(b)) != -1) {
outputStream.write(b, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void vaidateExtName(List<FilrUpLoadBean> beans) {
List<String> extsList = Arrays.asList(FileUpLoadProperties.getInstances().getProperties("exts").split(","));
for (FilrUpLoadBean bean : beans) {
String fileName=bean.getFileName();
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
if (!extsList.contains(fileExt)) {
//抛的该异常为自己写的异常类
throw new InvaildExtNameException("文件扩展名不合法");
}
}
}
private List<FilrUpLoadBean> buildFilUpLoadBeans(List<FileItem> items, Map<String, FileItem> upLoadFiles) throws UnsupportedEncodingException {
Map<String, String> formField = new HashMap<>();
List<FilrUpLoadBean> fileUpLoadBeans = new ArrayList<>();
buildFormField(items, formField);
buildFileUpLoadBeans(items, upLoadFiles, formField, fileUpLoadBeans);
return fileUpLoadBeans;
}
private void buildFileUpLoadBeans(List<FileItem> items, Map<String, FileItem> upLoadFiles, Map<String, String> formField, List<FilrUpLoadBean> fileUpLoadBeans) {
for (FileItem item : items) {
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String index = fieldName.substring(fieldName.length() - 1);
String fileName = item.getName();
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
String filePath = getFilePath(fileName);
String s = "desc" + index;
String fileDesc = formField.get(s);
System.out.println(fieldName);
System.out.println(fileName);
System.out.println(filePath);
System.out.println(fileDesc);
FilrUpLoadBean filrUpLoadBean = new FilrUpLoadBean(fileName, filePath, fileDesc);
fileUpLoadBeans.add(filrUpLoadBean);
upLoadFiles.put(filePath, item);
}
}
}
private void buildFormField(List<FileItem> items, Map<String, String> formField) throws UnsupportedEncodingException {
for (FileItem item : items) {
if (item.isFormField()) {
String name = item.getFieldName();
String value =item.getString("UTF-8");
formField.put(name, value);
}
}
}
private String getFilePath(String fileName) {
String extName = fileName.substring(fileName.lastIndexOf("."));
Random random = new Random();
String filePath = getServletContext().getRealPath(File_Path) + "\\" + System.currentTimeMillis() + random.nextInt(100000) + extName;
return filePath;
}
private ServletFileUpload getServletFileUpload() {
//1.获取List
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
//如果上传文件超过了500k就把它放到tempDirectory下
factory.setSizeThreshold(1024 * 500);
File tempDirectory = new File(tempDirectoryPath);
factory.setRepository(tempDirectory);
// Create a new file upload handler
return new ServletFileUpload(factory);
}
}
上传成功WEB-INF/promt目录下的success.jsp
<%--
Created by IntelliJ IDEA.
User: H
Date: 2019/7/26
Time: 12:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<h2>文件上传成功</h2>
<a href=${pageContext.servletContext.contextPath}"/FileupLoad/upLoad.jsp">return</a>
<a href=${pageContext.servletContext.contextPath}"queryAllServlet">下载文件</a>
</body>
</html>
文件的下载
从数据库获取路径等信息,从而提供下载资源目录等信息
DownLoad.jsp
<html>
<head>
<title>Down.jsp</title>
</head>
<body>
<c:forEach items="${requestScope.filrUpLoadBeans}" var="filrUpLoadBean">
FileName:${filrUpLoadBean.fileName}<br>
Desc:${filrUpLoadBean.fileDesc}<br>
<c:url var="downLoad" value="DownLoadServlet" scope="request">
<c:param name="filePath" value="${filrUpLoadBean.filePath}"></c:param>
<c:param name="fileName" value="${filrUpLoadBean.fileName}"></c:param>
</c:url>
<a href="${requestScope.downLoad}">下载</a><br>
<c:url var="delete" value="DeleteServlet" scope="request">
<c:param name="filePath" value="${filrUpLoadBean.filePath}"></c:param>
<c:param name="id" value="${filrUpLoadBean.id}"></c:param>
</c:url>
<a href="${requestScope.delete}">Delete</a>
<hr>
</c:forEach>
<a href="${pageContext.servletContext.contextPath}/index.jsp">index</a>
</body>
</html>
queryAllServlet.java
package com.zx.fileUpLoad.Servlet;
import com.zx.fileUpLoad.DAO.FilrUpLoadBeanDAO;
import com.zx.fileUpLoad.doMain.FilrUpLoadBean;
import com.zx.fileUpLoad.imple.impFilrUpLoadBeanDAO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public class queryAllServlet extends HttpServlet {
private static FilrUpLoadBeanDAO filrUpLoadBeanDAO=new impFilrUpLoadBeanDAO();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<FilrUpLoadBean>filrUpLoadBeans= filrUpLoadBeanDAO.getAll();
request.setAttribute("filrUpLoadBeans",filrUpLoadBeans);
request.getRequestDispatcher(request.getContextPath()+"/DownLoad/DownLoad.jsp").forward(request,response);
}
}
DownLoadServlet.java
package com.zx.fileUpLoad.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class DownLoadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/x-msdownload");
String filePath = request.getParameter("filePath");
String fileName = request.getParameter("fileName");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// response.setHeader("Content-Disposition", "attachment;filename=1.txt");
OutputStream out = response.getOutputStream();
InputStream in = new FileInputStream(filePath);
int len = 0;
byte[] b = new byte[1024];
if ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
in.close();
}
}
DeleteServlet.java
package com.zx.fileUpLoad.Servlet;
import com.zx.fileUpLoad.DAO.FilrUpLoadBeanDAO;
import com.zx.fileUpLoad.imple.impFilrUpLoadBeanDAO;
import org.apache.commons.io.FileUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
@WebServlet(name = "DeleteServlet")
public class DeleteServlet extends HttpServlet {
FilrUpLoadBeanDAO filrUpLoadBeanDAO = new impFilrUpLoadBeanDAO();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String idStr = request.getParameter("id");
String filePath = request.getParameter("filePath");
int id = Integer.parseInt(idStr);
FileUtils.deleteQuietly(new File(filePath));
filrUpLoadBeanDAO.Delete(id);
response.sendRedirect("queryAllServlet");
}
}
DownLoad目录下的DownLoad.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: H
Date: 2019/7/26
Time: 17:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Down.jsp</title>
</head>
<body>
<c:forEach items="${requestScope.filrUpLoadBeans}" var="filrUpLoadBean">
FileName:${filrUpLoadBean.fileName}<br>
Desc:${filrUpLoadBean.fileDesc}<br>
<c:url var="downLoad" value="DownLoadServlet" scope="request">
<c:param name="filePath" value="${filrUpLoadBean.filePath}"></c:param>
<c:param name="fileName" value="${filrUpLoadBean.fileName}"></c:param>
</c:url>
<a href="${requestScope.downLoad}">下载</a><br>
<c:url var="delete" value="DeleteServlet" scope="request">
<c:param name="filePath" value="${filrUpLoadBean.filePath}"></c:param>
<c:param name="id" value="${filrUpLoadBean.id}"></c:param>
</c:url>
<a href="${requestScope.delete}">Delete</a>
<hr>
</c:forEach>
<a href="${pageContext.servletContext.contextPath}/index.jsp">index</a>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>upLoadServlet</servlet-name>
<servlet-class>com.zx.fileUpLoad.Servlet.upLoadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>upLoadServlet</servlet-name>
<url-pattern>/upLoadServlet</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.zx.fileUpLoad.Listener.ReadPropertiesFile</listener-class>
</listener>
<servlet>
<servlet-name>DownLoadServlet</servlet-name>
<servlet-class>com.zx.fileUpLoad.Servlet.DownLoadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownLoadServlet</servlet-name>
<url-pattern>/DownLoadServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>queryAllServlet</servlet-name>
<servlet-class>com.zx.fileUpLoad.Servlet.queryAllServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>queryAllServlet</servlet-name>
<url-pattern>/queryAllServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DeleteServlet</servlet-name>
<servlet-class>com.zx.fileUpLoad.Servlet.DeleteServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DeleteServlet</servlet-name>
<url-pattern>/DeleteServlet</url-pattern>
</servlet-mapping>
</web-app>
效果展示
点击文件上传
点击两次新增附件
点击删除
Submit
return接着提交
点击下载文件
点击下载