ホームページ  >  記事  >  Java  >  SrvletContext オブジェクトとファイル ダウンロードの実装コードの概要

SrvletContext オブジェクトとファイル ダウンロードの実装コードの概要

不言
不言オリジナル
2018-09-27 14:30:442540ブラウズ

この記事では、SrvletContext オブジェクトとファイル ダウンロードの実装コードについて説明します。必要な方は参考にしていただければ幸いです。

ServletContext オブジェクト

ライフ サイクル (ライフ サイクルから、これがグローバル オブジェクトであることがわかります)

プロジェクトの開始時に作成されます

プロジェクトが閉じられると破棄されます

コンセプト: Web アプリケーション全体を表し、プログラムのコンテナ (サーバー) と通信できます。

Get

1. リクエスト オブジェクトを通じて取得: request.getServletContext();

2. HttpServlet を通じて取得: this.getServletContext();

関数

Web 下のファイル: getRealPath("/ファイル名");

Web/WEB-INF の下: getRealPath("/WEB-INF/ファイル名");

src の下: getRealPath("/WEB-INF/classes/file name");

setAttribute(String name,Object obj)

getAttribute(String name)

removeAttribute(String name)

MIME タイプ: インターネット通信時に定義されるファイルのデータ型

String getMimeType(String file): 拡張子名に基づいてファイルを判断します。タイプ

形式は次のとおりです: ラージ タイプ/スモール タイプ

    1. ##MIME タイプ (ファイルのタイプ) を取得します

    2. #Domain オブジェクト (共有すべてのユーザーのデータ)
    3. ファイルの実際の (サーバー) パスを取得します
    ファイルのダウンロードを実装する方法があります中国語の文字化けの問題があるので、ツール クラス
    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 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。