1. 程式人生 > >JSP技術學習筆記(一)

JSP技術學習筆記(一)

JSP全稱是Java Server Pages,它和servle技術一樣,都SUN公司定義的一種用於開發動態web資源的技術。

JSP這門技術的最大的特點在於,寫jsp就像在寫html,但它相比html而言,html只能為使用者提供靜態資料,而Jsp技術允許在頁面中巢狀java程式碼,為使用者提供動態資料。

一、jsp呼叫和執行原理

     jsp頁面執行時是通過呼叫servlet的,即使訪問的是以XXX.jsp結尾的頁面。jsp引擎(引擎本身也是servlet)先把jsp頁面翻譯成servlet,jsp翻譯成的servlet在tomcat目錄下的work\Catalina\主機名\...\...\jsp\_頁面名稱_.java。

     原jsp程式碼如下:

     開啟檢視xxx.java原始碼可以發現原先jsp中編寫的程式碼:

      還可以看到通過<%%>寫的java程式碼被直接帶入xxx.java中; jsp說白了就是servlet。

      不管是JSP還是Servlet,雖然都可以用於開發動態web資源,但由於這2門技術各自的特點,在長期實踐中,逐漸把servlet作為web應用中的控制組件使用,把jsp技術作為資料顯示模板使用;其原因為,程式的資料通常需要美化在輸出;

二、JSP語法基礎

  1. jsp模板元素:  在jsp頁面中的html內容稱為模板元素;模板元素定義網頁的基本骨架;

  2. jsp指令碼表示式  語法<%=  表示式或變數 %>,這條語句的作用就是用於向瀏覽器輸出資料,這條語句在原始碼中將被翻譯成out.print( 變數或表示式 ) JSP指令碼片斷:<% JAVA程式碼內容 %>,指令碼片斷中只能出現java程式碼;在多個指令碼片斷之間可以嵌入文字,HTML標記等,片斷之間的內容也將被應用到頁面中;比如:

    <%
    for(int i=1;i<5;i++){
    
    %>
    
    <p>這是p標籤</p>
    <%
    }
    %>

    那麼這個p標籤將會重複5次;需要注意,單個指令碼片斷可以是不完整的java程式碼,但多個指令碼片斷組合後的結果必須是完整的java程式碼;

  3. jsp註釋 jsp註釋:<%--  註釋內容  --%>       html註釋:<!--   註釋內容   --> 兩者的區別在於,html註釋的內容將被輸出到瀏覽器中,而jsp註釋的內容則不會,過多使用html註釋會增加傳輸的流量,增大資料傳輸的壓力;
  4. jsp指令 jsp指令並不直接產生任何可見輸出,知識告訴jsp引擎如何處理jsp頁面的其餘內容; jsp頁面中不陌生的<%@ page %>就是一條指令;指令page:<%@ page %> page指令定義jsp頁面的各種屬性,在習慣中page指令最好放在整個jsp頁面的起始位置; page指令完整語法:
    <%@ page
    
    [language="java"]   告訴jsp引擎嵌入的程式碼是java程式碼   
    [extends="package.class"]    翻譯後的servlet繼承的類
    [import="{package.class|package.*},..."]   
      導包;JSP引擎自動匯入下面的包:
            java.lang.*
            javax.servlet.*
            javax.servlet.jsp.*
            javax.servlet.http.*
    [serssion="boolean"]  是否存入session物件
    [buffer="none|8kb|size kb"]   緩衝大小   預設是8kb  
    [autoFlush="boolean"]  為true時緩衝滿就自動重新整理
    [isTheadSafe="boolean"] 為true時servlet執行緒不安全
    [info="text"]   帶入的資訊
    [errorPage="relative_url"] 錯誤處理頁面的url,errorPage屬性的設定必須使用相對路徑;
    [isErrorPage="boolean"]  說明當前頁面是否為錯誤處理頁面
    [contentType="mimeType[;charset="charcterSet"]"] MIME型別一般為text/html
    [pageEncoding="charcterset"] 頁面字元編碼
    [isELIgnored="boolean"]  是否忽略EL表示式,false為忽略
    %>

    指令include:<%@ include file="頁面相對路徑"%> include指令可以包含頁面,當網站內多個網頁用了同樣的部分時使用,比如淘寶、京東等網頁的底部內容大多數網頁都存在,幾乎沒有變動內容,就可以通過include插入相同的部分。 include指令(靜態包含(編譯時包含),它包含的所有jsp會編譯成一個servlet); 注:動態包含(執行時包含): 在java程式碼裡 request.getRequestDispatcher(url).include(request,response);      靜、動態包含取捨:建議使用靜態包含,因為動態包含是執行時包含,效能上會差一點;taglib指令:後續補充;

  5. jsp標籤 常用jsp標籤:
    <jsp:forawrd page="/.../"></jsp:forward>
    <jsp:include page="/.../"></jsp:include>
    <jsp:param name="param_name" value="xxxx"></jsp:param>
    
    <!--<jsp:forawrd>和<jsp:include>都是動態包含,開發中最好多用靜態包含,而不是動態包含
    
    當使用<jsp:forawrd> 和 <jsp:include>引入或請求其他資源時,通過<jsp:param>傳遞引數,引數還可以是指令碼表示式
    <jsp:param name="param_name" value="param_value | <%= expression %>">
    -->
  6. jsp內建物件 建立jsp頁面時,web應用匯給jsp傳遞九大物件即內建物件,分別是,
    內建物件名          型別
    request	   HttpServletRequest
    response       HttpServletResponse
    config         ServletConfig
    application    ServletContext
    session        HttpSession
    exception      Throwable
    page           Object(this)
    out            JspWriter
    pageContext    PageContext 

     out物件:      out隱式物件用於向客戶端傳送文字資料。out物件是通過呼叫ageContext物件的getOut方法返回的,與ServletResponse.getWriter方法返回的printWriter物件相似,jspWriter相當於一種帶快取功能的PringtWriter,設定JSP頁面的page指令的buffer屬性可以調整他的快取大小,甚至關閉。       只有向out物件寫入內容,並滿足以下之一時,out物件才呼叫ServletResponse.getWriter方法,通過該方法返回的PrintWriter物件將out物件的緩衝區中的內容真正寫入到servlet 引擎提供的快取區中;

     1.設定age命令的buffer屬性關閉了out物件的快取功能;      2.out物件的快取區已滿      3.整個jsp頁面結束

   pageContext物件:

   這個物件是jsp中最重要的一個物件,它代表jsp頁面的執行環境;

這個物件不僅封裝了對其他8大隱式物件的應用,它自身還是一個域物件,可以用來儲存資料。丙炔,這個物件還封裝了web'開發中經常涉及的一些常用操作, 例如引入和跳轉其他資源、檢索其他域物件中你的屬性等。

   通過pageContext獲得其他物件:

getException方法返回exception隱式物件;

getPage方法返回page隱式物件;

getResponse方法返回response隱式物件;

getServletConfig方法返回config隱式物件;

getServletContext方法返回application隱式物件;

getSession方法返回session隱式物件;

getOut方法返回out隱式物件;

pageContext取得八大物件的方法在開發中有著特殊意義,這個技術用在自定義標籤開發中,因為jsp頁面中不應該出現任何一行java程式碼,如果沒有這個技術那麼為了獲取資料就可能無法避免在jsp頁面中的使用java程式碼,這樣的jsp將會是格式不良好的jsp。pageContext物件還是一個域物件:

在四大域中pageContext域的作用範圍是:整個jsp頁面。它是四個域中範圍最小的一個域。 ---關於四大域的知識總結連結---