1. ホーム
  2. Web プログラミング
  3. JSP プログラミング

JSPの式言語の基本を説明する

2022-01-18 07:15:56

I. EL式入門

  1. EL式。式言語、または表現言語
  2. EL式の役割:データ出力のためにJSPページの式スクリプトを置き換える
  3. EL式はJSP式スクリプトよりはるかにクリーンです
  4. EL式の書式は次の通りです:${expression}. 注:EL式はjspページで記述され、式は通常ドメインオブジェクトのキーとなる

コードデモです。ウェブディレクトリにTest.jspを作成する

<body>
    <%
        request.setAttribute("key", "value");		
    %>
    <% -- Expression script outputs the value of key1 --%>
    <%=request.getAttribute("key1")%>
    <%-- EL expression to output the value of key1 --%>
    ${key1}
    <%-- page shows null when expression script outputs null value
          Page shows nothing (empty string) when EL expression outputs null value --%>
</body>


実行中の結果です。

II. ドメインデータを検索するためのEL式の順序

EL式は、主にドメインオブジェクト内のデータの出力は、すべての4つのドメインオブジェクトが同じキー値を持っている場合、EL式は、最小から最大までの4つのドメインオブジェクトの範囲に応じて検索され、関係なく、4つのドメインオブジェクト宣言の順序の出力を検索します。

コードデモです。ウェブディレクトリにTest.jspを作成する

<body>
    <%							  
        //Save the same key value to all four domain objects
        request.setAttribute("key", "request");
        session.setAttribute("key", "session");
        application.setAttribute("key", "application");
        pageContext.setAttribute("key", "pageContext");
    %>
    <%-- Output the value of key using EL expression --%>
    ${key}
</body>


実行中の結果です。

III. Javaクラスのプロパティを出力するEL式

コードデモです。Personクラスの作成

public class Person {
    //output Person class general properties, array properties, list collection properties and map collection properties
    private String name;
    private String[] phones;
    private List<String> cities;
    private Map<String, Object> map;
    // Note: no age property is declared
    public int getAge() {
        return 18;
    }
    //and full-parameter, null-parameter constructors, getter/setter methods for each property
}


コードデモです。ウェブディレクトリにTest.jspを作成する

<body>
    <%
        Person person = new Person();
        person.setName("JayChou");
        person.setPhones(new String[]{"123","456","789"});
        //assign values to the cities property
        List<String> cities = new ArrayList<String>();
        cities.add("Beijing");
        cities.add("Shanghai");
        cities.add("Shenzhen");
        person.setCities(cities);
        //assign a value to the map property
        Map<String,Object> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);
        pageContext.setAttribute("p", person);
    %>
    <%--EL expression in the object name. The attribute name does not find the value of the attribute, but the getXxx method corresponding to the name, without which an error is reported -- %>
    Output Person: ${ p }<br/>
    Output Person's name property: ${ p.name} <br>
    Output Person's phones array address value: ${ p.phones} <br>
    Output the value of Person's phones array attribute: ${p.phones[2]} <br>
    Outputs the values of the elements in Person's cities collection: ${p.cities} <br>
    Outputs the value of individual elements in Person's List collection: ${p.cities[2]} <br>
    Output the Map collection of Person: ${p.map} <br>
    Output the value of a key in Person's Map collection: ${p.map.key1} <br>
    <%-- Note that even though there is no age property, the result can be derived because of the getAge method --%>
    Output the age value of Person: ${p.age} <br>
</body>



実行中の結果です。

IV. EL式の操作

シンタックス 演算式}, EL式は以下の演算子をサポートしています.

1. 関係演算子

2. 論理演算

3. 算術演算

4. 空オペレーション

empty操作は、あるデータが空であるかどうかを判断し、空であればtrueを、空でなければfalseを出力します。
以下の場合は空です(元のキーの前にemptyキーワードがあります)。
(1) 値がヌル、つまり空文字列である場合
(2) 値の型が Object で長さが 0 の配列(注:長さが 0 の他の型は非 null)
(3) 要素数が0のリスト、マップコレクション

5. 三項演算

式1?式2: 式3
式1が真なら式2の値を返し、式1が偽なら式3の値を返します。

コードデモ:ウェブディレクトリにTest.jspを作成する

<body>
    <%
        //1. When the value is a null value
        request.setAttribute("emptyNull", null);
        //2、When the value is a null string
        request.setAttribute("emptyStr", "");
        //3. When the value is an array of type Object and the length is zero
        request.setAttribute("emptyArr", new Object[]{});
        //4. list collection, the number of elements is zero
        List<String> list = new ArrayList<>();
        request.setAttribute("emptyList", list);
        //5. map collection, the number of elements is zero
        Map<String,Object> map = new HashMap<String, Object>();
        request.setAttribute("emptyMap", map);
        //6. Other types of arrays with length 0
        request.setAttribute("emptyIntArr", new int[]{});
    %>
    ${ empty emptyNull } <br/>
    ${ empty emptyStr } <br/>
    ${ empty emptyArr } <br/>
    ${ empty emptyList } <br/>
    ${ empty emptyMap } <br/>
    ${ empty emptyIntArr } <br/>
    <%-- ternary operations --%>
    ${ 12 ! = 12 ? "equal":"not equal" }
