SrervletContext对象的介绍和文件下载的实现代码
程序员文章站
2022-03-20 09:53:43
...
本篇文章给大家带来的内容是关于SrervletContext对象的介绍和文件下载的实现代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
ServletContext对象
生命周期(从生命周期可以看出这个是个全局对象)
项目启动的时候创建
项目关闭的时候销毁
概念:代表整个web应用,可以和程序的容器(服务器)来通信。
获取
1、通过request对象获取:request.getServletContext();
2、通过HttpServlet获取: this.getServletContext();
功能
web下的文件:getRealPath("/文件名");
web/WEB-INF下:getRealPath("/WEB-INF/文件名");
src下:getRealPath("/WEB-INF/classes/文件名");
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttribute(String name)
MIME类型:在互联网通信过程中定义的一种文件数据类型
String getMimeType(String file):根据文件的后缀名来判断该文件的类型
格式是:大类型/小类型
获取MIME类型(文件的类型)
域对象(共享所有用户的数据)
获取文件的真实(服务器)路径
实现文件下载有个中文乱码问题,所以先来个工具类
package cn.itcast.utils; import sun.misc.BASE64Encoder; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class DownLoadUtils { public static String getFileName(String agent, String filename) throws UnsupportedEncodingException { if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; } }
接下来就是servlet类的实现:
@WebServlet(name = "DownloadServlet",urlPatterns = "/download3") public class DownloadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1.获取文件名 String filename = request.getParameter("filename"); // 2.获取真实路径 // 2.1 获取ServletContext ServletContext servletContext = this.getServletContext(); // 2.2 根据文件存储的位置,选择路径,本人的路径是web下的upload下的文件 String realPath = servletContext.getRealPath("/upload/" + filename); // 3.设置响应头 // 3.1 设置content-type response.setHeader("content-type",servletContext.getMimeType(filename)); // 3.2 解决中文乱码 String agent = request.getHeader("user-agent"); filename = DownLoadUtils.getFileName(agent,filename); // 3.3 设置content-disposition response.setHeader("content-disposition","attachment;filename=" + filename); // 4.标准的IO流 FileInputStream fis = new FileInputStream(realPath); ServletOutputStream sos = response.getOutputStream(); byte[] b = new byte[1024 * 8]; int len = 0; while((len = fis.read(b)) != -1){ sos.write(b,0,len); } fis.close(); sos.close(); } }
以上就是SrervletContext对象的介绍和文件下载的实现代码的详细内容,更多请关注其它相关文章!
上一篇: 解读Java8新特性--JavaFX 8
下一篇: 使用JAVA反射的利与弊