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,而是空字符串)。
示例:${user}
 
lEL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例     如:
     •${user.address.city}
     •${user.list[0]}:访问有序集合某个位置的元素
     •${map.key}  : 获得map集合中指定key的值
结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:
    •迭代数组
    •迭代collection类型集合
    •迭代map类型集合

 注:在使用el表达式访问session中存的java对象时,对象的变量要有set   get  方法

由于知识点零碎,所以都写在一起了。

用el表达式读取数据

demo1.jsp

<span style="font-family:Times New Roman;font-size:14px;"><%@page import="cn.hncu.domain.UserModel"%>
<%@ 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>
    	<%
    		//pageContext.setAttribute("name", "page_name");
    		//request.setAttribute("name", "req_name");
    		session.setAttribute("name", "session_name");
    		//application.setAttribute("name", "app_name");
    	 %>
    	 ${name},${ss}
    	 
    	 <!-- EL表达式内容实现机制:如果读取的属性不存在,则输出空串""(注意:不是null) -->
    	<%=pageContext.findAttribute("name")==null? "" : pageContext.findAttribute("name")%>
    	 
    	 <br/><br/><br/>
    	 
    	 <!-- 用EL表达式读取JavaBean中的数据 -->
    	 <%
    	 	UserModel u=new UserModel();
    	 	u.setName("Jack");
    	 	u.setPwd("1234");
    	 	u.setAge(22);
    	 	//把数据放到容器中,EL才能读取
    	 	request.setAttribute("user", u);
    	  %>
    	  EL表达式中的标识符要用属性名,如上句中的setAttribute("user", u),在读取的时候要用user,不能用u,而且属性名不加""<br/>
    	 ${user},${user.name},${user.pwd},${user.age}.<br/>
    	 <br/><br/>
    	 <!-- 用EL表达式读取Map中的数据 -->
    	 <%
    	 	Map<String,Object> map=new HashMap<String,Object>();
    	 	map.put("name", "Tom");
    	 	map.put("pwd", "4321");
    	 	map.put("age", "18");
    	 	request.setAttribute("map", map);
    	  %>
    	 方式1:${map},${map.name},${map.age}.(建议采用)<br/>
    	 方式2:${map["name"]},${map["pwd"]}.(也可以但不建议采用,因较麻烦)<br/>
    	 ◎但是,如果变量名不符合标识符的命名规则,那么就要采用第二种方式
    	<br/><br/>
    	
    	<!-- 用EL表达式读取List中的数据 -->
    	 <%
    	 	List<Object> list=new ArrayList<Object>();
    	 	list.add("湖南城市学院");
    	 	list.add(u);
    	 	request.setAttribute("list", list);
    	  %>
    	  ${list},${list[0]},${list[1]}.<br/>
    	  ${list[1].name},${list[1].age}.<br/>
    	  list读取,因为是放的ArrayList,所以用list[数组下标]读取,如果是对象,用list[数组下标].变量名
    	  <br/><br/><br/><br/>
  </body>
</html>
</span>

 

 

 

 

语法:${运算表达式},EL表达式支持如下运算符:

 
empty运算符:检查变量是否为null或“空”,很好用!!!
二元表达式:${user!=null?user.name: “”} ,很好用!!!
[ ] 和 . 号运算符
 
 
demo2.jsp
<span style="font-family:Times New Roman;font-size:14px;"><%@page import="cn.hncu.domain.UserModel"%>
<%@ 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>
    	<%
    	 	UserModel u=new UserModel();
    	 	u.setName("Jack");
    	 	u.setPwd("1234");
    	 	u.setAge(22);
    	 	//把数据放到容器中,EL才能读取
    	 	request.setAttribute("user", u);
    	  %>
    	  
    	  <p>可使用算术运算符“+、-、*、/、%”</p>
    	  ${user.age}+50=${user.age+50}.
    	  <pre>比较运算符</pre>
    	  ${user.age>25? "old":"young" }
    	  <p>判断是否为空的运算符:empty</p>
    	  ${empty user}----如果user为null(根本没有这样的属性)或者是空字符串,都是返回true<br/>
    	  ${!empty user}.<br/>
    	  
    	  
  </body>
