jsp技術:day3#2---初入EL表達式

EL表達式簡介

EL 全名爲Expression Language。EL主要作用:
獲取數據:
EL表達式主要用於替換JSP頁面中的腳本表達式,以從各種類型的java對象中獲取數據。
執行運算:
利用EL表達式可以在JSP頁面中執行一些基本的關係運算、邏輯運算和算術運算,以在JSP頁面中完成一些簡單的邏輯運算。
獲取web開發常用對象
EL 表達式定義了一些隱式對象,利用這些隱式對象,web開發人員可以很輕鬆獲得對web常用對象的引用,從而獲得這些對象中的數據。
調用Java方法
EL表達式允許用戶開發自定義EL函數,以在JSP頁面中通過EL表達式調用Java類的方法。

EL表達式技術的格式

${表達式 }

在執行el表達式的時候還是用的前面學過的pageContext.findAttribute()方法,用標識符爲關鍵字依次從page、request、session、application對象去讀取對應函數,讀取到返回相應對象,否則返回空字符串(注意:不是null)
注意,el表達式的功能:從小到大的順序從四個容器依次讀取數據(讀到一個就停止,注意的是數據一定要放在容器中)

EL表達式讀取的是屬性名,是將數據放入容器是給的屬性名

pageContext.setAttribute("u", user);這是el表達式應該用${u }而不是${user }

用el表達式讀取map中的信息

一定要將數據放到容器中去
比如request.setAttribute("map", map);

<%
            Map<String,Object> map = new HashMap<String , Object>();
            map.put("name", "小米");
            map.put("age", 25);
            map.put("friend", user);
            //一定要將數據放到容器中去
            //request.setAttribute("map", map);     
            session.setAttribute("m", map); 
         %>
          ${m }<br/>
          ${m.name }的朋友:${m.friend }

用EL表達式讀取List中的信息

讀list是用數組形式讀取的

<%
            List list = new ArrayList();
            list.add("aaa");
            list.add(user);
            list.add(map);
            application.setAttribute("list", list);
          %>
          ${list}<br/>
          ${list[0] }<br/>
          ${list[1].name }<br/>
          ${list[2].name }<br/>

演示EL表達式的運算

使用算術運算符

${u.age+10 }

使用比較運算符

${u.name=="張三" }

使用邏輯運算符

${u.name=="小明" && u.age>20 }

使用條件運算符

${u.age>20?"已經成年了":"還只是個孩子啊" }

使用empty運算符

如果表達式的值爲null,或者不存在該變量,或者是一個list或是一個map,但是其中不包含元素 這些都返回true

        ${empty m } --false <br/>

        ${!empty map } --false<br/>
        ${empty map } --true

用EL表達式獲取EL表達式中的隱藏對象–EL表達式語言中定義了11個隱含對象

隱含對象如圖:
這裏寫圖片描述
這裏寫圖片描述

從指定的容器中讀取數據

注意事項
測試headerValues時,如果頭裏面有“-” ,例Accept-Encoding,則要headerValues[“Accept-Encoding”]
測試cookie時,例cookie.keycookiecookie {cookie.key.name}或${cookie.key.value}

        ${pageScope.u }<br/>
        ${requestScope.u }<br/>
        ${sessionScope.m }<br/>
        ${applicationScope.list }<br/>
        ${header }         
        <br/>
        ${header.cookie }
        <br/>
        ${cookie }
        <br/>
        ${cookie.JSESSIONID.value }
        <br/>
        ${param }  //演示訪問地址帶參數http://127.0.0.1:8080/elWeb_jun/?name=jack&age=26
        <br/>
        ${param.age }
        <br/>
        ${paramValues }
        <br/>
        ${paramValues.name[0] }
<br/>
        <br/>

演示el表達式的綜合使用

        <a href="${pageContext.request.contextPath }/jsps/aa.jsp">跳轉到另一個頁面</a>

        <br/>
        <br/>
        <a href="${pageContext.request.contextPath }/ShowServlet">el表達式的一個綜合實例</a>

兩個<a>標籤的效果圖如下:
跳轉到另一個頁面

>el表達式的一個綜合實例

本文完整代碼如下:

index.jsp

