1. 程式人生 > >javaweb之jsp三大指令

javaweb之jsp三大指令

JSP三大指令
一個jsp頁面中,可以有0~N個指令的定義!

  1. page --> 最複雜:<%@page language=“java” info=“xxx”…%>
  • pageEncoding和contentType:

    pageEncoding:它指定當前jsp頁面的編碼,只要不說謊,就不會有亂碼!在伺服器要把jsp編譯成.java時需要使用pageEncoding!
    contentType:它表示新增一個響應頭:Content-Type!等同與response.setContentType(“text/html;charset=utf-8”);
    如果兩個屬性只提供一個,那麼另一個的預設值為設定那一個。
    如果兩個屬性都沒有設定,那麼預設為iso

  • import:導包!可以出現多次
  • errorPage和isErrorPage

    errorPage:當前頁面如果丟擲異常,那麼要轉發到哪一個頁面,由errorPage來指定
    isErrorPage:它指定當前頁面是否為處理錯誤的頁面!當該屬性為true時,這個頁面會設定狀態碼為500!而且這個頁面可以使用9大內建物件中的exception!

<error-code>404</error-code>
<location>/error/errorPage.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error/errorPage.jsp</location>
  </error-page>
  <error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/index.jsp</location>
  </error-page>
  • autoFlush和buffer

    autoFlush:指定jsp的輸出流緩衝區滿時,是否自動重新整理!預設為true,如果為false,那麼在緩衝區滿時丟擲異常!
    buffer:指定緩衝區大小,預設為8kb,通常不需要修改!

  • isELIgnored:是否忽略el表示式,預設值為false,不忽略,即支援!
  • 基本沒有:

    language:指定當前jsp編譯後的語言型別,預設值為java。
    info:資訊!
    isThreadSafe:當前的jsp是否支援併發訪問!
    session:當前頁面是否支援session,如果為false,那麼當前頁面就沒有session這個內建物件!
    extends:讓jsp生成的servlet去繼承該屬性指定的類!

  1. include --> 靜態包含
  • 與RequestDispatcher的include()方法的功能相似!
  • <%@include%> 它是在jsp編譯成java檔案時完成的!他們共同生成一個java(就是一個servlet)檔案,然後再生成一個class!
  • RequestDispatcher的include()是一個方法,包含和被包含的是兩個servlet,即兩個.class!他們只是把響應的內容在執行時合併了!
  • 作用:把頁面分解了,使用包含的方式組合在一起,這樣一個頁面中不變的部分,就是一個獨立jsp,而我們只需要處理變化的頁面。
  1. taglib --> 匯入標籤庫
  • 兩個屬性:

    prefix:指定標籤庫在本頁面中的字首!由我們自己來起名稱!
    uri: 指定標籤庫的位置!
    <%@taglib prefix=“s” uri="/struts-tags"%> 字首的用法<s:text>

=========================================

九個內建物件

  • out --> jsp的輸出流,用來向客戶端響應
  • page --> 當前jsp物件! 它的引用型別是Object,即真身中有如下程式碼:Object page = this;
  • config --> 它對應真身中的ServletConfig物件!
  • pageContext --> 一個頂9個!
  • request --> HttpServletEequest
  • response --> HttpServletResponse
  • exception --> Throwable
  • session --> HttpSession
  • application --> ServletContext
  1. pageContext
  • 一個頂9個!
  • Servlet中有三大域,而JSP中有四大域,它就是最後一個域物件!

    ServletContext:整個應用程式
    session:整個會話(一個會話中只有一個使用者)
    request:一個請求鏈!
    pageContext:一個jsp頁面!這個域是在當前jsp頁面和當前jsp頁面中使用的標籤之間共享資料!
    域物件
    代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE);
    全域查詢:pageContext.findAttribute(“xxx”);從小到大,依賴查詢!
    獲取其他8個內建物件:

=========================================

JSP動作標籤
  這些jsp的動作標籤,與html提供的標籤有本質的區別。
  * 動作標籤是由tomcat(伺服器)來解釋執行!它與java程式碼一樣,都是在伺服器端執行的!
  * html由瀏覽器來執行!
* jsp:forward:轉發!它與RequestDispatcher的forward方法是一樣的,一個是在Servlet中使用,一個是在jsp中使用!
* jsp:include:包含:它與RequestDispatcher的include方法是一樣的,一個是在Servlet中使用,一個是在jsp中使用!
> %@includejsp:include有什麼不同!
* jsp:param:它用來作為forward和include的子標籤!用來給轉發或包含的頁面傳遞引數!

=========================================

JavaBean

javaBean的規範:

  1. 必須要有一個預設構造器
  2. 提供get/set方法,如果只有get方法,那麼這個屬性是隻讀屬性!
  3. 屬性:有get/set方法的成員,還可以沒有成員,只有get/set方法。屬性名稱由get/set方法來決定!而不是成員名稱!
  4. 方法名稱滿足一定的規範,那麼它就是屬性!boolean型別的屬性,它的讀方法可以是is開頭,也可以是get開頭!

