EL表達式的使用


E L(Expression Language)  目的:為了使JSP寫起來更加簡單。

1、獲取數據
     ${expression}

2、[ ]與.運算符
     EL 提供“.“和“[ ]“兩種運算符來存取數據。
     當要存取的屬性名稱中包含一些特殊字符,如.或?等並非字母或數字的符號,就一定要使用“[ ]“。例如:
         ${user.My-Name}應當改為${user["My-Name"] }
     如果要動態取值時,就可以用“[ ]“來做,而“.“無法做到動態取值。例如:
         ${sessionScope.user[data]}中data 是一個變量
3、變量
     EL存取變量數據的方法很簡單,例如:${username}。它的意思是取出某一范圍中名稱為username的變量。
     因為我們並沒有指定哪一個范圍的username,所以它會依序從Page、Request、Session、Application范圍查找

使用范例:

<%@page import="org.eclipse.jdt.internal.compiler.lookup.ImportConflictBinding"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@page import="com.entity.People"%>
<%@page import="java.util.*"%>
<!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>Insert title here</title>
</head>
<body>
  <!-- 直接取數據 -->
    <%
        pageContext.setAttribute("info1", "page范圍屬性");
        request.setAttribute("info1", "request范圍屬性");
        session.setAttribute("info1", "session范圍屬性");
        application.setAttribute("info1", "application范圍屬性");
    %>
    ${info1}
    <hr>

<!-- 提交表單參數 --> <form action="el.jsp" method="psot"> name屬性:<input type="text" name="name" /> <br> age屬性:<input type="text" name="age" /> <br> <input type="submit" value="提交到el.jsp"> <hr>

<!-- paramValues提交一組參數 --> <form action="el.jsp" method="post"> <input type="checkbox" name="hobby" value="java語言" />java語言 <input type="checkbox" name="hobby" value="C語言" />C語言 <input type="checkbox" name="hobby" value="php語言" />php語言 <br> <input type="submit" value="提交到el.jsp"> <hr>

<!-- 對象操作 --> <% People zhangsan = new People(); zhangsan.setId(1); zhangsan.setName("zhangsan"); zhangsan.setAge(12); request.setAttribute("zhangsan", zhangsan); %> 編號:${zhangsan.id }<br> 姓名:${zhangsan.name }<br> 年齡:${zhangsan.age }<br> <hr>
<!-- list操作 --> <% People p1 = new People(); p1.setName("張三"); People p2 = new People(); p2.setName("李四"); List<People> list = new ArrayList<People>(); list.add(p1); list.add(p2); request.setAttribute("list",list); %> <!-- 取list指定位置的數據 --> ${list[0].name} ${list[1].name} <hr> <!-- 運算符操作 --> <% request.setAttribute("num1", 10); request.setAttribute("num2", 3); request.setAttribute("flog1", true); request.setAttribute("flog2", false); %> 算術運算符<br> num1=${num1 },num2=${num2 }<br> num1+num2=${num1+num2 }<br> num1-num2=${num1-num2 }<br> num1-num2=${num1-num2 }<br> num1*num2=${num1*num2 }<br> num1/num2=${num1/num2 }<br> num1%num2=${num1%num2 } <hr> 關系運算符<br> flag1=${flag1 },flag2=${flag2 }<br> flag1 && flag2: ${flag1 && flag2 }<br> flag1 || flag2: ${flag1 || flag2 }<br> !flag1: ${!flag1} } <hr> 三目運算符<br> num1>num2: ${num1>num2?"yes":"no" } <hr> 判斷空操作:${empty num1 } EL表達式中使用二元表達式<hr> <% session.setAttribute("user",new People("張三")); %> ${user==null? "對不起,您沒有登陸 " : user.username} </body> </html>

  在對對象進行操作時要用<%@page import%>把包引進來  

 <%=user.getAddr( ) %>等價於${user.addr} 

el.jsp頁面范例:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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>Insert title here</title>
</head>
<body>
    this is el.jsp
    <%
        request.setCharacterEncoding("utf-8");
    %>
    <!--表單提交過來的參數 -->
    姓名:${param.name}<br>
    年齡:${param.age}<hr>
    <!-- 提交過來的一組參數 -->
    技能1:${paramValues.hobby[0]}<br>
    技能2:${paramValues.hobby[1]}<br>
    技能3:${paramValues.hobby[2]}
</body>
</html>

 4、表達式內置對象說明

EL表達式語言中定義了11個隱含對象,使用這些隱含對象可以很方便地獲取web開發中的一些常見對象,並讀取這些對象的數據。
  語法:${隱式對象名稱}:獲得對象的引用

序號 隱含對象名稱 描       述
1 pageContext 對應於JSP頁面中的pageContext對象(注意:取的是pageContext對象。)
2 pageScope 代表page域中用於保存屬性的Map對象
3 requestScope 代表request域中用於保存屬性的Map對象
4 sessionScope 代表session域中用於保存屬性的Map對象
5 applicationScope 代表application域中用於保存屬性的Map對象
6 param 表示一個保存了所有請求參數的Map對象
7 paramValues 表示一個保存了所有請求參數的Map對象,它對於某個請求參數,返回的是一個string[]
8 header 表示一個保存了所有http請求頭字段的Map對象,注意:如果頭里面有“-” ,例Accept-Encoding,則要header[“Accept-Encoding”]
9 headerValues 表示一個保存了所有http請求頭字段的Map對象,它對於某個請求參數,返回的是一個string[]數組。注意:如果頭里面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
10 cookie 表示一個保存了所有cookie的Map對象
11 initParam 表示一個保存了所有web應用初始化參數的map對象

 示例代碼:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>el隱式對象</title>
