JavaWeb - JSTL、EL 表示式
阿新 • • 發佈:2018-11-10
一、EL表示式
- 簡介
- EL表示式介紹及作用:Expression Language(表示式語言),目的是替代JSP頁面中的複雜程式碼。
- EL表示式語法:“${變數名}”。 - EL表示式的語法有兩個要素:$ 和 {}。
例如: 點號記法:${BeanName.beanProperty} 陣列記法:${BeanName[“beanProperty”]} //獲取輸出bean中的suser屬性值; ${userBean.suser} 或 ${userBean[“suser”]} //獲取map中key為id對應的值; ${mcType[“id”]}
- EL表示式可以使用 “.” 或者 “[]” 操作符在相應的作用域中取得某個屬性的值。
- EL是JSP2.0規範的一部分,只要容器支援Servlet2.4/JSP2.0,就可以在JSP2.0網頁中直接使用EL。
- 作用域
PS:使用EL的時候,預設會以一定順序(pageContext、request、session、application)搜尋四個作用域,將最先找到的變數值顯示出來。 - 運算子
- 開啟和關閉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>
- EL表示式教輔1——屬性的範圍
- EL表示式教輔2——“.”和“[]”的使用
- 待更新...
二、JSTL表示式
- JSTL介紹:JSP標準標籤庫(JavaServerPages Standard Tag Library),是由apache的jakarta小組來維護的。JSTL1.0 由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器組成。 如果要使用JSTL,則必須引用jstl.jar和 standard.jar兩個包。
- 與EL表示式關係:JSTL通常會與EL表示式合作實現JSP頁面的編碼。
- JSTL開發準備:在JSP頁面新增taglib指令:<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>。
- 為什麼要使用JSTL標籤?
- 在jsp中不建議直接書寫Java程式碼(規範性問題)。
- EL表示式雖然可以解決“不用書寫java程式碼”問題,但是對於複雜的資料(如陣列、集合等)取值會很麻煩。
- 使用JSTL標籤配合EL表示式能夠很好的解決取複雜型別資料的問題,簡化程式碼書寫。 - JSTL常用標籤介紹
- 通用標籤:set,out、remove
- 條件標籤:if、choose
- 迭代標籤:forEach - 通用標籤詳解
- 條件標籤詳解
<%@ 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>
- 迭代標籤詳解
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>
- JSTL標籤庫分類
- core 標記庫提供了定製操作,通過限制了作用域的變數管理資料,以及執行頁面內容的迭代和條件操作。它還提供了用來生成和操作 URL 的標記。
- format 標記庫定義了用來格式化資料(尤其是數字和日期)的操作。它還支援使用本地化資源束進行JSP頁面的國際化。
- xml 庫包含一些標記,這些標記用來操作通過XML表示的資料。
- sql 庫定義了用來查詢關係資料庫的操作。 -
優點
-
引入標籤庫
<%@ 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"%>
-
待更新...