今天学习文件下载的时候在web下新建了img文件夹,里面加了几个图片文件
然后写网页,写代码。。。
Title
图片资源
图片资源
package com.company;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
@WebServlet("/demo3")
public class servletContext_03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*文件下载*/
/* 设置header content-disposition:attachment;filename=xxx */
/*获取文件名称*/
String filename = req.getParameter("filename");
/*字节流加载文件进内存*/
ServletContext con1 = this.getServletContext();
String path = con1.getRealPath("/img/"+filename);
//System.out.println("```filename="+filename);
//System.out.println(path);
/*设置response响应头*/
String mime =con1.getMimeType(filename);
//System.out.println(mime);
resp.setContentType(mime);
/*设置响应头打开方式*/
resp.setHeader("content-disposition","attachment;filename="+filename);
/*输入流写入输出流*/
FileInputStream in = new FileInputStream(path);
ServletOutputStream out = resp.getOutputStream();
byte[] buff= new byte[1024*8];
int len=0;
while((len = in.read(buff))!=-1){
out.write(buff,0,len);
}
in.close();
}
}
然后运行发现网页报错404,两个超链接都不能使用。
原因是idea实际处理的文件是out文件夹,编译后会生成out文件夹,
里面放置配置文件和.class文件,虽然在web文件夹中创建了img文件,但是out中的文件没有更新,仍然找不到图片
解决方法 把img文件夹复制一份放在out的对应位置上面。web文件夹对应虚拟目录/test_01_war_exploded,所以直接把img放在这个文件夹就可以。
各位大哥要是有更方便的方式 比如设置之类的请在评论区留言