</body>



実行中の結果です。

6. "." ポイント演算と "[ ]" 括弧演算

ポイント操作で、オブジェクトのプロパティの値(getXxxメソッドやisXxxメソッドが返す値)を出力することができる
ブラケット演算は、順序付き集合の要素の値を出力します。

注:中括弧演算は、Map コレクションのキーに特殊文字が含まれる場合、そのキーの値を出力することができる

コードデモです。ウェブディレクトリにTest.jspを作成する

<body>
    <%
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("a.a.a", "aaaValue");
        map.put("b+b+b", "bbbValue");
        map.put("c-c-c", "cccValue");
        request.setAttribute("map", map);
    %>
    <% - special key needs to remove the very first ". " and use middle brackets and single quotes (double quotes) to wrap it up - %>
    ${ map['a.a.a'] } <br> <%--equivalent to three if not enclosed in middle brackets. Operations --%> // the error is ${ map.a.a.a}
    ${ map["b+b+b"] } <br> <%--equivalent to three + operations if not enclosed in parentheses--%>
    ${ map['c-c-c'] } <br> <%--equivalent to three - operations if you don't add the parentheses--%>
</body>


実行中の結果です。

V. 11 EL 式の暗黙のオブジェクト

EL表現における11の暗黙のオブジェクトは、EL表現自体によって定義され、直接使用することができます。

(1) pageScope, requestScope, sessionScope, applicationScope オブジェクトの利用

コードデモ:ウェブディレクトリにTest.jspを作成する

<body>
    <%
        pageContext.setAttribute("key1", "pageContext1");
        pageContext.setAttribute("key2", "pageContext2");
        request.setAttribute("key2", "request");
        session.setAttribute("key2", "session");
        application.setAttribute("key2", "application");
    %>
    <%--Get the attributes in a specific domain --%>
    ${ pageScope.key1 } <br>
    ${ applicationScope.key2 }
    <%-- If you get key1 or key2 directly you still retrieve it from smallest to largest according to the previous range and cannot get the specified domain --%>
</body>


実行中の結果です。

(2) pageContextオブジェクトの利用

コード例 ウェブディレクトリにTest.jspを作成する

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%-- First get the request, session object through the pageContext object, and then get the following --%>
    <%--
        Get the requested protocol: request.getScheme()
        Get the requested server ip or domain name: request.getServerName()
        Get the requested server port number: request.getServerPort()
        Get the current project path: request.getContextPath()
        Get the method of the request: request.getMethod()
        Get the client's ip address: request.getRemoteHost()
        Get the unique identifier of the session: session.getId()
    --%>
1. protocol: ${ pageContext.request.scheme }<br>
2. server ip: ${ pageContext.request.serverName }<br>
3. server port: ${ pageContext.request.serverPort }<br>
4. Get the project path: ${ pageContext.request.contextPath }<br>
5. Get the request method: ${ pageContext.request.method }<br>
6. Get the client ip address: ${ pageContext.request.remoteHost }<br>
7. Get the session id number: ${ pageContext.session.id }<br>
</body>
</html>


実行中の結果です。

(3) param、paramValues オブジェクトの使用

コード例 ウェブディレクトリにTest.jspを作成する

<body>
    Get the value of the request parameter username: ${ param.username } <br>
    Get the value of the request parameter password: ${ param.password } <br>
    Get the value of the first hobby in the request parameter: ${ paramValues.hobby[0] } <br>
    Get the value of the second hobby in the request parameter: ${ paramValues.hobby[1] } <br>
    <%-- Use the index value of paramValues when there are multiple keys with the same name to determine which one to get, use param to get only the first --%>
    Use param to get the value of hobby: ${ param.hobby } <br>
</body>


実行中の結果
ブラウザのアドレスバーに、http://localhost:8080/MyTest/Test.jsp? username=Jaychou&password=123&hobby=sing&hobby=dance と入力してください。

(4) header, headerValues オブジェクトの利用

コード例 ウェブディレクトリにTest.jspを作成する

<body>
    Output the value of the [user-Agent] in the request header: ${ headerValues["User-Agent"] }<br>
    Output the value of the first [user-Agent] in the request header:${ headerValues["User-Agent"][0] }<br>
</body>


(5) Cookieオブジェクトの利用

コード例 ウェブディレクトリにTest.jspを作成する

<body>
    Get the name of the cookie: ${ cookie.JSESSIONID.name } <br>
    Get the value of the cookie: ${ cookie.JSESSIONID.value } <br>
</body>


実行中の結果です。

(6) initParamオブジェクトの利用

コード例:web.xmlにパラメータを書き込む(web.xmlの内容を変更した後、それを反映させるためにサービスを再起動する必要があります)。

<context-param>
    <param-name>username</param-name>
    <param-value>root</param-value>
</context-param>
<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql:///test</param-value>
</context-param>


WebディレクトリにTest.jspを作成します。

<body>
    Output&lt;Context-param&gt;value of username: ${ initParam.username } <br>
    Output&lt;Context-param&gt;url value: ${ initParam.url } <br>
</body>


実行中の結果です。

<リンク

今回の記事は、JSPのEL式の基本についてです。JSPのEL式の基本については、過去の記事を検索していただくか、引き続き以下の関連記事をご覧ください。