內省:
內省類 --> Bean資訊 --> 屬性描述符 --> 屬性的get/set對應的Method! — > 可以反射了!


commons-beanutils,它是依賴內省完成!

  • 導包:

    commons-beanutils.jar
    commons-logging.jar

BeanUtils.getProperty(Object bean, String propertyName)
BeanUtils.setProperty(Object bean, String propertyName, String propertyValue)
BeanUtils.populate(Map map, Object bean)

CommontUtils.toBean(Map map, Class class)


jsp中與javaBean相關的標籤!

  • jsp:useBean --> 建立或查詢bean
    • <jsp:useBean id=“user1” class=“cn.itcast.domain.User” scope=“session”/> 在session域中查詢名為user1的bean,如果不存在,建立之
    • <jsp:useBean id=“user1” class=“cn.itcast.domain.User” scope=“session”/>
  • jsp:setProperty
    • <jsp:setProperty property=“username” name=“user1” value=“admin”/> 設定名為user1的這個javabean的username屬性值為admin
  • jsp:getProperty
    • <jsp:getProperty property=“username” name=“user1”/> 獲取名為user1的javabean的名為username屬性值

=========================================

EL表示式

  1. EL是JSP內建的表示式語言!
  • jsp2.0開始,不讓再使用java指令碼,而是使用el表示式和動態標籤來替代java指令碼!
  • EL替代的是<%= … %>,也就是說,EL只能做輸出!
  1. EL表示式來讀取四大域
  • ${xxx},全域查詢名為xxx的屬性,如果不存在,輸出空字串,而不是null。
  • p a g e S c o p e . x x x {pageScope.xxx}、 {requestScope.xxx}、 s e s s i o n S c o p e . x x x {sessionScope.xxx}、 {applicationScope.xxx},指定域獲取屬性!
  1. javaBean導航
    <%
    Address address = new Address();
    address.setCity(“北京”);
    address.setStreet(“西三旗”);

    Employee emp = new Employee();
    emp.setName(“李小四”);
    emp.setSalary(123456);
    emp.setAddress(address);

    request.setAttribute(“emp”, emp);
    %>

使用el獲取request域的emp

${requestScope.emp.address.street }
  1. EL可以輸出的東西都在11個內建物件中!11個內建物件,其中10個是Map!pageContext不是map,它就是PageContext型別,1個項9個。
  • 我們已經學習了四個

  • param:對應引數,它是一個Map,其中key引數名,value是引數值,適用於單值的引數。

  • paramValues:對應引數,它是一個Map,其中key引數名,value是多個引數值,適用於多值的引數。

  • header:對應請求頭,它是一個Map,其中key表示頭名稱,value是單個頭值,適用於單值請求頭

  • headerValues:對應請求頭,它是一個Map,其中key表示頭名稱,value是多個頭值,適用於多值請求頭

  • initParam:獲取內的引數!

    xxx
    XXX


    yyy
    YYY

    ${initParam.xxx}

  • cookie:Map<String,Cookie>型別,其中key是cookie的name,value是cookie物件。 ${cookie.username.value}

  • pageContext:它是PageContext型別!${pageContext.request.contextPath}

=========================================

EL函式庫(由JSTL提供的)

  • 匯入標籤庫:<%@ tablib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions”%>
    String toUpperCase(String input):把引數轉換成大寫
    String toLowerCase(String input):把引數轉換成小寫
    int indexOf(String input, String substring):從大串,輸出小串的位置!
    boolean contains(String input, String substring):檢視大串中是否包含小串
    boolean containsIgnoreCase(String input, String substring):忽略大小寫的,是否包含
    boolean startsWith(String input, String substring):是否以小串為字首
    boolean endsWith(String input, String substring):是否以小串為字尾
    String substring(String input, int beginIndex, int endIndex):擷取子串
    String substringAfter(String input, String substring):獲取大串中,小串所在位置後面的字串
    substringBefore(String input, String substring):獲取大串中,小串所在位置前面的字串
    String escapeXml(String input):把input中“<”、">"、"&"、"’"、""",進行轉義
    String trim(String input):去除前後空格
    String replace(String input, String substringBefore, String substringAfter):替換
    String[] split(String input, String delimiters):分割字串,得到字串陣列
    int length(Object obj):可以獲取字串、陣列、各種集合的長度!
    String join(String array[], String separator):聯合字串陣列!

=========================================

自定義函式庫

  • 寫一個java類,類中可以定義0~N個方法,但必須是static,而且有返回值的!

  • 在WEB-INF目錄下建立一個tld檔案

    fun
    cn.itcast.fn.MyFunction
    java.lang.String fun()

  • 在jsp頁面中匯入標籤庫
    <%@ taglib prefix=“it” uri="/WEB-INF/tlds/itcast.tld" %>

  • 在jsp頁面中使用自定義的函式:${it:fun() }