JAVAWEB重启之-Servlet Response下载文件关于路径的报错问题

本文详细介绍了使用Servlet的Response功能实现文件下载的过程,包括从获取文件的绝对路径到使用相对路径的方法,以及在代码实现中遇到的问题和解决策略。特别强调了文件存放位置的选择,指出WEB-INF下的文件应为机密资料,而正常资源如图片应放置于web主目录下的static文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在搞关于Servlet的Response下载文件功能,照着视频敲了一遍,视频里getRealPath("");用的是电脑文件的绝对路径,我想自己研究研究改成相对路径,经最后研究结果,代码如下:

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String path = req.getServletContext().getRealPath("/");
        String wholePath = path + "WEB-INF/classes/1.png";
        File file = new File(wholePath);
        System.out.println("file is exist :" + file.exists());
        String filename = wholePath.substring(wholePath.lastIndexOf("/")+1);
        resp.setHeader("Content-Disposition", "attachment; filename=" + filename);
        FileInputStream fis = new FileInputStream(wholePath);
        int len = 0;
        byte[] buffer = new byte[1024];
        ServletOutputStream out = resp.getOutputStream();
        while ((len = fis.read(buffer)) > 0){
            System.out.println("写进来了吗");
            out.write(buffer, 0, len);
        }
        fis.close();
        out.close();
    }

遇到的坑:

1、File file = new File("");的时候,就算目录下不存在该file,也是能打印file.getPath()的,我一开始以为打印了路径就证明有这个file,too young too naive,后来换成exists()方法就正确了

2、报了个错:

 

我以为是HttpServlet相关的配置文件之类的配错了,或者doGet、doPost方法写错了,这顿找原因。

后来才发现是输出时while(...)循环没走就报这个错误,他竟然不报个HTTP500系的错,整个这玩意

 

PS1:

经过后面的学习才知道,图片不应该放到resources这个路径下面,WEB-INF下面的文件对用户是不可见的,放的应该是机密文件,正常的图片资源应该放在web主目录下,建一些static文件夹之类的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值