Home >Java >javaTutorial >Introduction to SrvletContext object and implementation code for file download
This article brings you an introduction to the SrvletContext object and the implementation code for file download. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
Life cycle (it can be seen from the life cycle that this is a global object)
Created when the project is started
Destroyed when the project is closed
Concept: Represents the entire web application and can communicate with the program's container (server).
Get
1. Obtain through request object: request.getServletContext();
2. Obtain through HttpServlet: this.getServletContext();
Function
File under web: getRealPath("/file name");
Under web/WEB-INF: getRealPath("/WEB-INF/file name");
Under src: getRealPath("/WEB-INF/classes/file name");
setAttribute(String name,Object obj)
getAttribute(String name)
removeAttribute(String name)
MIME type: A file data type defined during Internet communication
String getMimeType(String file): Judge the file based on its suffix name The type
format is: large type/small type
Get the MIME type (type of file)
Domain object (shares data for all users)
Get the real (server) path of the file
There is a way to implement file downloading There is a problem with Chinese garbled characters, so let’s start with a tool class
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; } }
The next step is the implementation of the servlet class:
@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(); } }
The above is the detailed content of Introduction to SrvletContext object and implementation code for file download. For more information, please follow other related articles on the PHP Chinese website!