文件下載jsp代碼
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@page import="java.io.File"%><%@page import="java.io.OutputStream"%><%@page import="java.io.InputStream"%><%@page import="java.io.FileInputStream"%><%@page import="java.net.URLEncoder"%><%
String path = application.getRealPath("./images/a.jpg");
File file = new File(path);
InputStream is = new FileInputStream(file);
response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode(file.getName(),"UTF-8"));
OutputStream os = response.getOutputStream();
byte buffer[] = new byte[1024];
int len;
while((len=is.read(buffer))!=-1){
os.write(buffer,0,len);
}
os.flush();
os.close();
is.close();
%>l JSP運行原理和九大隱式對象
l 每個JSP 頁面在第一次被訪問時,WEB容器都會把請求交給JSP引擎(即一個Java程序)去處理。JSP引擎先將JSP翻譯成一個_jspServlet(實質上也是一個servlet) ,然後按照servlet的調用方式進行調用。
l 由於JSP第一次訪問時會翻譯成servlet,所以第一次訪問通常會比較慢,但第二次訪問,JSP引擎如果發現JSP沒有變化,就不再翻譯,而是直接調用,所以程序的執行效率不會受到影響。
l JSP引擎在調用JSP對應的_jspServlet時,會傳遞或創建9個與web開發相關的對象供_jspServlet使用。JSP技術的設計者為便於開發人員在編寫JSP頁面時獲得這些web對象的引用,特意定義了9個相應的變量,開發人員在JSP頁面中通過這些變量就可以快速獲得這9大對象的引用。
l 這9個對象分別是哪些,以及作用也是筆試經常考察的知識點。
l JSP九大隱式對象
l request
l response
l config
l application
l exception
l Session
l page
l out
l pageContext
l out隱式對象
l out隱式對象用於向客戶端發送文本數據。
l out對象是通過調用pageContext對象的getOut方法返回的,其作用和用法與ServletResponse.getWriter方法返回的PrintWriter對象非常相似。
l JSP頁面中的out隱式對象的類型為JspWriter,JspWriter相當於一種帶緩存功能的PrintWriter,設置JSP頁面的page指令的buffer屬性可以調整它的緩存大小,甚至關閉它的緩存。
l 只有向out對象中寫入了內容,且滿足如下任何一個條件時,out對象才去調用ServletResponse.getWriter方法,並通過該方法返回的PrintWriter對象將out對象的緩沖區中的內容真正寫入到Servlet引擎提供的緩沖區中:
l 設置page指令的buffer屬性關閉了out對象的緩存功能
l out對象的緩沖區已滿
l 整個JSP頁面結束
作者 qiwancong