1. 程式人生 > >EL&JSTL

EL&JSTL

收集 aries 客戶端 alt 註冊 glib true 內部 hive

EL&JSTL(重要) 一、EL技術 1、EL表達式概述 EL(Express Language)表達式可以嵌入jsp頁面內部,建設jsp腳本的編寫,EL出現的目的是要替代jsp頁面腳本的編寫。(不能進行邏輯運算) 2、EL從域中取出數據(EL最重要的作用(90%以上)) EL最主要的作用是獲得四大域中的數據,格式${EL表達式} EL獲得pageContext域中的值:${pageContextScope.key);} EL獲得request域中的值:${requestScope.key);} EL獲得session域中的值:${sessionScope.key);}
EL獲得application域中的值:${applicationScope.key);} EL從四個域中獲得某個值${key;} ---同樣是依次從pageContext域,request域,session域,application域中 獲取屬性,在某個域中獲取後將不在向後尋找。 <!-- 模擬取域中的數據 --> <% //request存入一個字符串 request.setAttribute("company", "黑馬程序員"); //session域中存入一個對象 User user = new User();
user.setId(1); user.setName("zhangsan"); user.setPassword("123"); session.setAttribute("user", user); //application域(ServletContext)存入一個集合 List<User> list = new ArrayList<User>(); User user1 = new User();
user1.setId(2); user1.setName("lisi"); user1.setPassword("456"); list.add(user1); User user2 = new User(); user2.setId(3); user2.setName("wangwu"); user2.setPassword("789"); list.add(user2); application.setAttribute("list", list); %> <!-- jsp腳本取出域中的值 --> <%=request.getAttribute("company")%> <%out.write("<br>"); %> <% User sessionUser = (User) session.getAttribute("user"); out.write(sessionUser.getName());%> <%out.write("<br>"); %> <% List<User> appList = (List<User>) application.getAttribute("list"); for(User appUser : appList){ if(appUser.getId() == 3){ out.write(appUser.getName()); } } %> <!-- 使用EL表達式獲得域中的值 --> <%out.write("<br>"); %> ${requestScope.company} <%out.write("<br>"); %> ${sessionScope.user.name} <%out.write("<br>"); %> ${applicationScope.list[1].name} <%out.write("<br>"); %> <!-- 使用el表達式全域查找 --> ${company} <%out.write("<br>"); %> ${user.name } <%out.write("<br>"); %> ${list[1].name } 3、EL的內置對象11個(解決客戶端接收服務器數據問題) pageScope,requestScope,sessionScope,applicationScope ---- 獲取JSP中域中的數據 param,paramValues - 接收參數. --------相當於request.getParameter() rrquest.getParameterValues() header,headerValues - 獲取請求頭信息 ---------相當於request.getHeader(name) initParam - 獲取全局初始化參數 ---------相當於this.getServletContext().getInitParameter(name) cookie - WEB開發中cookie ----------相當於request.getCookies()---cookie.getName()---cookie.getValue() pageContext - WEB開發中的pageContext. ----------pageContext獲得其他八大對象 ${pageContext.request.contextPath} 相當於 <%=pageContext.getRequest().getContextPath%> 這句代碼不能實現 獲得WEB應用的名稱 4、EL執行表達式 例如: ${1+1} <!--empty 判斷某個對象是否為null 是null返回true--> ${empty user} ${user == null?true:false} 二、JSTL技術 1、JSTL概述 JSTL(JSP Standard Tag Library),JSP標準標簽庫,可以嵌入在jsp頁面中使用標簽的形式完成業務邏輯等功能。jstl出現的目的同el一樣也是要代替jsp頁面中的腳本代碼。JSTL標準標準標簽庫有5個子庫,但隨著發展,目前常使用的是他的核心庫。
標簽庫 標簽庫的URI 前綴
Core http://java.sun.com/jsp/jstl/core c
118N http://java.sun.com/jsp/jstl/fmt fmt
SQL http://java.sun.com/jsp/jstl/sql sql
XML http://java.sun.com/jsp/jstl/xml x
Functions http://java.sun.com/jsp/jstl/functions fn
核心使用就是Core標簽庫。 2、JSTL下載與導入 JSTL下載: 從Apache的網站下載JSTL的JAR包。進入“http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/”網址下載JSTL的安裝包。jakarta-taglibs-standard-1.1.2.zip,然後將下載好的JSTL安裝包 進行解壓,此時,在lib目錄下可以看到兩個JAR文件,分別為jstl.jar和standard.jar。其中,jstl.jar文件包含JSTL規範中定義的接口和相關類,standard.jar文件包含用於實現JSTL的.class文件以及JSTL中5個標簽庫描述符文件(TLD)。 jstl.jar standard.jar 然後將兩個jar包導入我們工作的lib中。 使用jsp的taglib指令導入核心標簽庫 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 快捷鍵:Alt+/ 3、JSTL核心庫的常用標簽 1)<c:if test=””>標簽 其中test是返回boolean的條件 <!-- test代表的返回boolean的表達式 --> <c:if test="${1==1}"> xxxxx </c:if> <c:if test="${1!=1}"> yyyyy </c:if> 首頁用戶登錄: <ol class="list-inline"> <!-- 用戶沒有登錄 --> <c:if test="${empty user}"> <li><a href="login.jsp">登錄</a></li> <li><a href="register.jsp">註冊</a></li> </c:if> <!-- 用戶已經登錄 --> <c:if test="${!empty user}"> <li>${user.name }</li> <li><a href="#">提出</a></li> </c:if> <li><a href="cart.jsp">購物車</a></li> <li><a href="order_list.jsp">我的訂單</a></li> </ol> 使用session保存用戶登錄信息。 2)<c:forEach>標簽 使用方式有兩種組合形式: <!-- forEach模擬 --> <!-- for(int i=0;i<=5;i++) {syso(i);} --> <c:forEach begin="0" end="5" var="i"> ${i}<br> </c:forEach> <!-- 模擬增強for productList--List<Product> --> <!-- for(Product product : productList){syso(product.getPname());} --> <!-- items:一個集合或數組,var代表集合中的某一個元素(自命名) --> <c:forEach items="${productList}" var="pro"> ${pro.pname} </c:forEach> <% //模擬List<String> strList List<String> strList = new ArrayList<String>(); strList.add("itcast"); strList.add("itheima"); strList.add("boxuegu"); strList.add("shandingyu"); request.setAttribute("strList", strList); //遍歷List<User>的值 List<User> userList = new ArrayList<User>(); User user1 = new User(); user1.setId(2); user1.setName("lisi"); user1.setPassword("123"); userList.add(user1); User user2 = new User(); user2.setId(3); user2.setName("wangwu"); user2.setPassword("123"); userList.add(user2); application.setAttribute("userList", userList); //遍歷Map<String,String>的值 Map<String,String> strMap = new HashMap<String,String>(); strMap.put("name", "lucy"); strMap.put("age", "18"); strMap.put("addr", "西三旗"); strMap.put("email", "[email protected]"); session.setAttribute("strMap", strMap); //遍歷Map<String,User>的值 Map<String,User> userMap = new HashMap<String,User>(); userMap.put("user1", user1); userMap.put("user2", user2); request.setAttribute("userMap", userMap); %> <h1>取出strList的數據</h1> <c:forEach items="${strList }" var="str"> ${str }<br/> </c:forEach> <h1>取出userList的數據</h1> <c:forEach items="${userList}" var="user"> user的name:${user.name }------user的password:${user.password }<br/> </c:forEach> <h1>取出strMap的數據</h1> <c:forEach items="${strMap }" var="entry"> ${entry.key }====${entry.value }<br/> </c:forEach> <h1>取出userMap的數據</h1> <c:forEach items="${userMap }" var="entry"> ${entry.key }:${entry.value.name }--${entry.value.password }<br/> </c:forEach> 練習: 遍歷Map<User,Map<String,User>>的值 entry.key-----User entry.value------List<String,User> Map<User,Map<String,User>> userMMap = new HashMap<User,Map<String,User>>(); 三、JavaEE的開發模式 1、什麽是模式? 模式在開發過程中總結出的“套路”,總結出的一套約定俗成的設計模式。 2、JavaEE經歷的模式 model1模式 技術組成:jsp+javaBean model1的弊端:隨著業務復雜性 導致jsp頁面比較混亂。 model2模式 技術組成:jsp+servlet+javaBean model2的優點:開發中 使用各個技術擅長的方面。 servlet:擅長處理java業務代碼。 jsp:擅長頁面的現實。 MVC:---- web開發的設計模式 M:Model---模型 javaBean:封裝數據 V:View-----視圖 jsp:單純進行頁面的顯示 C:Controller----控制器 Servelt:獲取數據--對數據進行封裝--傳遞數據-- 指派顯示的jsp頁面 3、JavaEE的三層架構 服務器開發時分為三層 web層:與客戶端交互。 service層:復雜業務處理。 dao層:與數據庫進行交互。 開發實踐時,三層架構通過包結構體現。 MVC與三層架構有什麽關系?
客戶端 服務器 DB
客戶端發起請求,發起訪問。 Web層 service層 dao層
servlet javaBean jsp struts2 springMVC 業務代碼 spring 數據庫操作的代碼 hibernate mybatis
4、使用三層架構完成商品列表的顯示 a、三層架構,包的實現,前綴:公司域名。例如:com.scalpel.xxx 其他包名:com.scalpel.web , com.scalpel.service, com.scalpel.dao, com.scalpel.domain, com.scalpel.utils。(基本這樣搭建,每個包下面可以再搭建更小的包。) b、業務分析:客戶端發起請求,發起訪問商品列表的請求----->web層servlet接收客戶端請求------>找service層ProductService------->dao層ProductDao------>到數據庫查找到數據----->List<Product>------>返回dao,service,web----->jsp顯示(el+jstl進行顯示)。 四、總結 EL表達式: 1、從域中取出數據${域中存儲的數據的name} 2、域中的內置對象,${pageContext.request.contextPath} 獲取web名稱 3、表達式 JSTL標簽(核心庫): 1、引入標簽<%@ taglib uri="" prefix="c"%> 2、<c: if test=""> 3、<c:forEach items="數組或集合" var="數組或集合中的每一個元素"> JavaEE三層架構+MVC: web層:收集頁面數據,封裝數據,傳遞數據,指定響應的jsp頁面。 service層:邏輯業務代碼的編寫。 dao層:數據庫的訪問代碼的編寫。

EL&JSTL