下面就为您详细讲解“Jsp+Servlet实现文件上传下载 文件列表展示(二)”的完整攻略:
一、项目说明
本项目旨在通过Jsp和Servlet实现Web应用程序中的文件上传下载及文件列表展示功能。具体步骤如下:
- 搭建Web应用程序环境;
- 实现文件上传功能;
- 实现文件下载功能;
- 实现文件列表展示。
二、搭建Web应用程序环境
- 新建一个Web项目,命名为file_upload_demo;
- 在项目下新建以下文件夹:
- upload:用于存放上传的文件;
- download:用于存放可以下载的文件;
- WEB-INF:用于存放Web应用程序中的配置文件;
- 在WEB-INF文件夹下新建以下文件及文件夹:
- web.xml:配置Servlet的映射;
- lib:导入需要的依赖库(此项目中本质上不需要)。
三、实现文件上传功能
(以下是代码示例)
- 新建一个UploadServlet类,在doPost方法中实现文件上传功能:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置请求编码格式
request.setCharacterEncoding("UTF-8");
// 获取上传文件的目录
String savePath = this.getServletContext().getRealPath("/upload");
// 创建上传文件的File对象
File file = new File(savePath);
// 判断上传文件的保存目录是否存在,不存在则创建
if (!file.exists() && !file.isDirectory()) {
System.out.println(savePath + "目录不存在,需要创建");
file.mkdir();
}
// 存储上传文件的全路径
String filePath = savePath + "\\" + file.getName();
// 创建文件上传对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小,超过将该临时文件存放在一个临时目录中
factory.setSizeThreshold(1024*1024);
// 设置上传的临时目录
factory.setRepository(new File("E:\\temp"));
// 创建一个ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的大小的最大值,单位是byte
upload.setFileSizeMax(1024*1024*10);
// 解析request对象,获取客户端上传的文件对象
List<FileItem> items = upload.parseRequest(request);
// 遍历所有上传文件
for (FileItem item : items) {
// 判断当前上传文件是否为普通文件还是上传的文件
if (!item.isFormField()) { // 若是上传的文件则保存至服务器
// 获取上传文件的名称
String fileName = item.getName();
System.out.println("上传的文件名称为:" + fileName);
// 把文件存到服务器的全路径
File uploadFile = new File(filePath);
// 写入上传文件
item.write(uploadFile);
response.getWriter().print("文件上传成功!");
}
}
}
- 添加文件上传页面input.jsp
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form method="POST" action="/file_upload_demo/upload" enctype="multipart/form-data">
<input type="file" name="file">
<br/><br/>
<input type="submit" value="上传">
</form>
</body>
</html>
四、实现文件下载功能
(以下是代码示例)
- 新建一个DownloadServlet类,在doGet方法中实现文件下载功能:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取要下载的文件名
String fileName = request.getParameter("filename");
// 设置文件所在路径
String realPath = this.getServletContext().getRealPath("download/" + fileName);
// 获取文件对象
File file = new File(realPath);
// 设置响应头
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 读取要下载文件的内容
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
// 创建输出流
OutputStream outputStream = response.getOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
// 写出文件
byte[] buffer = new byte[1024];
int len = 0;
while ((len = bufferedInputStream.read(buffer)) > 0) {
bufferedOutputStream.write(buffer, 0, len);
}
// 关闭流
bufferedOutputStream.flush();
bufferedOutputStream.close();
outputStream.close();
bufferedInputStream.close();
fileInputStream.close();
}
- 实现文件下载的链接页面download.jsp
<html>
<head>
<title>文件下载</title>
</head>
<body>
<ul>
<li><a href="/file_upload_demo/download?filename=文件1.txt">文件1</a></li>
<li><a href="/file_upload_demo/download?filename=文件2.txt">文件2</a></li>
<li><a href="/file_upload_demo/download?filename=文件3.txt">文件3</a></li>
</ul>
</body>
</html>
五、实现文件列表展示
(以下是代码示例)
- 新建一个ListServlet类,在doGet方法中实现文件列表展示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传文件的目录
String savePath = this.getServletContext().getRealPath("/upload");
// 创建File对象
File file = new File(savePath);
// 获取文件列表
String[] fileList = file.list();
// 将文件列表存储到request对象中
request.setAttribute("fileList", fileList);
// 转发到显示文件列表的jsp页面
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
- 添加文件列表展示页面list.jsp
<html>
<head>
<title>文件列表</title>
</head>
<body>
<ul>
<%
String[] fileList = (String[])request.getAttribute("fileList");
for (int i = 0; i < fileList.length; i++) {
%>
<li><%=fileList[i]%></li>
<% } %>
</ul>
</body>
</html>
这样,我们就实现了一个Jsp+Servlet实现文件上传下载和文件列表展示的完整应用程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jsp+Servlet实现文件上传下载 文件列表展示(二) - Python技术站