JSP簡介

1、JSP概述:

    一、由來:
    • JSP(Java Server Page):爲了簡化Servlet的工做,新推出的一種新技術,也能夠說是Servlet的替代品。1997年由SUN公司推出了Servlet API 以及第一款Java Web服務器。
    二、JSP技術:
    • 1999年Sun公司推出了JSP1.0,做爲對Servlet的補充。JSP包含不少技術,如Java Bean,自定義標籤(Custom Tags),EL表達式(Expression Language),JSTL標準標籤庫(Java Standard Tag Library)等。
    三、JSP工做原理:
    • JSP是一種Servlet,可是與HttpServlet的工做方式不太同樣,
      • HttpServlet是先由源代碼編譯爲class文件後部署到服務器的,是先編譯後部署。
      • JSP則是先部署源代碼後編譯爲class文件的,是先部署後編譯。

2、JSP語法:

  • JSP是HTML代碼與Java代碼的混合體,其中HTML部分遵循HTML語法,Java部分遵循Java語法
    一、JSP腳本:
    • 在JSP頁面中寫Java代碼稱爲JSP腳本。JSP腳本必須使用 "<%    %>"括起來,Java代碼寫在其中,而且必須遵循Java語法
    二、JSP輸出:
    • JSP中使用 「 <%=    %> 」輸出各類類型數據,包括int、double、boolean、String、Object
    三、JSP指令:JSP指令用來聲明JSP頁面的一些屬性等,例如編碼方式、文檔類型。JSP指令使用符號「  <%@       %>  」
    
    
    
    
    
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    • page指令:
      • page指令是最經常使用的指令,用來聲明JSP頁面的屬性等。JSP指令的多個屬性能夠寫在一個page指令裏,也能夠寫在多個指令裏。
      • 注意:不管在哪一個page指令裏的屬性,任何page容許的屬性都只能出現一次,不然會出現編譯錯誤。import能夠出現屢次
    • include指令:
      • include指令比較簡單,只有一種形式:
               
               
               
               
               
        <%@ include file="relativeURL" %><!-- relativeURL 爲本應用程序內另外一個JSP文件或者HTML文件的路徑 -->
      • JSP中還提供了另外一種包含文件的行爲:
               
               
               
               
               
        <jsp:include page="relativeURL" /><!-- 該命令與include指令的使用方法基本一致 -->
    • taglib指令:
      • JSP支持標籤技術,使用標籤功能可以實現代碼重用,不多量的代碼就能夠實現很複雜的顯示效果。
      • 要使用標籤功能必須先聲明標籤庫以及標籤前綴。
      • taglib指令有兩個屬性:uri爲類庫的地址,prefix爲標籤的前綴。
               
               
               
               
               
        <!-- 這裏使用的是JSTL 須要兩個jar包的支持 --><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    四、JSP行爲:
  • JSP行爲(JSP  Action)是一組JSP內置的標籤。JSP行爲是對經常使用的JSP功能的抽象與封裝,包括兩種:自定義JSP行爲和標準JSP行爲。
    • <jsp:include /> 行爲:用於運行時包含某個文件。若被包含的文件爲JSP程序,則先會執行JSP程序,而後將執行的結果保健進來。
    • 語法:<jsp:include page="relativeURL" flush="true">
      • 屬性page是必需的,表示被包含的文件相對路徑
      • 屬性flush可選,,取值有true或false,默認爲false,設置讀入被保存文件前是否清空緩存。
    • <jsp:forward />行爲:它是對forward()方法的一個封裝
      • Servlet中使用如下方式跳轉(轉發)到另一個Servlet或者另外一個文件
               
               
               
               
               
        //getRequestDispatcher(String str)方法中傳入的是目標地址request.getRequestDispatcher("index.jsp").forward(request, response);
      • JSP中使用以下方式:
               
               
               
               
               
        <jsp:forward page="index.jsp"/>

