(十六)Servlet教程——Servlet文件下载

Servlet文件下载

       文件下载是将服务器上的资源下载到本地,可以通过两种方式来下载服务器上的资源。第一种是使用超链接来下载,第二种是通过代码来下载。

超链接下载

       在HTML或者JSP页面中使用超链接时,可以实现页面之间的跳转,但是当超链接链接的资源时浏览器无法识别的资源时就会自动下载。

       当遇到浏览器能够直接处理的文件时,会在浏览器中默认显示出来,比如txt、png、jpg等。当浏览器支持download属性时,也可以通过设置download属性强制浏览器下载文件。

       首先我们需要在项目中创建一个下载文件所在的文件夹。

如图所示我们创建了一个download目录,然后准备好一些供下载的文件。

然后需要把包含下载文件的文件夹添加到服务器外部资源设置中。

点击下拉框中的编辑配置菜单

点击“部署”按钮切换到“部署”选项卡,点击该界面中的添加按钮(+号按钮)

点击添加按钮后的界面展示如下图所示

点击“外部源”菜单后的界面展示如下图所示

选择download目录,点击确定按钮

然后依次点击“应用”和“确定”按钮

在web app文件夹下创建一个download.html文件,文件的内容如下

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>文件下载</title>

</head>

<body>

<!--使用超链接联链接浏览器可以识别的资源-->

<a href="download/JavaEE.jpg">JPG图片</a>

<!--使用超链接联链接浏览器无法识别的资源-->

<a href="download/体检报告.rar">rar文件</a>

</body>

</html>

启动该应用后,在浏览器中输入如下URL:

http://localhost:8080/s001/download.html

界面展示如下图所示

点击“JPG图片”这个超链接后的界面展示如下图所示

点击“rar文件”后的界面展示如下图所示 

当给超链接设置了download属性,但是没有设置属性值时,将会使用默认的文件名下载文件。如果设置了download属性的值,就使用设置的值作为下载文件的文件名。

接下来我们使用后台的方式实现文件的下载。

首先我们需要准备一个供下载文件的Servlet类DownloadServlet。

该类的具体内容如下

@WebServlet("/downloadServlet")

public class DownloadServlet extends HttpServlet {

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        System.out.println("文件下载...");

        //设置请求的编码

        request.setCharacterEncoding("UTF-8");

        //获取文件下载路径

        String path = getServletContext().getRealPath("/download/");

        //获取要下载的文件名,设计通过前端界面传递过来

        String fileName = request.getParameter("fileName");

        //参数增加非空判断 trim() 去掉字符串前后的空格

        if (fileName == null || "".equals(fileName.trim())) {

            response.getWriter().write("请输入要下载的文件名!");

            response.getWriter().close();

            return;

        }
        //通过路径得到file对象

        File file = new File(path + fileName);

        //判断file对象是否存在,并且是一个标准文件

        if (file.exists() && file.isFile()) {

            //设置响应类型 该响应指示浏览器将响应视为一个可以下载的文件

            //而不是在浏览器中直接打开

            response.setContentType("application/x-msdownload");

            //设置头信息

            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

            //得到输入流

            InputStream is = new FileInputStream(file);

            //得到输出流

            ServletOutputStream os = response.getOutputStream();

            //定义byte数组

            byte[] car = new byte[1024];

            //定义长度

            int len = 0;

            //循环输出

            while ((len = is.read(car)) != -1) {

                os.write(car, 0, len);

            }

            //关闭流 释放资源

            os.close();

            is.close();

        } else {

            response.getWriter().write("文件不存在,下载失败");

            response.getWriter().close();

        }

    }

}

     在之前的download.html中添加一个form,将form的action设置为上面创建的Servlet。

该界面更新后的代码如下

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>文件下载</title>

</head>

<body>

<!--使用超链接联链接浏览器可以识别的资源-->

<a href="download/JavaEE.jpg">JPG图片</a>

<!--使用超链接联链接浏览器无法识别的资源-->

<a href="download/体检报告.rar">rar文件</a>

<br>

<form action="downloadServlet">

    文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名">

    <button>下载</button>

</form>

</body>

</html>

完成上述工作后,启动该应用

在浏览器中输入如下URL:

http://localhost:8080/s001/download.html

在文本输入框中输入JavaEE.jpg,点击下载按钮,就可以成功下载download文件夹中的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry95270628

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值