欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EL表达式

程序员文章站 2022-05-06 07:57:51
...

EL表达式

一、使用EL表达式获取数据语法:

      1.基本语法:“${标识符}”,示例:${user}

      2.其它语法1:${sessionScope.varName},从指定的容器中读取

     3. 其它语法2:${2*200+80},可以执行算术、逻辑运算

 

二、原理:

EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键

字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相

应对象,找不到则返回”” (注意,不是null,而是空字符串)。

 

三、作用:

  1.读取容器中的属性变量

<%
		pageContext.setAttribute("nameP", "JackP");
		request.setAttribute("nameR", "JackR");
		session.setAttribute("nameS", "JackS");
		application.setAttribute("nameA", "JackA");
%>
         ${nameP},${nameR},${nameS},${nameA},,${applicationScope.nameA}
         ${abc},不存在则输出空字符串
	

  2.读取javaBean中的信息

<%
		User u = new User();
		u.setName("jack");
		u.setPwd("1234");
		u.setAge(23);
		pageContext.setAttribute("user", u); //注意,一定要把数据存入容器中,否则EL表达式无法读取出数据
	%>

	${user}, ${user.name}, ${user.pwd},${user.age}

3.读取Map中的信息

<%
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "Bob");
		map.put("age", 25);

		map.put("u", u); //把复杂数据如JavaBean,List等作为一个对象存入map
		pageContext.setAttribute("mm", map);
	%>
	常用的读法: ${mm}, ${mm.age},${mm.name}
	<br> 不常用的读法:${mm['age']}, ${mm["name"] }
	<br> 复杂数据读取:${mm.u}, ${mm.u.name}, ${mm.u.age}

  4.读取List中的信息

<%
		List<Object> list = new ArrayList<Object>();
		list.add("周末");
		list.add(100);
		list.add(u);
		list.add(map);
		request.setAttribute("list", list);
	%>
	${list}<br>
    ${list[0]},${list[1]},${list[2].name} <br>
    ${list[3].u.age} <br>
    
    <%
       map.put("list",list);
    %>
     ${mm.list[2]} <br>

5.执行运算

  5.1.可以使用算术运算符: +, - , * , / , % 等


	<jsp:useBean id="u" class="cn.hncu.domain.User">
	</jsp:useBean>
	<jsp:setProperty property="name" name="u" value="Alice" />
	<jsp:setProperty property="age" name="u" value="20" />

	<%
		pageContext.setAttribute("u", u);
	%>
	${u.age/2+20}

  5.2 可以使用比较运算符: ==, !=, <, >, <=, >= 以及逻辑运算符: &&,|| 等

 ${u.age>=25} , ${u.name=="Alice" && u.age!=18 }

  5.3可以使用"问号表达式"

${ u.age>=25 ? "old" : "young" } 

 5.4以后用得比较多的一个运算符: empty  功能:当属性为null或不存在时,返回true,否则返回false<br>

 ${empty u}, ${empty u.age}, ${empty map} ,Over! <br> 

 

6.读取它内部定义的11个隐藏对象:

    6.1:1个便于操作其它jsp隐藏对象的对象:pageContext 4个容器相关:pageScope,

requestScope, sessionScope, applicationScope

    6.2:6个其它:param, paramValues, header, headerValues, cookie,  initParam
 

 <%
        User u = new User();
        u.setName("Tom");
        u.setPwd("1234");
        u.setAge(83);
        pageContext.setAttribute("u", u);
        request.setAttribute("info", "weekend");
    %>

    6.3:pageContext 和 4个容器的演示

 ${pageContext.request.remoteAddr}
    ${pageScope.u},${requestScope.info},${applicationScope.info}

   6.4:2个请求参数相关隐藏对象的演示, 访问方式如下:

 //http://localhost:8080/elWeb/jsps/elDemo3.jsp? name=Jack&age=28
    ${param} ,${paramValues}
    {param.name},${paramValues.name[0]}

   6.5:2个HTTP请求头相关隐藏对象的演示

${header}   ${headerValues}  
   ${header.host},&nbsp;&nbsp; ${header.accept}
   ${headerValues.host[0]},&nbsp;&nbsp; ${headerValues.accept[0]}<br>
 ${header.cookie},  
 <!--下面的方式是无法获取session的id值的,
  因为header.cookie中把所有cookie信息封装成一个完整字符串。
  如果要获取session-cookie的id值,就自己用底层方式从该字符串中解析出来。
  当然el中给我们提供了一个隐藏对象cookie,通过它可以方便地获取session的id值
   ${header.cookie.JSESSIONID}-->

   6.6:1个专用于获取cookie信息的隐藏对象演示

   ${cookie.JSESSIONID}, ${cookie.JSESSIONID.value}

  6.7:1个页面初始化参数信息获取的隐藏对象initParam,演示时需要在web.xml中配置,这里略过了,一般很少用

 ${initParam.name}

 

EL表达式

EL表达式

EL表达式

 

EL表达式