天天看點

JSP模式&EL&JSTL(1)

  1. EL表達式的概述

    1.在JSP開發中,為了擷取Servlet域對象中存儲的資料,經常要書寫很多代碼,這樣做會使jsp頁面混亂,難以維護,為此,JSP2.0版本中提供了EL表達式,它是一種簡單的資料通路語言

  2. 什麼是EL

    1.EL可以簡化JSP的書寫方式,是以在JSP學習中,掌握EL是相當重要的,使用EL首先要學習EL表達式.首先要學習它 的文法.EL表達式很簡單,都是從”${“符号開始的,”}”結束的具體格式如下

${表達式}
           
2.EL的使用:内置對象
 内置對象名稱
 pageScope    page作用域
 requestScope    request作用域
 sessionScope    session作用域
 applicationScope    application作用域
 param    擷取一個參數
 paramValues    擷取一組參數
 header   獲得一個請求頭
 headerValues    獲得一組請求頭
 pageContext  JSP上下文對象
 initParam   全局初始化參數
 cookie    cokkie
           
  • 獲得指定作用域對象
<%--初始化資料--%>
<%
    pageContext.setAttribute("name","pValue");
    session.setAttribute("name","sValue");
    request.setAttribute("name","rValue");
    application.setAttribute("name","aValute");
%>
<%--使用jsp腳本擷取資料--%>
    <%=pagetContext.getAttribute("name")%><!-- 沒有找到傳回null -->
    <%=session.getAttribute("name")%>
    <%=request.getAttribute("name")%>
    <%=application.getAttribute("name")%>
<% s使用EL表達式%>
    ${pageScope.name}<!-- 傳回的是"" -->
    ${requestScope.name}
    ${sessionScope.name}
    ${applicationScope.name}
<%--依次獲得資料--%>
    ${name}<!--底層使用 pageContext.getAttribute("name"),依次從page,request,session,application擷取,如果沒有傳回null如果找到就立馬停止查詢-->
           
  • 請求參數
//請求路徑:/項目名/index.jsp?username=admin&hobby=chouyan&hobby=hejiu
<%--
    param.xxx  對應 request.getParamter("xxx");
    params.xxx 對應 request.getParamters("xx");
--%>
<%
    ${param.username}<br/>
    ${param.hobby}<br/><%--擷取第一個參數--%>
    ${paramValues.hobby}<br/><%--擷取一個數組--%>
    ${paramValues.hobby[]}<%-如果是數組,用下标擷取-%>
%>
           
  • 請求頭
<%--
    header.xxx  對應request.getHeader("xxx"); 
    headerValues.xxx 對象request.getHeaders("xxx");
--%>
    ${header.acept}<br/>
    ${header.accept-Encoding}<br/><%--非法的,有異常的,"-"被解析成減号.使用"/"進行單個EL表達式轉義--%>
    ${header['accept-Encoding']}<br/>
    ${headerValues['accept-Encoding'][]}
           
  • pageContext
<%--
    pageContext對應pageContext對象
    jsp:<%=((HttpServletRequest)pageContext.getRequest).getContextPath%><br/>
    EL:${pageContext.request.contextPath}
--%>
           
  • cookie
<%--
    cookie沒有對應的api.底層使用request.getCookies()擷取所有的cookie,然後周遊放到Map中Map<name,obj>
-%>
    ${cookie}</br><%--擷取所有cookie Map存儲--%>
    ${cooke.company}<%--map.key對應的Value--%>
    ${cookie.company.name}<%--通過JavaBean 屬性獲得屬性,獲得cookie的名稱,對應方法getName()--%>
           
  • “.”和”[]”的差別
1) []用于有下标的資料(數組,集合) .用于有屬性的資料(map,對象)
2) 如果屬性名中包含有特殊的字元.必須使用[]