以下是JSP中使用response实现文件下载的两种方法的详细攻略:
1. 使用response的setHeader()方法:
1.1 步骤:
- 在JSP页面中,需要一个超链接或者按钮,通过它来触发文件下载,比如:
html
<a href="download.jsp?file=test.txt">下载文件</a>
- 在download.jsp页面中,获取要下载的文件名,并对文件名进行URL解码:
jsp
<%
String fileName = request.getParameter("file"); // 获取要下载的文件名
fileName = URLDecoder.decode(fileName, "UTF-8"); // 对文件名进行URL解码
%>
- 使用response的setHeader()方法来设置响应头信息,告诉浏览器返回的是一个文件,而不是一个网页,同时设置文件名:
jsp
<%
response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 设置文件名和下载方式为附件
%>
- 使用response的getOutputStream()方法,将文件流写入输出流,从而实现文件下载:
jsp
<%
FileInputStream fis = new FileInputStream(fileName); // 打开文件输入流
ServletOutputStream sos = response.getOutputStream(); // 打开输出流
byte[] buffer = new byte[1024]; // 缓存数组
int len = 0; // 每次读取的字节数
while ((len = fis.read(buffer)) > 0) {
sos.write(buffer, 0, len); // 写入数据
}
fis.close(); // 关闭输入流
sos.close(); // 关闭输出流
%>
1.2 示例:
在一个网站上有一个sample.pdf的文件,我们要实现通过在JSP页面上点击一个按钮来下载这个文件,可以按照以下步骤来实现:
- 在JSP页面中添加按钮:
html
<button onclick="download()">下载sample.pdf</button>
- 编写download()函数,设置按钮点击后的跳转地址:
javascript
function download() {
window.location.href = "download.jsp?file=sample.pdf";
}
- 在download.jsp页面中,获取文件名并设置响应头信息:
jsp
<%
String fileName = request.getParameter("file"); // 获取要下载的文件名
fileName = URLDecoder.decode(fileName, "UTF-8"); // 对文件名进行URL解码
response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 设置文件名和下载方式为附件
%>
- 将文件流写入输出流,实现文件下载:
jsp
<%
FileInputStream fis = new FileInputStream(fileName); // 打开文件输入流
ServletOutputStream sos = response.getOutputStream(); // 打开输出流
byte[] buffer = new byte[1024]; // 缓存数组
int len = 0; // 每次读取的字节数
while ((len = fis.read(buffer)) > 0) {
sos.write(buffer, 0, len); // 写入数据
}
fis.close(); // 关闭输入流
sos.close(); // 关闭输出流
%>
2. 使用response的setContentType()方法:
2.1 步骤:
- 在JSP页面中,需要一个超链接或者按钮,通过它来触发文件下载,比如:
html
<a href="download2.jsp?file=test.txt">下载文件</a>
- 在download2.jsp页面中,获取要下载的文件名,并对文件名进行URL解码:
jsp
<%
String fileName = request.getParameter("file"); // 获取要下载的文件名
fileName = URLDecoder.decode(fileName, "UTF-8"); // 对文件名进行URL解码
%>
- 使用response的setContentType()方法,设置响应类型为"application/x-msdownload",告诉浏览器返回的是一个文件,而不是一个网页:
jsp
<%
response.setContentType("application/x-msdownload"); // 设置响应类型为文件下载
%>
- 使用response的getWriter()方法,将文件内容直接写入输出流,从而实现文件下载:
jsp
<%
FileReader fr = new FileReader(fileName); // 打开文件输入流
BufferedReader br = new BufferedReader(fr); // 用缓冲区读取文件内容
String line = null;
while ((line = br.readLine()) != null) {
out.println(line); // 写入输出流
}
br.close(); // 关闭缓冲区
fr.close(); // 关闭输入流
%>
2.2 示例:
在一个网站上有一个sample.doc的文件,我们要实现通过在JSP页面上点击一个按钮来下载这个文件,可以按照以下步骤来实现:
- 在JSP页面中添加按钮:
html
<button onclick="download()">下载sample.doc</button>
- 编写download()函数,设置按钮点击后的跳转地址:
javascript
function download() {
window.location.href = "download2.jsp?file=sample.doc";
}
- 在download2.jsp页面中,获取文件名并设置响应类型:
jsp
<%
String fileName = request.getParameter("file"); // 获取要下载的文件名
fileName = URLDecoder.decode(fileName, "UTF-8"); // 对文件名进行URL解码
response.setContentType("application/x-msdownload"); // 设置响应类型为文件下载
%>
- 将文件内容写入输出流,实现文件下载:
jsp
<%
FileReader fr = new FileReader(fileName); // 打开文件输入流
BufferedReader br = new BufferedReader(fr); // 用缓冲区读取文件内容
String line = null;
while ((line = br.readLine()) != null) {
out.println(line); // 写入输出流
}
br.close(); // 关闭缓冲区
fr.close(); // 关闭输入流
%>
至此,JSP隐含对象response实现文件下载的两种方法的详细攻略就讲解完毕了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP隐含对象response实现文件下载的两种方法 - Python技术站