EL&JSTL表达式

EL&JSTL表达式

1.EL表达式

​ EL(Express Lanuage)表达式(${ })可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中脚本的编写

EL表达式最主要的作用是从域中获取值

		<!-- 在域中存值 -->
	<%
		request.setAttribute("name", "张三");
	
		User user=new User();
		user.setId(1);
		user.setName("李四");
		user.setPassword("123");
		session.setAttribute("user", user);
		
		List<User> list=new ArrayList<User>();
		User user1=new User();
		user1.setId(1);
		user1.setName("王五");
		user1.setPassword("123");
		list.add(user1);
		User user2=new User();
		user2.setId(1);
		user2.setName("赵二");
		user2.setPassword("123");
		list.add(user2);
		application.setAttribute("list", list);
	%>
	
	<!-- 通过脚本来取值 -->
	<%=request.getAttribute("name") %>
	<%
		User sessionuser=(User)session.getAttribute("user");
		out.write(sessionuser.getName());
	%>
	<hr>
	<!-- 通过EL表达式来取值 不需要通过方法来返回属性值,可以直接.属性名来获取值 注意!!属性不是成员变量!!-->
	${requestScope.name}
	${sessionScope.user.name}<!-- 不需要通过user对象中的getName()来获取name的值,直接.name就可以 -->
	${applicationScope.list[1].name}
	
	<hr>
	<!-- 通过EL表达式全局取值 默认从最小的域开始找,直到找到就结束-->
	${name}
	${user.name}
	${list[1].name}

requestScope、applicationScope、sessionScope是EL中的内置对象,代表的是从指定的域对象中获取相应的属性

注意:属性和成员变量是不同的概念!!!!!

属性:属性是通过set()和get()来设置的,setAAA(),getAAA()中AAA就是属性。

成员变量:private int XXX,这是成员变量,只不过我们通常将成员变量和属性设置成一样的。

但需要注意的是EL是通过属性来获取成员变量的,不能直接获取成员变量!

2.通过EL表达式获取项目路径

​ 一般通过**${pageContext.request.contextPath}**来动态获取项目名称路径类似于request.getContextPath();

3.EL内部支持表达式

​ 例如:${1=1}

​ ${empty user}

​ ${user==null?true:false}

2.JSTL

​ JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。

​ 目前一般只是用jstl的核心库Core,具体步骤:

  1. 导入jstl.jar包 这个可以去Apache官网下载

  2. 通过taglib指令导入核心库

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>

1.JSTL核心库的常用标签

​ 1.<c: if>标签

<c:if test="id==1">
	xxxxxx
</c:if>
test中是返回boolean条件,并没有else,只能通过
<c:if test="id!=1">
	xxxxxx
</c:if>

​ 2.<c: forEach>标签 有两种表现形式

<!--第一种 
items代表的是集合或者数组 var表示的是集合中的元素
相当于:
List<String> list=new ArrayList<String>()
for(String str:list){
	sys(str)		
}
-->
<c:forEach items="list" var="str">
	${str}
</c:forEach>

<!-- 第二种
相当于:
for(int i=0;i<=5;i++){
	xxx
}
-->
<c:forEach begin="0" end="5" var="i">
	${i}
</c:forEach>

JSTL&EL遍历List和Map集合:

<!-- 通过jstlforEach标签和EL表达式来遍历List和Map集合 -->
	<%
		List<String> list=new ArrayList<String>();
		list.add("aaaaa");
		list.add("bbbbb");
		list.add("ccccc");
		request.setAttribute("list", list);
		
		
		Map<String,User> map=new HashMap<String,User>();
		List<User> userlist=new ArrayList<User>();
		User user1=new User();
		user1.setName("王五");
		userlist.add(user1);
		User user2=new User();
		user2.setName("赵二");
		userlist.add(user2);
		
		map.put("key1",user1);
		map.put("key2",user2);
		session.setAttribute("map", map);
	%>
	
	<!-- forEach标签与EL遍历集合 -->
	<!-- items代表的是集合或者是数组  str代表是的集合中的某一元素
		for(String str:list){
			sys(str);
		}
	-->
	<c:forEach items="${list}" var="str">
		${str}<br>
	</c:forEach>
	<!-- entry代表的是键值对,EL表达式直接通过.key获取键值,同样.value获取相应的值
		这里的value是User对象所以可以通过.name获得name的值
	 -->
	<c:forEach items="${map}" var="entry">
		${entry.key}=======${ entry.value.name}<br>
	</c:forEach>

猜你喜欢

转载自blog.csdn.net/qq_38238296/article/details/88614223
今日推荐