3、JSP隱藏對象

  • JSP中內置了 9 個隱藏對象:out、request、response、config、session、application、page、pageContext、exception。
    一、out輸出流對象:
    • 隱藏對象out是  javax.servlet.jsp.JspWriter類的實例。服務器向客戶端輸出的字符類內容能夠經過out對象輸出。
    • out對象的經常使用方法:
      • void  append(CharSequence  cs):向out緩存中擴展字符類輸出。當緩存滿或者執行out.flush()操做時,這些內容會輸出到客戶端瀏覽器
      • void  clear():清空要輸出的內容
      • void  flush():將緩存內容flush到客戶端瀏覽器
      • void  println(String  str):向客戶端輸出內容
      • boolean  isAutoFlush():返回緩存滿時 是否自動flush,若是爲false,緩存滿時會拋出異常
      • int  getBufferSize():返回緩存大小,單位/KB
      • int  getRemaining():返回緩存剩餘大小,單位/KB
    二、request請求對象:
    • 隱藏對象 request是 javax.servlet.ServletRequest 類的實例,表明着客戶端的請求
    • request 包含客戶端信息以及請求信息,如:請求哪一個文件,附帶的地址欄參數等
    • 客戶端每次請求都會產生一個request實例
    • request對象的經常使用方法:
      • void  setAttribute(String  name,Object  value):在request中保存一個對象。本頁面或者forward以後的頁面中能夠經過getAttribute(String  name)方法獲取該對象
      • Object  getAttribute(String  name):從request中獲取name對應的對象
      • String  getMethod():返回提交方式,通常爲GET或者POST
      • String  getParameter(String  key):返回提交的參數
      • String[]  getParameterValues(String  key):返回提交的多個同名參數值,以數組的形式返回
      • Enumeration  getParameterNames():返回所提交的參數名稱
      • Cookie[]   getCookies():返回全部的Cookie
      • String  getContextPath():返回應用程序的路徑
      • String  getRequestURI():返回請求的URI路徑
      • void  setCharacterEncoding(String  encoding):設置request的編碼方式
      • String  getHeader(String  name):獲取request頭信息
      • Enumeration  getHeaderNames():返回全部的request頭名稱
      • Dispatcher  getRequestDispatcher():返回 Dispatcher對象。 Dispatcher  對象能夠執行forward操做
      • HttpSession  getSession():返回HttpSession對象
    三、response響應對象:
    •  隱藏對象response是  javax.servlet.ServletResponse 類的實例,表明着客戶端的響應
    • 服務器的任何輸出都經過response對象發送對客戶端瀏覽器,每次服務器都會響應一個response實例
    • response對象的經常使用方法:
      • void  clear():清空暫存在緩衝區的輸出
      • void  addCookie(Cookie  cookie):設置Cookie
      • OutputStream  getOutputStream():返回服務器輸出流,能夠經過該輸出流輸出二進制信息
      • void  sendRedirect(String  url):使本頁面 redirect 到另外一個頁面
      • void  setContextType(String  contextType):設置文檔類型,HTML的文檔類型爲 text/html
      • PrintWriter  getOut():返回out對象
      • void  setHeader(String  name, String  value):設置 response 頭信息
      • void  setStatus(int  status):設置 response 狀態碼
    四、config配置對象:
    • 隱藏對象 config 是  javax.servlet.ServletConfig 類的實例,ServletConfig 封裝了配置在 web.xml 中初始化JSP參數
    • JSP中經過 config 獲取這些參數,每一個JSP文件共有一個config對象
    • config對象的經常使用方法:
      • String  getInitParameter(String  name):返回配置在web.xml中的初始化參數
      • Enumeration  getInitParameterNames():返回全部的初始化參數名稱
      • ServletContext  getServletContext():返回ServletContext 對象
      • String  getServletName():返回Servlet的名稱
    五、session會話對象:
    • 隱藏對象session是 javax.servlet.http.HttpSession 類的實例
    • session 與 cookie 是記錄客戶訪問信息的兩種機制
      • session 用於在服務器端保存用戶信息
      • cookie用於在客戶端保存用戶信息
    • Servlet中須要經過 request.getSession() 來獲取 session 對象,而JSP中能夠直接使用,若是JSP中配置了 <%@ page  session="false" %>,則隱藏對象session不可用
    • 每個用戶對應一個session對象
    • session對象的經常使用方法:
      • String  getId():返回session的ID
      • Object  getAttribute(String  name):返回session中屬性名爲name的對象
      • Enumeration   getAttributeNames():返回 session 的全部屬性名
      • long   getCreationTime():返回該session建立的時間
      • long  getLastAccessedTime():返回該session最後一次訪問的時間
      • int  getMaxInactiveInterval():返回session的最大容許的間隔時間,單位:秒
      • void   setAttribute(String  name, Object  value):設置 session
      • void   setMaxInactiveInterval(long  second):設置對打容許的時間間隔
    六、application應用程序對象:
    • 隱藏對象 application 是 javax.servlet.ServletContext 類的對象。 application封裝了JSP所在的 Web 應用程序的信息,eg: web.xml 中配置的全局的初始化信息
    • Servlet中 application 對象須要經過ServletConfig.getServletContext() 來獲取,整個 Web 應用程序對應一個 application對象
    • application 對象的經常使用方法:
      • Object  getAttribute(String   name): 返回application中屬性名爲 name的對象
      • Enumeration  getAttributeNames(): 返回application中的全部屬性名
      • void  setAttribute(String  name, Object  value): 設置 application 屬性
      • void  removeAttribute(String  name): 移除 application 屬性
      • String  getInitParameter(String  name): 返回全局初始化參數
      • Enumeration  getInitParameterNmaes(): 返回全部的全局初始化參數
      • String  getMimeType(String  filename): 返回文件的文檔類型。eg: getMimeType("index.html") 將返回 "text/html"
      • String  getRealPath(String  relativePath): 返回 web 應用程序內相對網址對應的絕對路徑
    七、page 頁面對象:
    • 隱藏對象 page 爲 javax.servlet.jsp.HttpJspPage 類的實例。
    • page 對象表明當前JSP頁面,是當前JSP編譯後的Servlet類的對象
    • page 至關於普通 Java類中的關鍵字 this
    八、pageContext 頁面上下文對象:
    • 隱藏對象 pageContext 爲 javax.servlet.jsp.PageContext 類的實例
    • pageContext 對象表明當前JSP頁面編譯後的內容,經過pageContext能獲取到JSP中的資源
    • pageContext對象的經常使用方法:
      • Object  findAttribute(String  name): 在JSP頁面中查找變量
      • void  forward(String  url): forward 到另外一個頁面
      • Object  getAttribute(String  name): 返回屬性
      • Object  getAttribute(String  name, int  scope): 返回指定範圍內的屬性,範圍包括(PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE)
      • JspWriter  getOut(): 返回 out 對象
      • Object  getPage(): 返回 page 對象
      • ServletRequest  getRequest(): 返回 request 對象
      • ServletResponse   getResponse(): 返回response 對象
      • HttpSession  getSession(): 返回 session 對象
    九、exception 異常對象:
    • 隱藏對象 exception 爲 java.lang.Exception 類的對象
    • exception 封裝了JSP中拋出的異常信息,要想使用 exception 隱藏對象,須要設置 <%@  page  isErrorPage="true"%>
    • 隱藏對象 exception 一般被用來處理錯誤頁面

