JavaWeb (十) EL表达式 & JSTL 标签

大憨熊 提交于 2020-01-13 00:52:26

1、EL 表达式

1.1 什么是EL表达式,EL表达式的作用?

EL表达式的全称是Expression Language。它就是表达式语言。
EL表达式可以很好的替代表达式脚本在jsp页面上进行输出。

EL表达式的格式是:${ key }
EL表达式在输出null值的时候。输出的是空串

        <body>
		<%
			request.setAttribute("abc", "value");
		%>
		表达式脚本:<%=request.getAttribute("abc") == null ? "" : request.getAttribute("abc") %><br/>
		EL表达式:${ abc }<br/>
	</body>

1.2 EL 表达式搜索域数据的顺序

EL表达式主要是输出域对象中的数据

    当四个域中都相同的数据的时候。使用EL表达式输出数据。EL表达式会从四个域中分别搜索。
    搜索的顺序是 从小到大
    也就是 pageContext ----->>>> request ----->>>> session ----->>>> application

    <body>
		<%
// 			request.setAttribute("key", "request");
			session.setAttribute("key", "session");
			application.setAttribute("key", "application");
// 			pageContext.setAttribute("key02-", "pageContext");
		%>
		${ key }<br/>
    </body>

1.3 EL 表达式 输出Bean的普通属性,数组属性

a.)需求——输出Person类中普通属性,数组属性。list集合属性和map集合属性。

public class Person {

	private int age;
	private String[] phones;
	private List<String> list;
	private Map<String, Object> map;

	public String getAbc() {
		return "abc";
	}
	
}

jsp中的代码:

        <body>
		<%
			//创建一个Person对象。并且把它保存到域对象中
			Person person = new Person();
			person.setAge(18);
			person.setPhones(new String[]{"18610548888","18666668888","18699998888"});
			List<String> list = new ArrayList<String>();
			list.add("list1");
			list.add("list2");
			list.add("list3");
			person.setList(list);
			Map<String,Object> map = new HashMap<String,Object>();
			map.put("key1", "value1");
			map.put("key2", "value2");
			map.put("key3", "value3");
			person.setMap(map);
			
			request.setAttribute("p", person);
		%>
		person的对象输出 ==>> ${ p }<br/>
		person的age属性 ==>> ${ p.age }<br/>
		person的phones属性 ==>> ${ p.phones[2] }<br/>
		person的list属性 ==>> ${ p.list[2] }<br/>
		person的map属性 ==>> ${ p.map.key3 }<br/>
		person的abc属性 ==>> ${ p.abc }
        </body>

注:${ p.age }    p 表示一个Person对象.那么p.age 中的age表示找person对象的getAge方法(也就是读方法)

去掉Eclipse自动的一些较验。

        

1.4 EL 表达式 — — 运算

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

(1)关系运算

(2)逻辑运算

(3)算数运算

(4)empty运算

empty运算可以判断el有达式中的数据值是否为空。如果为空,就返回true。非空就是false。

  空的情况以下几种:

  1. 值为null的时候。
  2. 如果是Object数组,并且长度为零。
  3. 如果是空的字符串。
  4. 如果是List集合的时候。并且元素个数为零
  5. 如果是Map集合的时候。并且元素个数为零
        <body>
		<%
// 			1、值为null的时候。
			request.setAttribute("emptyValue", null);
// 			2、如果是Object数组,并且长度为零。
			request.setAttribute("emptyArr", new Object[]{});
// 			3、如果是空的字符串。
			request.setAttribute("emptyStr", "");
// 			4、如果是List集合的时候。并且元素个数为零
			List<String> list = new ArrayList<String>();
// 			list.add("123");
			request.setAttribute("emptyList", list);
// 			5、如果是Map集合的时候。并且元素个数为零
			Map<String,Object> map = new HashMap<String,Object>();
