이 글은 SrvletContext 객체와 파일 다운로드를 위한 구현 코드를 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
라이프 사이클(라이프 사이클에서 전역 객체임을 알 수 있음)
프로젝트 시작 시 생성
프로젝트 종료 시 소멸
개념: 전체 웹 애플리케이션을 나타내며 프로그램의 컨테이너(서버)와 함께 통신하는 데 사용할 수 있습니다.
Get
1. 요청 객체를 통해 가져오기: request.getServletContext();
2. HttpServlet을 통해 가져오기: this.getServletContext();
Function
웹 아래 파일: getRealPath("/filename") ;
web/WEB-INF 아래: getRealPath("/WEB-INF/파일 이름");
src: getRealPath("/WEB-INF/classes/파일 이름");
setAttribute(문자열 이름, 개체 obj)
getAttribute(문자열 이름)
removeAttribute(문자열 이름)
MIME 유형: 인터넷 통신 과정에서 정의된 파일 데이터 유형
String getMimeType(문자열 파일): 파일의 접미사 이름을 기준으로 판단됩니다. 파일
형식은 대형/소형
MIME 형식 가져오기(파일 형식)
Domain 개체(모든 사용자에게 데이터 공유)
실물 가져오기(서버) ) path
파일을 다운로드할 때 중국어 문자가 깨져 나오는 문제가 있으니 도구 클래스부터 시작하겠습니다
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; } }
다음 단계는 서블릿 클래스 구현입니다.
@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(); } }
위 내용은 SrvletContext 객체 소개 및 파일 다운로드를 위한 구현 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!