4、EL表達式

  • JSP中可使用 EL(Expression Language)表達式,EL表達式是使用 「${ }」括起來的腳本,用來更方便的讀取對象。
  • EL表達式寫在JSP的HTML代碼中,而不能寫在 「<%    %>」 括起來的腳本中
    一、EL表達式運算:
    • EL表達式支持簡單的運算,包括:加(+)、減(-)、乘(*)、除(/ 或者 div)、取餘(% 或者 mod)、三目運算符(exp ? val1 : val2)等
    •       
            
            
            
            
      10 + 20 = ${10 + 20} <br> 10 - 20 = ${10 - 20} <br> 10 * 20 = ${10 * 20} <br> 10 / 20 = ${10 / 20} <br> 10 div 20 = ${10 div 20} <br> 10 % 20 = ${10 % 20} <br> 10 mod 20 = ${10 mod 20} <br> 10 與 20 誰大:${10 > 20 ? 10 : 20} <br> 10 與 20 誰小:${10 <= 20 ? 10 : 20} <br>
    •  EL表達式也支持簡單的比較運算,包括:大於(> 或者 gt)、小於(< 或者 lt)、等於(==  或者 eq)、不等於(!= 或者 ne)、大於等於(>= 或者 ge)、小於等於(<= 或者 le)等
    •       
            
            
            
            
      10 大於 20 ?:${10 > 20} <br> 10 大於 20 ?:${10 gt 20} <br> 10 小於 20 ?:${10 < 20} <br> 10 小於 20 ?:${10 lt 20} <br> 10 等於 20 ?:${10 == 20} <br> 10 等於 20 ?:${10 eq 20} <br> 10 不等於 20 ?:${10 != 20} <br> 10 不等於 20 ?:${10 ne 20} <br> 10 大於等於 20 ?:${10 >= 20} <br> 10 大於等於 20 ?:${10 ge 20} <br> 10 小於等於 20 ?:${10 <= 20} <br> 10 小於等於 20 ?:${10 le 20} <br>
    • EL表達式的邏輯運算符,包括:與(&&  或者  and)、或(||  或者  or)、非(!  或者  not)等
    •       
            
            
            
            
      10 大於 20 而且 10 小於 20 ?:${10 > 20 && 10 < 20} <br> 10 大於 20 而且 10 小於 20 ?:${10 > 20 and 10 < 20} <br> 10 大於 20 或者 10 小於 20 ?:${10 > 20 || 10 < 20} <br> 10 大於 20 或者 10 小於 20 ?:${10 > 20 or 10 < 20} <br> 非 10 大於 20 ?:${! (10 > 20)} <br> 非 10 大於 20 ?:${not (10 > 20)} <br>


附件列表

相關文章
相關標籤/搜索