// 			map.put("erea", "asdf");
			request.setAttribute("emptyMap", map);
		%>
		${ empty emptyValue }<br/>
		${ empty emptyArr }<br/>
		${ empty emptyStr }<br/>
		${ empty emptyList }<br/>
		${ empty emptyMap }<br/>
        </body>

(5)元运算

表达式1 ? 表达式2 : 表达式3
        
    如果表达式1的值为true.就返回表达式2的值,如果表达式1的值为false,就返回表达式3的值。

     示例代码:    ${ 12 == 12 ? "12等于12":"12不等于12" }

(6)“.”点运算 和 [] 中括号运算符

“.”   点运算           可以取个一个JavaBean对象的某个属性的值。或取得一个Map对象中某个指定key的值

 []  中括号运算    可以取得一个有序集合中指定下标的元素值。中括号运算,还可以取得Map集合中key里含有特殊字符的key的值。

        <body>
		<%
			Map<String,Object> map = new HashMap<String,Object>();
			map.put("a.a.a", "aaaValue");
			map.put("b+b+b", "bbbValue");
			request.setAttribute("map", map);
		%>
		${ map['a.a.a'] }<br/>
		${ map["b+b+b"] }<br/>
        </body>

1.5 EL 表达式的11 个隐含对象

对象名			对象的类型		对象的作用
pageContext		PageContextImpl		获取jsp的九大内置对象

pageScope		Map<String,Object>	可以获取pageContext域中的数据
requestScope		Map<String,Object>	可以获取到request域中的数据
sessionScope		Map<String,Object>	可以获取到Session域中的数据
applicationScope	Map<String,Object>	可以获取到ServletContext域中的数据

param			Map<String,String>	可以获取到请求的参数值
paramValues		Map<String,String[]>	可以获取到请求的参数值(多个值

header			Map<String,String>	可以获取到请求头的值
headerValues		Map<String,String[]>	可以获取到请求头的值(多个值	

initParam		Map<String,String>	可以获取context-param上下文参数的值

cookie			Map<String,Cookie>	可以获取到Cookie的信息

1.6 EL 获取四个特定域中的属性

        pageScope                   <======>            pageContext    域
        requestScope               <======>            request 域
        sessionScope               <======>            Session域
        applicationScope          <======>            ServletContext 域

        你可以通过指定一个特定的域的EL隐含对象。输出指定域的数据。

1.7 pageContext对象的使用

       <body>
		<%
			pageContext.setAttribute("req", request);
		%>
		<!-- getScheme方法获取请求的协议 -->
		<!-- getServerName方法获取服务器的IP -->
		<!-- getServerPort方法获取服务器的端口号 -->
		<!-- getContextPath方法获取工程路径 -->
		<!-- getRemoteHost方法获取客户端的IP -->
		<!-- getSession方法获取当前会话对象 -->
		<!-- getSession().getId()方法获取当前会话的id -->
		<%=request.getSession().getId() %><br/>
		1.协议:		${ req.scheme }<br/>
		2.服务器ip:	${ pageContext.request.serverName }<br/>
		3.服务器端口:	${ pageContext.request.serverPort }<br/>
		4.获取工程路径:	${ pageContext.request.contextPath }<br/>
		5.获取请求方法:	${ pageContext.request.method }<br/>
		6.获取客户端ip地址:	${ pageContext.request.remoteHost }<br/>
		7.获取会话的id编号:	${ pageContext.request.session.id }<br/>
	</body>

1.8 EL表达式其他隐含对象的使用

paramparamValues    获取请求参数值

获取请求参数username的值:${ param.username }<br/>
		获取请求参数password的值:${ param.password }<br/>
		<hr/>
		${ param.hobby }<br/>
		${ paramValues.hobby[0] }--${ paramValues.hobby[1] }

headerheaderValues 获取请求头信息

        ${ header['User-Agent'] }<br/>
		${ headerValues['User-Agent'][0] }<br/>

initParam

      
 

    代码:${ initParam.username }

    cookie 的演示          ${ cookie.JSESSIONID.value }

2、JSTL 标签库

略过…… 后补

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!