</html>
</span>

 

 

 

 EL表达式中隐含对象

EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
语法:${隐式对象名称}  :获得对象的引用

 

测试各个隐式对象
   注意事项
      •测试headerValues时,如果头里面有“-”,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
      •测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}

 

demo3.jsp

<span style="font-family:Times New Roman;font-size:14px;"><%@page import="cn.hncu.domain.UserModel"%>
<%@ 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表达式中的11个隐藏对象</h2>
    	<%
    	 	UserModel u=new UserModel();
    	 	u.setName("Jack");
    	 	u.setPwd("1234");
    	 	u.setAge(22);
    	 	//把数据放到容器中,EL才能读取
    	 	request.setAttribute("user", u);
    	 	pageContext.setAttribute("a", "page_aaaaa");
    	 	request.setAttribute("a", "req_aaaaa");
    	 	session.setAttribute("a", "session_aaaaa");
    	 	application.setAttribute("a", "app_aaaaa");
    	  %>
    	<!-- 指定容器读取数据,效率更高 -->
    	  ${a},<br>
    	  ${requestScope.user.name}.<br>
    	 ${pageScope.a}.
    	 ${requestScope.a}.
    	 ${sessionScope.a}.
    	 ${applicationScope.a}.<br><br>
    	  
    	  ${header}表示一个保存了所有http请求头字段的Map对象(是一个List< Map< key,value > >).<br/>
    	  ${header.host }<br/>
    	  ${header.cookie }<br/>
    	  ${cookie.JSESSIONID.value }----表示一个保存了所有cookie的Map对象<br/><br/>
    	  
    	  ${param }----表示一个保存了所有请求参数的Map对象<br/>
    	  ${param.name },${param.age }<br/>
    	 ${paramValues }------用于读取类似兴趣爱好 这种参数的值(字符串数组)<br/>
    	 ${paramValues.name[0] }<br/>
    	 
    	 ${initParam }.----表示一个保存了所有web应用初始化参数的map对象(基本上不使用)<br/>
    	 
    	 ${pageContext.request.contextPath}.----对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)同属不常用,用Jstl重写url方法,防止用户禁止cookie<br/>
    	 <%=request.getContextPath() %>
  </body>
</html>
</span>

 

 


EL表达式应用实例-------用户信息查询

版本一:

 

ShowServlet.java

<span style="font-family:Times New Roman;font-size:14px;">package cn.hncu.servlet;

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.domain.Car;
import cn.hncu.domain.UserModel;

public class ShowServlet extends HttpServlet {

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

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//模拟后台对数据进行查询并组织封装
		UserModel u=new UserModel();
		u.setName("Tom");
		u.setAge(33);
		u.setPwd("4321");
		
		Car[] car=new Car[3];
		String color[]={"red","blue","black"};
		for(int i=0;i<3;i++){
			car[i]=new Car();
			car[i].setId(""+i);
			car[i].setName("car"+(i+1));
			car[i].setColor(color[i]);
		}
		
		u.setCar(car);
		
		//把查询出来的数据发到前端 去显示
		request.setAttribute("user", u);
		request.getRequestDispatcher("/jsps/show.jsp").forward(request, response);
	}

	

}
</span>

 

Show.jsp

<span style="font-family:Times New Roman;font-size:14px;"><%@page import="cn.hncu.domain.UserModel"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <style type="text/css">
  		table{
  			border: 1px solid black;
  			border-collapse: collapse;
  			width: 200px;
  		}
  		th{
  			border: 1px solid black;
  		}
  		td{
  			border: 1px solid black;
  		}
  </style>
  </head>
  
  <body>
    	<h2>用户信息</h2>
    	姓名:${user.name }<br/>
    	密码:${user.pwd }<br/>
    	年龄:${user.age }<br/>
    	车辆:
    	<!-- 这种方法写死了,当车辆信息变动时,就会出现读取出错 -->
    	<table>
    		<tr><th>序号</th><th>车名</th><th>颜色</th></tr>
    		<tr><td>${user.car[0].id }</td><td>${user.car[0].name }</td><td>${user.car[0].color }</td></tr>
    		<tr><td>${user.car[1].id }</td><td>${user.car[1].name }</td><td>${user.car[1].color }</td></tr>
    		<tr><td>${user.car[2].id }</td><td>${user.car[2].name }</td><td>${user.car[2].color }</td></tr>
    	</table>
    	
  </body>
