response.setContentType("application/pdf");表示给客户端传送pdf类型的文件。
若是不设置,则默认类型为 “text/plain" 即纯文本类型
若是要返回一个Microsoft Word类型的文档,则将其设置为”application/msword" 。
若是要返回一个Excel类型的文档,则将其设置为”application/vnd.ms-excel" 。
这里以pdf类型为例。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class PdfServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/pdf");
ServletOutputStream out=response.getOutputStream();
File file=new File("G:/1.pdf");
FileInputStream is=new FileInputStream(file);
byte[]b=new byte[1024];
int len=0;
while((len=is.read(b))>0)
{
out.write(b, 0, len);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
大体步骤:
1.设置类型
2.将文件转为文件输入流。
3.用ServletOutputStream 输出。
这里的浏览器若是有解析pdf类型文件的插件,则可以保存或者下载。
但若是浏览器没有对应的解析pdf的插件,既无法查看又无法下载。
为了解决这一问题:只需要在开始getOutputStream()一行下面,添加一句话:
response.setHeader("Content-disposition","attachment;filename=Servlet好厉害.pdf");
这样,即使没有响应的插件,也会下载 Servlet好厉害.pdf 对应的文件(实际上就是你在G盘读取的1.pdf)