Jsp+Servlet实现文件上传下载 文件列表展示(二)

下面就为您详细讲解“Jsp+Servlet实现文件上传下载 文件列表展示(二)”的完整攻略:

一、项目说明

本项目旨在通过Jsp和Servlet实现Web应用程序中的文件上传下载及文件列表展示功能。具体步骤如下:

  1. 搭建Web应用程序环境;
  2. 实现文件上传功能;
  3. 实现文件下载功能;
  4. 实现文件列表展示。

二、搭建Web应用程序环境

  1. 新建一个Web项目,命名为file_upload_demo;
  2. 在项目下新建以下文件夹:
  3. upload:用于存放上传的文件;
  4. download:用于存放可以下载的文件;
  5. WEB-INF:用于存放Web应用程序中的配置文件;
  6. 在WEB-INF文件夹下新建以下文件及文件夹:
  7. web.xml:配置Servlet的映射;
  8. lib:导入需要的依赖库(此项目中本质上不需要)。

三、实现文件上传功能

(以下是代码示例)

  1. 新建一个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("文件上传成功!");
    }
  }
}
  1. 添加文件上传页面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>

四、实现文件下载功能

(以下是代码示例)

  1. 新建一个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();
}
  1. 实现文件下载的链接页面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>

五、实现文件列表展示

(以下是代码示例)

  1. 新建一个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);
}
  1. 添加文件列表展示页面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技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring实战之Bean销毁之前的行为操作示例

    下面我将详细讲解 Spring 实战之 Bean 销毁之前的行为操作示例。 什么是 Bean 的销毁行为操作 在 Spring 中,每个 Bean 都有生命周期,其中最后一个阶段就是销毁。在销毁之前,我们可以执行一些行为操作,例如释放资源、删除临时文件、关闭网络连接等等。Spring 提供了多种方式让我们在 Bean 销毁之前执行这些行为操作,下面我们将介绍…

    Java 2023年5月31日
    00
  • Java代码实现对properties文件有序的读写的示例

    Java代码实现对properties文件有序的读写的示例 在Java中读写properties文件是非常常见的操作,但是在默认情况下properties文件是无序的,这就会给我们的读写操作带来一定的困扰。本攻略将详细介绍Java代码如何实现对properties文件有序的读写操作。 1. 针对JDK7及以下版本的实现方式 在Java 7及以下版本中,虽然无…

    Java 2023年6月15日
    00
  • Java实现顺序表的操作详解

    Java实现顺序表的操作详解 顺序表又称为动态数组,是一种顺序存储的线性结构。在一个一维数组的物理空间中依次存放线性表的各个元素,通常使用分配一段连续的存储空间来存储。本文将详细讲解Java实现顺序表的操作,包括构建、插入、删除、查找等。 初始化顺序表 在Java中,我们使用数组来存储顺序表,因此初始化顺序表即为创建一个数组并分配相应的存储空间。在这里我们先…

    Java 2023年5月26日
    00
  • 吃透SpringMVC面试八股文

    说说你对 SpringMVC 的理解 SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个模块。 它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。 什么是MVC模式? MVC的全名是Model View Control…

    Java 2023年4月20日
    00
  • spring-boot-plus V1.4.0发布 集成用户角色权限部门管理(推荐)

    Spring Boot Plus V1.4.0发布 Spring Boot Plus是一个基于SpringBoot的项目快速开发脚手架,版本 V1.4.0 提供了用户角色权限部门管理的集成,方便用户快速搭建管理后台。 安装 首先,我们需要安装Java和Maven,参考:- Java 安装教程- Maven 安装教程 Spring Boot Plus 是通过M…

    Java 2023年5月20日
    00
  • jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例

    针对这个问题,我们可以通过以下步骤来实现: 编写HTML结构 在HTML中,我们需要先定义选项卡的容器和其各自的内容块,然后通过一些特定的属性(例如id、class等)来标记它们,方便后续的JS代码操作。具体代码如下所示: <div id="tab-container"> <div class="tab-ite…

    Java 2023年6月15日
    00
  • 常见的Java锁有哪些?

    常见的Java锁有以下几种: 1. synchronized关键字 synchronized是Java提供的最基本的锁,可以用于方法或代码块中。它采用悲观锁的机制,在同一时间只能有一个线程获得该锁,其他线程需要等待。 示例: public class SynchronizedExample { private int count = 0; public sy…

    Java 2023年5月11日
    00
  • 解析SpringBoot项目开发之Gzip压缩过程

    下面详细解析SpringBoot项目开发中的Gzip压缩过程: 1. 什么是Gzip压缩 Gzip是一种文件压缩格式,用于减小文件大小,节省传输带宽,提高响应速度。在Web应用中,客户端可以通过发起支持Gzip压缩的请求,服务器返回经过Gzip压缩的响应,从而实现数据传输的优化。 2. SpringBoot中开启Gzip压缩 在SpringBoot中,可以通…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部