一、路径获取失败,弹出错误500(解决时间最长的)
定义Servlet,错误代码如下:
@WebServlet("/downloadServlet")
public class DownLoadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取请求参数,文件名称
String filename = request.getParameter("filename");
//2. 使用字节输入流加载文件进内存
//2.1 找到文件服务器路径
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("./img/1.jpg" +filename);
System.out.println(realPath);
//2.2 用字节流关联
FileInputStream fis = new FileInputStream(realPath);
//3. 设置response的响应头
//3.1 设置响应头类型:content-type
String mimeType = servletContext.getMimeType(filename);//获取文件的mime类型
response.setHeader("content-type", mimeType);
//3.2 设置响应头打开方式:content-disposition
response.setHeader("content-disposition", "attachment;filename=" + filename);
//4. 将输入流的数据写出到输出流中
ServletOutputStream sos = response.getOutputStream();
byte[] buff = new byte[1024 * 8];
int len = 0;
while ((len=fis.read(buff))!=-1){
sos.write(buff,0,len);
}
fis.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
错误的地方应该是:
打开的页面就是
也就是:路径就获取错误
解决方法:只需要去掉“+filename”即可
//2.1 找到文件服务器路径
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("./img/1.jpg");
System.out.println(realPath);
【测试】直接打开该页面(/downloadServlet),可弹出下载提示框(没有提示框的可以在下载设置里面进行设置)
注:我加了一个打印路径,可在idea控制台查看路径,在图片路径后还有null字符的就是错误路径
定义页面,代码如下(步骤应该在定义Servlet前)
Title
图片1
图片1
打开html页面后,
二、 在定义页面中,第一个图片超链接无法打开
即这个超链接无法打开
解决方法:(img放在web目录下)
右键img-->Mark Directory as-->Resourses Root
三、关于超链接中相对路径的写法
有些人的写法是:src="默认路径/img/i.jpg"
但是我这么写无法获取路径,只能写src="./img/1.jpg"
(可能还有其他版本的正确路径写法,主要需要自己测试一下,之后按照类似格式即可)
盲猜原因应该是:idea或jdk版本不一样