</html>
</span>

 

 

 


版本二:

 

ShowServlet2.java

<span style="font-family:Times New Roman;font-size:14px;">package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

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

import cn.hncu.domain.Car;
import cn.hncu.domain.UserModel;

public class ShowServlet2 extends HttpServlet {

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

		doPost(request, response);
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		UserModel user=new UserModel();
		user.setName("Xiao ming");
		user.setAge(18);
		
		//用随机数代表车辆信息的不确定性
		Random r=new Random();
		int n=r.nextInt(10);
		
		Car[] car=new Car[n];
		String color[] ={"red","blue","black","gray","yellow","green","gold","khaki"};
		for(int i=0;i<n;i++){
			car[i]=new Car();
			car[i].setId(""+i);
			car[i].setName("car"+(i+1));
			car[i].setColor(color[i%8]);
		}
//		System.out.println(n);
//		System.out.println("car:"+car.length);
		user.setCar(car);
		
		request.getSession().setAttribute("user", user);
		response.sendRedirect("jsps/show2.jsp");
	}

}
</span>


Show2.jsp

<span style="font-family:Times New Roman;font-size:14px;"><%@page import="cn.hncu.domain.Car"%>
<%@page import="cn.hncu.domain.UserModel"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <style type="text/css">
  		table{
  			border: 1px solid black;
  			border-collapse: collapse;
  			width: 200px;
  		}
  		th{
  			border: 1px solid black;
  		}
  		td{
  			border: 1px solid black;
  		}
  </style>
  </head>
  
  <body>
    	<h2>用户信息</h2>
    	姓名:${user.name }<br/>
    	密码:${user.pwd }<br/>
    	年龄:${user.age }<br/>
    	车辆:
    	
    	<%
    		//Car[] cars=((UserModel)session.getAttribute("user")).getCar();-
    		Car[] cars=((UserModel)pageContext.findAttribute("user")).getCar();//两种方式皆可
    		out.println(cars.length); 
    	%>
    	<table>
    		<tr><th>序号</th><th>车名</th><th>颜色</th></tr>
    		<%for(int i=0;i<cars.length;i++){ 
    			Car c=cars[i];//for(Car c:cars){}也可
    			pageContext.setAttribute("c", c);
    		%>
    		<tr><td>${c.id}</td><td>${c.name}</td><td>${c.color}</td></tr>
    		<%} %>
    	</table>
    	<hr/>
    	<c:if test="${!empty user.car }" var="boo">
    	<h3>JSTL出场</h3>
    	<table>
    		<tr><th>序号</th><th>车名</th><th>颜色</th></tr>
    		<c:forEach items="${user.car }" var="c" varStatus="idx">
    		<tr><td>${c.id}</td><td>${idx.count} ${c.name}</td><td>${c.color}</td></tr>
    		</c:forEach>
    		
    	</table>
    	</c:if>
    	<c:if test="${!boo }">
    	<p>无车辆信息</p>
    	</c:if>
    	
  </body>
</html>
</span>


 

 

index.jsp

<span style="font-family:Times New Roman;font-size:14px;"><%@ 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>
   		<a href="jsps/demo1.jsp">用EL表达式读取数据</a><br/><br/>
   		
   		<a href="jsps/demo2.jsp">EL表达式的运算符</a><br/><br/>
   		
   		<a href="jsps/demo3.jsp?name=jack&age=20">EL表达式中的11个隐藏对象</a><br/><br/>
   		
   		<a href="ShowServlet">EL表达式应用实例-------用户信息查询</a><br/><br/>
   		<a href="ShowServlet2">EL表达式应用实例-------用户信息查询2:EL表达式的不足,JSTL出场</a>
  </body>
</html>
</span>



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值