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}
扫描二维码关注公众号,回复:
5556562 查看本文章
2.JSTL
JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。
目前一般只是用jstl的核心库Core,具体步骤:
-
导入jstl.jar包 这个可以去Apache官网下载
-
通过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>