JAVA學習JSTL與EL

來源:互聯網
上載者:User

標籤:

一、基礎

1、EL(Expression Language):為了使jsp寫起來更加簡單,提供了在Jsp中簡化運算式的方法

2、JSTL:(JSP Standard Tag Library)jstl標準標籤庫,由apache實現

3、JSTL一般要配合EL運算式一起使用,由於在JSTL在賦值時會大量的使用EL,能夠說EL是JSTL的一種輔助。

4、在使用時:JSTL須要引入:jstl.jar和Standart.jar到WEB_INF/lib檔案夾下,可是僅僅使用EL運算式不須要引用不論什麼jar包,僅僅要JSP/SERVLET容器實現了J2EE1.4/Servlet2.4、Jsp2.0規範就能夠。

二、為什麼

在之前學習jsp的時候也說過是為了將html代碼和java代碼分離,可是大部分時候假設不進行限制,在jsp中調用java邏輯類是非常難避免的,所以我們有了JSTL來實現展示層與商務邏輯的分離,我們能夠通過JSTL實現:與servlet資料的互動,操作xml,格式化資料顯示和樣式顯示,Request中讀取資料,迴圈,自己定義函數等等

三、EL運算式:

1、基本的文法:${}:例:hello:${hello}<br>

2、內建對象:pageScope,requestScope,sessionScope,applicationScope(按預設搜尋順序排列)

3、指定搜尋:${requestScope.hello}

4、簡單一實例:

     事實上EL非常easy

      首先我們要寫的是servlet:servlet的代碼例如以下:

package com.tgb.jstl;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 測試EL運算式 * @author YoungJong * */public class JstlElServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stub//super.doGet(req, resp);//一般字元串req.setAttribute("hello", "Hello World");//結構Group group=new Group();group.setName("陳麗娜好樣的");User user=new User();user.setUsername("楊政");user.setAge(29);user.setGroup(group);req.setAttribute("user", user);//map    Map map=new HashMap();    map.put("k1", "v1");    map.put("k2", "v2");    req.setAttribute("map", map);            //數組    String[] strArray=new String[]{"a","b","c"};    req.setAttribute("str_array", strArray);        //對象數組    User[] users=new User[10];    for(int i=0;i<users.length;i++){    users[i]=new User();    users[i].setUsername("張三_"+i);    }    req.setAttribute("users", users);    //list    List userList=new ArrayList();    for(int i=0;i<10;i++){    User userl=new User();    userl.setUsername("李四_"+i);    userList.add(userl);    }    req.setAttribute("userList",userList);        req.getRequestDispatcher("/jstl_el.jsp").forward(req, resp);}}

       以下是在jsp中擷取的方法:

<body>   <h1>測試EL運算式</h1>   <hr>    <li>一般字元串</li><br>        hello(jsp指令碼):<%=request.getAttribute("hello") %><br>    hello(el運算式,文法:$和{}):${hello} <br>        <p>    <li>結構</li><br>    姓名:${user.username}<br>    年齡:${user.age }<br>    組名:${user.group.name}<br>    <p>    <li>取得map</li><br>    map.k1:${map.k1 }<br>    map.k2:${map.k2 }<br>        <p>    <li>字串數組</li><br>    strArray[1]:${str_array[1] }<br>        <p>    <li>對象數組</li><br>    users[5].username:${users[5].username }<br>        <p>    <li>List</li><br>    userList[6]:${userList[6].username }<br>            <p>    <li>運算式對運算子的支援</li><br>     1+1=${1+1 }<br>     10/5=${10/5 }<br>         10 % 3=${10 % 3 }<br>     10 mod 3=${10 mod 3 }<br></body>

        效果:


四、JSTL核心庫:

儘管EL非常easy,可是他的功能有限,比如:針對返回空值EL沒有辦法控制,迴圈輸出數組元素,假設結合JSTL就不用再操心這些問題了。

經常使用的JSTL標籤有非常多比如:<c:out><c:if><c:choose><c:forEach>等等

這裡就不一一介紹,以下介紹一個EL與JSTL的結合帶來的便利:

簡單一實例:首先是Servlet的代碼:

package com.tgb.jstl;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class JstlCoreServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//一般字元串request.setAttribute("hello", "Hello World");//HTML字串request.setAttribute("welcome", "<font color='red'>歡迎你來到這個世界!</font>");//結構Group group = new Group();group.setName("提高班");List users = new ArrayList();for (int i=0; i<10; i++) {User user = new User();user.setUsername("陳麗娜_" + i);user.setAge(18 + i);user.setGroup(group);users.add(user);}request.setAttribute("users", users);//mapMap map = new HashMap();map.put("k1", "v1");map.put("k2", "v2");request.setAttribute("map", map);request.getRequestDispatcher("/jstl_core.jsp").forward(request, response);}}

JSP頁面的代碼:

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><%@ 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=GB18030"><title>Insert title here</title></head><body><h1>測試JSTL核心庫</h1><hr><li>採用c:out標籤</li><br>hello(使用標籤):<c:out value="${hello}"/><br>hello(使用EL運算式):${hello }<br>hello(使用預設值):<c:out value="${hello123}" default="沒有值"/><br>welcome(使用EL運算式):${welcome}<br>welcome(使用標籤,escapeXml=true):<c:out value="${welcome}" escapeXml="true"/><br>welcome(使用標籤,escapeXml=false):<c:out value="${welcome}" escapeXml="false"/><br><h3>採用forEach標籤</h3><table border="1"><tr><td>使用者名稱稱</td><td>年齡</td><td>所屬組</td></tr><c:choose><c:when test="${empty users}"><tr><td colspan="3">沒有合格資料</td></tr></c:when><c:otherwise><c:forEach items="${users}" var="user"><tr><td>${user.username }</td><td>${user.age }</td><td>${user.group.name }</td></tr></c:forEach></c:otherwise></c:choose></table><p><li>示範迴圈控制標籤:forEach,輸出map</li><br><c:forEach items="${map}" var="entry">${entry.key },${entry.value }<br></c:forEach><p></body></html>

當中要注意的是要引入:

<%@ tagliburi="http://java.sun.com/jsp/jstl/core"  prefix="c"%>   

頁面顯示:


使用JSTL與EL的結合分離了頁面與邏輯,使得分層更加明白,代碼更加清晰。

JAVA學習JSTL與EL

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.