1. 程式人生 > >JavaWeb - JSTL、EL 表示式

JavaWeb - JSTL、EL 表示式

一、EL表示式

  1. 簡介
      - EL表示式介紹及作用:Expression Language(表示式語言),目的是替代JSP頁面中的複雜程式碼。
      - EL表示式語法:“${變數名}”。
    這裡寫圖片描述
  2. EL表示式的語法有兩個要素:$ 和 {}。
    例如: 
    點號記法:${BeanName.beanProperty}
    陣列記法:${BeanName[“beanProperty”]}
    
    //獲取輸出bean中的suser屬性值;
    ${userBean.suser}  或  ${userBean[“suser”]}
    //獲取map中key為id對應的值;
    ${mcType[“id”]} 

     

  3. EL表示式可以使用 “.” 或者 “[]” 操作符在相應的作用域中取得某個屬性的值。
  4. EL是JSP2.0規範的一部分,只要容器支援Servlet2.4/JSP2.0,就可以在JSP2.0網頁中直接使用EL。
  5. 作用域
    這裡寫圖片描述
    PS:使用EL的時候,預設會以一定順序(pageContext、request、session、application)搜尋四個作用域,將最先找到的變數值顯示出來。
  6. 運算子
    這裡寫圖片描述
    這裡寫圖片描述
  7. 開啟和關閉EL表示式
    (1)開啟方法:在servlet2.4之後預設方法為false,即可以不寫或寫成 <%@ page isELIgnored="false" %>
    (2)關閉方法:<%@ page isELIgnored="true" %>
    附:還有一種批量禁用EL的方法,可以在WEB-INF/web.xml中使用jsp-property-group標籤批量禁用el,web.xml中進行如下配置。
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
        <jsp-config>
            <jsp-property-group>
                <url-pattern>*.jsp</url-pattern>
                <el-ignored>true</el-ignored>
            </jsp-property-group>
        </jsp-config>
    </web-app>
  8. EL表示式教輔1——屬性的範圍


  9. EL表示式教輔2——“.”和“[]”的使用


  10. 待更新...

     


 

二、JSTL表示式

  1. JSTL介紹:JSP標準標籤庫(JavaServerPages Standard Tag Library),是由apache的jakarta小組來維護的。JSTL1.0 由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器組成。 如果要使用JSTL,則必須引用jstl.jar和 standard.jar兩個包。
  2. 與EL表示式關係:JSTL通常會與EL表示式合作實現JSP頁面的編碼。
  3. JSTL開發準備:在JSP頁面新增taglib指令:<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>。
  4. 為什麼要使用JSTL標籤?
     - 在jsp中不建議直接書寫Java程式碼(規範性問題)。
     - EL表示式雖然可以解決“不用書寫java程式碼”問題,但是對於複雜的資料(如陣列、集合等)取值會很麻煩。
     - 使用JSTL標籤配合EL表示式能夠很好的解決取複雜型別資料的問題,簡化程式碼書寫。
  5. JSTL常用標籤介紹
     - 通用標籤:set,out、remove
     - 條件標籤:if、choose
     - 迭代標籤:forEach
  6. 通用標籤詳解
  7. 條件標籤詳解
    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>jstl中的if標籤和choose標籤</title>
    </head>
    <body>
    	<c:set var="age" value="12" scope="request"></c:set>
    	<!-- if標籤:
    		test:接判斷的條件,如果條件為true,這執行標籤體中的內容
    	-->
    	<%-- <c:if test="${age==12 }">
    		您的年齡為12歲
    	</c:if>
    	hello world --%>
    
    	<hr>
    
    	<!-- choose標籤 -->
    	<c:choose>
    		<c:when test="${age==12 }">
    		您的年齡為12歲
    		</c:when>
    		<c:otherwise>
    		您的年齡不為12歲
    		</c:otherwise>
    	</c:choose>
    </body>
    </html>

     

  8. 迭代標籤詳解
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	//1、首先建立一個List集合,我們往這個List集合中存放多條資料
    	Map<String,Object> datamap1=new HashMap<String,Object>();
    	datamap1.put("shopName", "聯想筆記本");
    	datamap1.put("address", "北京");
    	datamap1.put("price", 4999.99);
    	Map<String,Object> datamap2=new HashMap<String,Object>();
    	datamap2.put("shopName", "神州筆記本");   
    	datamap2.put("address", "南京");
    	datamap2.put("price", 3999.99);
    	List<Map<String,Object>> lists=new ArrayList<Map<String,Object>>();
    	lists.add(datamap1);
    	lists.add(datamap2);
    	//2、將存在多條資料的List集合儲存到request域中去
    	request.setAttribute("lists", lists);
    	//3、我們再將5.jsp中取出request域中存放的list集合
    	request.getRequestDispatcher("/5.jsp").forward(request, response);
    }
    <%@ page language="java" contentType="text/html; charset=utf-8"
    	pageEncoding="utf-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>通過jstl和EL表示式迭代List集合</title>
    </head>
    <body>
    	<c:forEach items="${lists }" var="Map">
    		${Map.shopName}<br/>
    		${Map.address}<br/>
    		${Map.price}<br/>
    	</c:forEach>
    </body>
    </html>
  9. JSTL標籤庫分類
     

    這裡寫圖片描述
     - core 標記庫提供了定製操作,通過限制了作用域的變數管理資料,以及執行頁面內容的迭代和條件操作。它還提供了用來生成和操作 URL 的標記。 
     - format 標記庫定義了用來格式化資料(尤其是數字和日期)的操作。它還支援使用本地化資源束進行JSP頁面的國際化。 
     - xml 庫包含一些標記,這些標記用來操作通過XML表示的資料。
     - sql 庫定義了用來查詢關係資料庫的操作。

  10. 優點
    這裡寫圖片描述

  11. 引入標籤庫
     

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
  12. 待更新...