Java Servlet简单实例分享(文件上传下载demo)

下面是Java Servlet简单实例分享的完整攻略。

1. 创建Java Web工程

在Eclipse中创建一个新的Java Web工程,命名为FileUploadDownloadDemo。

2. 添加servlet-api依赖

右键工程 -> Properties -> Java Build Path -> Libraries -> Add Library -> 选择Servlet API。

3. 创建文件上传的Servlet

3.1 在src目录下创建UploadServlet.java

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        PrintWriter out = response.getWriter();

        // 获取文件域
        Part part = request.getPart("file");

        // 获取上传的文件名
        String fileName = part.getSubmittedFileName();

        // 获取保存路径
        String savePath = request.getServletContext().getRealPath("/upload/");

        // 创建上传文件夹
        File fileDir = new File(savePath);
        if(!fileDir.exists()) {
            fileDir.mkdir();
        }

        try {
            // 写入文件
            part.write(savePath + fileName);
            out.println("<h2>上传成功</h2>");
        } catch (IOException e) {
            e.printStackTrace();
            out.println("<h2>上传失败</h2>");
        }
    }
}

3.2 在web.xml文件中添加Servlet映射

<servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.example.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/upload</url-pattern>
</servlet-mapping>

4. 创建文件下载的Servlet

4.1 在src目录下创建DownloadServlet.java

@WebServlet("/download")
public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");

        // 获取下载的文件名
        String fileName = request.getParameter("fileName");

        // 获取要下载的文件
        String filePath = request.getServletContext().getRealPath("/upload/" + fileName);
        File file = new File(filePath);

        if(file.exists()) {
            // 设置响应头
            response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "utf-8"));
            response.setContentType("application/octet-stream");

            // 读取文件
            InputStream in = new FileInputStream(filePath);
            OutputStream out = response.getOutputStream();

            byte[] buf = new byte[1024];
            int len = 0;
            while((len = in.read(buf)) != -1) {
                out.write(buf, 0, len);
            }

            in.close();
            out.close();
        } else {
            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.println("<h2>文件不存在</h2>");
            out.close();
        }
    }
}

4.2 在web.xml文件中添加Servlet映射

<servlet>
    <servlet-name>DownloadServlet</servlet-name>
    <servlet-class>com.example.DownloadServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>DownloadServlet</servlet-name>
    <url-pattern>/download</url-pattern>
</servlet-mapping>

5. 创建文件上传下载的JSP页面

5.1 在WebContent目录下创建文件上传下载的JSP页面 index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传下载Demo</title>
</head>
<body>
    <form action="upload" method="post" enctype="multipart/form-data">
        上传文件:<input type="file" name="file"><br>
        <input type="submit" value="上传">
    </form>
    <hr>
    文件列表:<br>
    <%
        String directory = request.getServletContext().getRealPath("/upload/");
        File file = new File(directory);

        if (!file.exists()) {
            file.mkdir();
        }

        String[] fileNames = file.list();

        if(fileNames != null && fileNames.length > 0) {
            for (String fileName : fileNames) {
                out.println("<a href='download?fileName=" + fileName + "'>" + fileName + "</a><br>");
            }
        } else {
            out.println("<h2>暂无文件</h2>");
        }
    %>
</body>
</html>

5.2 运行工程

右键工程 -> Run As -> Run on Server,选择Tomcat服务器,启动工程。

示例1:上传文件演示

  1. 打开网址:http://localhost:8080/FileUploadDownloadDemo/

  2. 在“上传文件”一栏中选取一个文件,点击“上传”按钮。

  3. 上传成功后,会显示“上传成功”。

  4. 在“文件列表”一栏中,会显示已上传的文件名。

示例2:下载文件演示

  1. 在文件列表中选取一份已上传的文件,点击文件名。

  2. 弹出下载保存对话框。

  3. 下载完成后,打开文件验证。