<%@page import="cn.hncu.elWeb.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
        <h2>EL表達式技術---格式:${表達式 }</h2>
        <h2>注意,el表達式的功能:從小到大的順序從四個容器依次讀取數據(讀到一個就停止,注意的是數據一定要放在容器中)</h2>
        <%
            pageContext.setAttribute("page-name", "page-name");
            request.setAttribute("requestname", "request-name");
            session.setAttribute("sessionname", "session-name");
            application.setAttribute("applicationname", "application-name");
         %>
         ${page-name },${requestname },${sessionname },${applicationname }<br/>
         <hr/>
         <br/>
         <br/>
         <%
            User user = new User();
            user.setAge(25);
            user.setName("小明");
            pageContext.setAttribute("u", user);
          %>
        ${u }

        <br/>
        <br/>
        <h2>用el表達式讀取map中的信息</h2>
        <%
            Map<String,Object> map = new HashMap<String , Object>();
            map.put("name", "小米");
            map.put("age", 25);
            map.put("friend", user);
            //一定要將數據放到容器中去
            //request.setAttribute("map", map);     
            session.setAttribute("m", map); 
         %>
        <!--el表達式讀取的是屬性名,即request.setAttribute的時候給的key就是後面el表達式的屬性名  -->
        <!-- 上面設置的是key是"m" 則下面EL表達式的屬性名就是"m" 而不再是map -->    
         <!--${map}  -->
         ${m }
         <br/>
         ${m.name }的朋友:${m.friend }
         <br/>
         <hr/>
         <br/>

         <h2>用EL表達式讀取List中的信息</h2>
         <%
            List list = new ArrayList();
            list.add("aaa");
            list.add(user);
            list.add(map);
            application.setAttribute("list", list);
          %>
          ${list}<br/>
          ${list[0] }<br/>
          ${list[1].name }<br/>
          ${list[2].name }<br/>
        <br/>
        <br/>
        <!--演示EL表達式的運算 -->
        <h2>使用算術運算符</h2>
        ${u.age+10 }
        <br/>
        <h2>使用比較運算符</h2>
        ${u.name=="張三" }

        <br/>
        <h2>使用邏輯運算符</h2>
        ${u.name=="小明" && u.age>20 }
        <br/>
        <br/>
        <h2>使用條件運算符</h2>
        ${u.age>20?"已經成年了":"還只是個孩子啊" }

        <br/>
        <h2>使用empty運算符</h2>
        <!-- 如果表達式的值爲null,或者不存在該變量,或者是一個list或是一個map,但是其中不包含元素  這些都返回true -->
        ${empty m } --false <br/>

        ${!empty map } --false<br/>
        ${empty map } --true

        <br/>
        <hr/>
        <br/>
        <br/>
        <!-- 用EL表達式獲取EL表達式中的隱藏對象--EL表達式語言中定義了11個隱含對象  -->
        <!-- 從指定的容器中讀取數據 -->
        ${pageScope.u }<br/>
        ${requestScope.u }<br/>
        ${sessionScope.m }<br/>
        ${applicationScope.list }<br/>

        <br/>
        <br/>
        ${header }         
        <br/>
        ${header.cookie }
        <br/>
        ${cookie }
        <br/>
        ${cookie.JSESSIONID.value }
        <br/>
        ${param }  //演示訪問地址帶參數http://127.0.0.1:8080/elWeb_jun/?name=jack&age=26
        <br/>
        ${param.age }
        <br/>
        ${paramValues }
        <br/>
        ${paramValues.name[0] }

        <br/>
        <br/>

        <a href="${pageContext.request.contextPath }/jsps/aa.jsp">跳轉到另一個頁面</a>

        <br/>
        <br/>
        <a href="${pageContext.request.contextPath }/ShowServlet">el表達式的一個綜合實例</a>

        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>

  </body>
</html>

aa.jsp

<%@page import="cn.hncu.elWeb.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
        <h2>aa.jsp頁面</h2>
        <a href = "${pageContext.request.contextPath }/index.jsp">返回主頁</a>
        <!--上面的index.jsp加不加無所謂,因爲都是主頁,在xml中設置了歡迎頁面就是index.jsp -->
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>
        <br/>

  </body>
</html>

show.jsp

<%@page import="cn.hncu.elWeb.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
        <h1>show.jsp頁面</h1>
        <h2>用戶信息展示頁面</h2>
        編號:${p.id }<br/>
        姓名:${p.name }<br/>
        年齡:${p.age }<br/>
        <h3>車輛信息展示</h3>
        <table>
            <tr> <th>車輛編號</th>  <th>車輛名稱</th> <th>車輛顏色</th>  </tr>
            <tr> <td>${p.cars[0].no }</td>	<td>${p.cars[0].name }</td> <td>${p.cars[0].color }</td>      </tr>
            <tr> <td>${p.cars[1].no }</td>	<td>${p.cars[1].name }</td> <td>${p.cars[1].color }</td>      </tr>
            <tr> <td>${p.cars[2].no }</td>	<td>${p.cars[2].name }</td> <td>${p.cars[2].color }</td>      </tr>
        </table>

  </body>
</html>

ShowServlet

package cn.hncu.elWeb.servlet;

import java.awt.Color;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.hncu.elWeb.domain.Car;
import cn.hncu.elWeb.domain.Person;

public class ShowServlet extends HttpServlet {

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

        Person p = new Person();
        p.setAge(25);
        p.setId("A0001");
        p.setName("小米");
        p.setPwd("123456789");

        Car[] cars = new Car[3];
        for (int i = 0; i < cars.length; i++) {
            Car c = new Car();
            c.setName("car"+i);
            c.setNo("no:"+i);
            c.setColor("Red");
            cars[i] = c;
        }

        p.setCars(cars);

        request.setAttribute("p", p);
        request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);


    }

}

cn.hncu.elWeb.domain.Car

package cn.hncu.elWeb.domain;

public class Car {
    private String name ;
    private String no;
    private String color;
    public Car() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNo() {
        return no;
    }
    public void setNo(String no) {
        this.no = no;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }


}

cn.hncu.elWeb.domain.User

package cn.hncu.elWeb.domain;

public class User {
    private String name;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + "]";
    }

}

cn.hncu.elWeb.domain.Person

package cn.hncu.elWeb.domain;

public class Person {
    private String name ;
    private String id;
    private String pwd;
    private Integer age;
    private Car cars[];
    public Person() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Car[] getCars() {
        return cars;
    }
    public void setCars(Car[] cars) {
        this.cars = cars;
    }




}
發佈了104 篇原創文章 · 獲贊 29 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章