ServletContext對象

ServletContext對象:

1. 概念:代表整個web應用,可以和程序的容器(服務器)來通信
2. 獲取:
	1. 通過request對象獲取
		request.getServletContext();
	2. 通過HttpServlet獲取
		this.getServletContext();
3. 功能:
	1. 獲取MIME類型:
		* MIME類型:在互聯網通信過程中定義的一種文件數據類型
			* 格式: 大類型/小類型   text/html		image/jpeg

		* 獲取:String getMimeType(String file)  
	2. 域對象:共享數據
		1. setAttribute(String name,Object value)
		2. getAttribute(String name)
		3. removeAttribute(String name)

		* ServletContext對象範圍:所有用戶所有請求的數據
	3. 獲取文件的真實(服務器)路徑
		1. 方法:String getRealPath(String path)  
			 String b = context.getRealPath("/b.txt");//web目錄下資源訪問		    		
	        String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目錄下的資源訪問		
	        String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目錄下的資源訪問

文件下載案例

        //1.獲取請求參數,文件名稱
        String filename = request.getParameter("filename");
        //2.使用字節輸入流加載文件進內存
        //2.1找到文件服務器路徑
        ServletContext servletContext = this.getServletContext();
        String realPath = servletContext.getRealPath("/img/" + filename);
        //2.2用字節流關聯
        FileInputStream fis = new FileInputStream(realPath);

        //3.設置response的響應頭
        //3.1設置響應頭類型:content-type
        String mimeType = servletContext.getMimeType(filename);//獲取文件的mime類型
        response.setHeader("content-type",mimeType);
        //3.2設置響應頭打開方式:content-disposition

        //解決中文文件名問題
        //1.獲取user-agent請求頭、
        String agent = request.getHeader("user-agent");
        //2.使用工具類方法編碼文件名即可
        filename = DownLoadUtils.getFileName(agent, filename);

        response.setHeader("content-disposition","attachment;filename="+filename);
        //4.將輸入流的數據寫出到輸出流中
        ServletOutputStream sos = response.getOutputStream();
        byte[] buff = new byte[1024 * 8];
        int len = 0;
        while((len = fis.read(buff)) != -1){
            sos.write(buff,0,len);
        }

        fis.close();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章