</head>

<body>
    1、pageContext對象:獲取JSP頁面中的pageContext對象
    <br /> ${pageContext}
    <hr>
    2、pageScope對象:從page域(pageScope)中查找數據
    <br />
    <%
        pageContext.setAttribute("name", "張三"); //map
    %>
    ${pageScope.name}
    <hr>
    3、requestScope對象:從request域(requestScope)中獲取數據
    <br />
    <%
        request.setAttribute("name", "李四"); //map
    %>
    ${requestScope.name}
    <hr>
    4、sessionScope對象:從session域(sessionScope)中獲取數據
    <br />
    <%
        session.setAttribute("user", "sf1"); //map
    %>
    ${sessionScope.user}
    <hr>
    5、applicationScope對象:從application域(applicationScope)中獲取數據
    <br />
    <%
        application.setAttribute("user", "sf2"); //map
    %>
    ${applicationScope.user}
    <hr>
    6、param對象:獲得用於保存請求參數map,並從map中獲取數據
    <br />
    ${param.name}
    <!-- 此表達式會經常用在數據回顯上 -->
    <form
        action="${pageContext.request.contextPath}/servlet/RegisterServlet"
        method="post">
        <input type="text" name="username" value="${param.username}">
        <input type="submit" value="注冊">
    </form>
    <hr>
    7、paramValues對象:paramValues獲得請求參數//map{"",String[]}
    <br />
    <!-- http://localhost:8080/JavaWeb_EL_Study_20140826/ELDemo03.jsp?like=aaa&like=bbb -->
    ${paramValues.like[0]} ${paramValues.like[1]}
    <hr>
    8、header對象:header獲得請求頭
    <br /> ${header.Accept}
    <br />
    <%--${header.Accept-Encoding} 這樣寫會報錯
                 測試headerValues時,如果頭里面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
            --%>
    ${header["Accept-Encoding"]}
    <hr>
    9、headerValues對象:headerValues獲得請求頭的值
    <br />
    <%--headerValues表示一個保存了所有http請求頭字段的Map對象,它對於某個請求參數,返回的是一個string[]數組 
            例如:headerValues.Accept返回的是一個string[]數組 ,headerValues.Accept[0]取出數組中的第一個值
            --%>
    ${headerValues.Accept[0]}
    <br />
    <%--${headerValues.Accept-Encoding} 這樣寫會報錯
                 測試headerValues時,如果頭里面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
                 headerValues["Accept-Encoding"]返回的是一個string[]數組,headerValues["Accept-Encoding"][0]取出數組中的第一個值
            --%>
    ${headerValues["Accept-Encoding"][0]}
    <hr>
    10、cookie對象:cookie對象獲取客戶機提交的cookie
    <br />
    <!-- 從cookie隱式對象中根據名稱獲取到的是cookie對象,要想獲取值,還需要.value -->
    ${cookie.JSESSIONID.value} //保存所有cookie的map
    <hr>
    11、initParam對象:initParam對象獲取在web.xml文件中配置的初始化參數
    <br />
    <%--
         <!-- web.xml文件中配置初始化參數 -->
       <context-param>
           <param-name>xxx</param-name>
           <param-value>yyyy</param-value>
       </context-param>
       <context-param>
           <param-name>root</param-name>
           <param-value>/JavaWeb_EL_Study_20140826</param-value>
       </context-param>
         --%>
    <%--獲取servletContext中用於保存初始化參數的map --%>
    ${initParam.xxx}
    <br /> ${initParam.root}
</body>
</html>

RegisterServlet的代碼如下:

package com.web.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet {
    /* 
     * 處理用戶注冊的方法
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //1、接收參數
        String userName = request.getParameter("username");
        /**
         * 2、直接跳轉回/ELDemo03.jsp頁面,沒有使用request.setAttribute("userName", userName)將userName存儲到request對象中
         * 但是在ELDemo03.jsp頁面中可以使用${param.username}獲取到request對象中的username參數的值
         */
        request.getRequestDispatcher("/ELDemo03.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

注意:
  測試header和headerValues時,如果頭里面有“-” ,例Accept-Encoding,則要header["Accept-Encoding"]、headerValues["Accept-Encoding"]
  測試cookie時,例${cookie.key}取的是cookie對象,如訪問cookie的名稱和值,須${cookie.key.name}或${cookie.key.value}

 

使用EL調用Java方法

  EL表達式語法允許開發人員開發自定義函數,以調用Java類的方法。語法:${prefix:method(params)}
  在EL表達式中調用的只能是Java類的靜態方法,這個Java類的靜態方法需要在TLD文件中描述,才可以被EL表達式調用。
  EL自定義函數用於擴展EL表達式的功能,可以讓EL表達式完成普通Java程序代碼所能完成的功能。

是否啟用EL表達式:

  <%@ page isELIgnored="true" %> 表示是否禁用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默認的啟用EL語言

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM