EL運算式,

來源:互聯網
上載者:User

EL運算式,

1、EL是JSP內建的運算式語言。

  • jsp2.0開始,不讓再使用Java指令碼,而是使用EL運算式和動態標籤來替代Java指令碼
  • EL替代的是<%=....%>,也就是說,EL只能做輸出。

2、EL運算式來讀取四大域

  • ${xxx},全域尋找名為xxx 的屬性,如果不存在,輸出Null 字元串,而不是null。
  • ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域擷取屬性。

3、JavaBean導航

 1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <%@ page import="domain.Employee,domain.Address" %> 3 <html> 4 <head> 5     <title>Title</title> 6 </head> 7 <body> 8     <% 9       Address address = new Address();10       address.setCity("深圳");11       address.setStreet("南山");12 13       Employee emp = new Employee();14       emp.setName("張三");15       emp.setSalary(12312);16       emp.setAddress(address);17 18       request.setAttribute("emp",emp);19     %>20     <h3>使用el擷取request域的emp</h3>21 ${requestScope.emp.address.street}22 <!-- request.getAttribute("emp").getAddress().getStreet--><br/>23 ${emp.hehe}24 </body>25 </html>
 1 package domain; 2 public class Employee { 3     private String name; 4     private double salary; 5     private Address address; 6  7     public String getName() { return name; } 8     public void setName(String name) { this.name = name; } 9     public double getSalary() { return salary; }10     public void setSalary(double salary) { this.salary = salary; }11     public Address getAddress() { return address; }12     public void setAddress(Address address) { this.address = address; }13     @Override14     public String toString() {15         return "Employee{" +16                 "name='" + name + '\'' +17                 ", salary=" + salary +18                 ", address=" + address +19                 '}';20     }21     public String getHehe() { return  "呵呵"; }22 }
 1 package domain; 2  3 public class Address { 4     private String city; 5     private String street; 6  7     public String getCity() { return city; } 8     public void setCity(String city) { this.city = city; } 9     public String getStreet() { return street; }10     public void setStreet(String street) { this.street = street; }11     @Override12     public String toString() {13         return "Address{" +14                 "city='" + city + '\'' +15                 ", street='" + street + '\'' +16                 '}';17     }18 }

4、EL可以輸出的東西都11個內建對象中:其中10個是Map,不是map的是PageContext類型,一個頂9個。

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • param:對應參數,它是一個Map,其中key參數名,value是參數值,適用於單值得參數;
  • paramValues:對應參數,它是一個Map,其中key參數名,value是多個參數值,適用於多值得參數。參數從地址欄擷取;
  • <body>
    <%-- map.key這是el的文法,map['key']也可以操作map --%>
    ${param.username}<br/>
    ${paramValues.hobby[0]}
    ${paramValues.hobby[1]}
    </body>
  • header:對應要求標頭,它是一個Map,其中key表示頭名稱,value是單個頭值,適用於單值要求標頭。

 <body> ${header['User-Agent']}<br/> </body> 

  • haeaderValues:對應要求標頭,它是一個Map,其中key表示頭名稱,value是多個頭值,適用於多值要求標頭。
  • initParam:擷取<context-param>內的參數
  • <context-param>      <param-name>xxx</param-name>       <param-value>XXX</param-value></context-param>    <context-param>      <param-name>yyy</param-name>      <param-value>YYY</param-value></context-param>
    <body>
    ${initParam.xxx}
    </body>
  • cookie:Map<String,Cookie>類型,其中key是cookie的name,value是cookie對象,${cookie.username.value}
  • <body>${cookie.JSESSIONID}<br/>${cookie.JSESSIONID.name}<br/>${cookie.JSESSIONID.value}<br/></body>

  • pageContext:它是PageContext類型。
 1 <body> 2 <!-- 擷取項目名,無則為"/" --> 3 ${pageContext.request.contextPath} 4 <hr/> 5 <a href="${pageContext.request.contextPath}/el/a.jsp">點擊這裡</a> 6 <form action="${pageContext.request.contextPath}/cookie/a.jsp" method="post"> 7     <input type="submit" value="xxx"> 8 </form> 9 <hr/>10 ${pageContext.session.id}11 </body>
EL運算式 說明 描述
${pageContext.request.queryString} pageContext.getRequest().getQueryString(); 取得請求的參數字串
${pageContext.request.requestURL} pageContext.getRequest().getRequestURL(); 取得請求的URL,但不包括請求之參數字串
${pageContext.request.contextPath} pageContext.getRequest().getContextPath(); 服務的web application 的名稱
${pageContext.request.method} pageContext.getRequest().getMethod(); 取得HTTP 的方法(GET、POST)     
${pageContext.request.protocol} pageContext.getRequest().getProtocol(); 取得使用的協議(HTTP/1.1、HTTP/1.0)     
${pageContext.request.remoteUser} pageContext.getRequest().getRemoteUser(); 取得使用者名稱稱
${pageContext.request.remoteAddr } pageContext.getRequest().getRemoteAddr(); 取得使用者的IP 位址     
${pageContext.session.new} pageContext.getSession().isNew(); 判斷session 是否為新的     
${pageContext.session.id} pageContext.getSession().getId(); 取得session 的ID
${pageContext.servletContext.serverInfo} pageContext.getServletContext().getServerInfo(); 取得主機端的服務資訊

5、EL函數庫(由JSTL提供的)

  • 匯入標籤庫:
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
${fn:contains("abc","a")}<!-- true -->
函數 描述
boolean contains(String input,String substring) 測試輸入的字串是否包含指定的子串
boolean containsIgnoreCase(String input,String substring) 測試輸入的字串是否包含指定的子串,大小寫不敏感
int indexOf(String input,String substring) 返回指定字串在輸入字串中出現的位置
String toLowerCase(String input) 將字串中的字元轉為小寫
String toUpperCase(String input) 將字串中的字元轉為大寫
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) 返回字串在指定子串之後的子集
String substringBefore(String input,String substring) 返回字串在指定子串之前的子集
String escapeXml(String input) 跳過可以作為XML標記的字元("<"、">"、"&"、" ' "、“ " ”),即進行轉義
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) 將數組中的元素合成一個字串然後輸出

6、自訂函數庫

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

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

<function>      <name>fun</name>      <function-class>fn.MyFunction</function-class>      <function-signature>java.lang.String fun()</function-signature></function>

③在jsp頁面中匯入標籤庫

<%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld"%>

④在jsp頁面中使用自訂的函數:${it:fun()}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.