至此,Java Servlet文件上传下载的简单实例演示完成。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Servlet简单实例分享(文件上传下载demo) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java算法练习题,每天进步一点点(2)

    对于“Java算法练习题,每天进步一点点(2)”,我可以给出如下的完整攻略: Java算法练习题,每天进步一点点(2)攻略 1. 确定题目难度及类型 在开始练习之前,首先需要了解每道题目的难度及类型,确定自己是否有足够的能力来解决这些问题。 2. 阅读题目描述并提出解题思路 在理解了题目难度及类型之后,需要认真阅读题目描述,理解题意,同时提出解题思路,在确定…

    Java 2023年5月19日
    00
  • zookeeper实战之实现分布式锁的方法

    Zookeeper实战之实现分布式锁的方法 在分布式系统中,锁是必不可少的,实现分布式锁的方法有很多种,而使用Zookeeper作为分布式锁的实现也是一种比较可靠的方式。 Zookeeper简介 Zookeeper是一个分布式的开源协调服务框架,使用Zookeeper可以实现分布式锁、数据发布/订阅、命名服务、元数据管理、分布式协调/通知等功能。 原理解析 …

    Java 2023年5月20日
    00
  • Android Studio连接MySql实现登录注册(附源代码)

    下面我将为你详细讲解“Android Studio连接MySql实现登录注册(附源代码)”的完整攻略。 简介 Android Studio是一款由谷歌推出的用于开发Android应用的集成开发环境(IDE)。MySQL是一种广泛使用的关系型数据库管理系统。将这两者连接在一起可以实现Android应用的登录和注册功能。 步骤 下面是使用Android Stud…

    Java 2023年6月16日
    00
  • CSS变量实现主题切换的方法

    下面我将详细讲解CSS变量实现主题切换的方法的完整攻略。 什么是CSS变量? CSS变量也称为自定义属性,是一种定义在CSS规则中的、可重复使用的值。与常规的CSS属性不同,CSS变量以双减号(–)开头,并可以在整个样式表的范围内使用。 实现简介 利用CSS变量实现主题切换的方法主要包括以下几个步骤: 定义多套主题色进行切换; 使用CSS变量将主题色应用到…

    Java 2023年6月15日
    00
  • Spring Boot 捕捉全局异常 统一返回值的问题

    Spring Boot是一个快速构建Spring应用程序的框架,可以快速实现RESTful API的开发。在开发过程中,我们难免会遇到异常,如数据库连接异常、空指针异常等。如果不处理这些异常,可能会导致应用程序挂掉,或出现不可预期的结果。而且在开发中,我们也需要统一的返回值格式,这样可以提高开发效率。 因此,本文将详细讲解如何通过Spring Boot捕捉全…

    Java 2023年5月27日
    00
  • Java基础之详细总结五种常用运算符

    Java基础之详细总结五种常用运算符 Java中常见的运算符有很多种,包括算术运算符、关系运算符、逻辑运算符、位运算符等等,其中五种最为常用,本文将对这五种常用运算符进行详细总结和介绍。 算术运算符 算术运算符是Java中最基本的一类运算符,用于进行加、减、乘、除等基本的数学运算。Java中的算术运算符包括加号(+)、减号(-)、乘号(*)、除号(/)和取模…

    Java 2023年5月26日
    00
  • Java语言中flush()函数作用及使用方法详解

    Java语言中flush()函数作用及使用方法详解 1. flush()函数的作用 在Java语言中,flush()函数用于清空输出流缓冲区,强制将缓冲区的内容输出到目标位置(比如文件、网络等)。具体来说,flush()函数将输出流中的所有缓冲数据都写入到目标位置,同时清空缓冲区,保证数据能够及时地被输出到目标位置。在输出流关闭之前,我们经常需要调用flus…

    Java 2023年5月26日
    00
  • 解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题

    解决java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包问题的完整攻略如下: 问题说明 当使用Maven构建Java项目时,有时候会出现找不到jconsole-1.8.0.jar和tools-1.8.0.jar包的问题。这是因为Java从JDK 9开始,已经将jconsole.jar、tools.jar等jar…

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