>  기사  >  Java  >  SrvletContext 객체 소개 및 파일 다운로드를 위한 구현 코드

SrvletContext 객체 소개 및 파일 다운로드를 위한 구현 코드

不言
不言원래의
2018-09-27 14:30:442523검색

이 글은 SrvletContext 객체와 파일 다운로드를 위한 구현 코드를 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

ServletContext 객체

라이프 사이클(라이프 사이클에서 전역 객체임을 알 수 있음)

프로젝트 시작 시 생성

프로젝트 종료 시 소멸

개념: 전체 웹 애플리케이션을 나타내며 프로그램의 컨테이너(서버)와 함께 통신하는 데 사용할 수 있습니다.

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(문자열 파일): 파일의 접미사 이름을 기준으로 판단됩니다. 파일

형식은 대형/소형

    1. MIME 형식 가져오기(파일 형식)

    2. Domain 개체(모든 사용자에게 데이터 공유)

    3. 실물 가져오기(서버) ) 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.