EL:Expression Language
作用:快速输出JavaBean的值 ,也可用于关系运算(参考下面el_demo.jsp)
格式:${标识符}
原理:通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符 所对应的对象,则返回结果为””(注意,不是null)。
<%@ isELIgnored="false" %>来控制EL表达式是否起作用
简单例子:
<html>
<head>
<title>el_demo</title>
</head>
<body>
<%--JSP脚本片段 --%>
<%
Address address=new Address();
address.setLocation("洛阳");
address.setZipcode("471800");
Student stu=new Student();
stu.setName("笑笑");
stu.setAge(25);
stu.setSalary(4000);
stu.setAddress(address);
session.setAttribute("S", stu);
%>
用户名:${S.name};<br>
年 龄:${S.age};<br>
薪 水:${S.salary};<br>
地 址:${S.address.location};<br>
邮 编:${S.address.zipcode};<br>
10>5->${10>5}<br>
10==5->${10==5}<br>
10<5->${10<5}<br>
</body>
</html>
运行结果:
需要用到的JavaBean:
public class Student {
private String name;
private int age;
private double salary;
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public Student(){
System.out.println("web容器通过反射创建JavaBean对象");
}
public String getName() {
System.out.println("getName()");
return name;
}
public void setName(String name) {
this.name = name;
System.out.println(name);
}
public int getAge() {
System.out.println("getAge()");
return age;
}
public void setAge(int age) {
this.age = age;
System.out.println(age);
}
public double getSalary() {
System.out.println("getSalary()");
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
System.out.println(salary);
}
}
public class Address {
private String location;
private String zipcode;
public Address(){}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
JSTL:
JavaStandardTaglibLanguage,快速输出动态内容,以代替JSP页面中的脚本<%%>代码,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码。
在页面中使用JSTL标签需完成以下2个步骤:
1、导入jstl.jar和standerd.jar这两个JSTL的jar文件(放入Web应用中的WEB-INF的lib文件中,在MyEclipse中环境中,可以在创建Web工程时选择Add JSTL libraries to WEB-INF/lib folder选项,这样即可自动将所需jar文件放入lib库目录)。
2、在JSP页面中使用<%@ tablib url=“” prifix=“” %>元素导入标签库。
注意
是否已将集合或变量绑定到域对象中,并确保该域对象没有销毁,因为EL只有从域对象中检索对应的值
JSTL都会和EL绑定在一起用
代码案例:
<html>
<head>
<title>jstl_demo</title>
</head>
<body>
<%
List<String> stringlist=new ArrayList<String>();
stringlist.add("01");
stringlist.add("02");
stringlist.add("03");
stringlist.add("04");
request.setAttribute("SL", stringlist);
%>
<table border="0" align="center">
<tr>
<th>ID</th>
<th>操作</th>
</tr>
<%--取出域对象内容赋给var --%>
<c:forEach var="s" items="${SL}">
<tr>
<td>${s}</td>
<td>购买</td>
</tr>
</c:forEach>
</table>
</body>
</html>
注意页面元素的声明:
<%@ page isELIgnored="false" %>
<%--prefix设置以c开头的标签 --%>
例如要导入核心库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
重点:循环控制标签:<c:forEach>用于循环控制:
<c:forEach>属性
属性 描述 是否必须 缺省值
items 要进行循环的项目 否 无
var 代表当前元素的变量名 否 无
对刚才的代码进行修改,用双列集合Map接口来实现:
<html>
<head>
<title>jstl_demo</title>
</head>
<body>
<%-- <%
List<String> stringlist=new ArrayList<String>();
stringlist.add("01");
stringlist.add("02");
stringlist.add("03");
stringlist.add("04");
request.setAttribute("SL", stringlist);
%> --%>
<%
Map<Integer,String> map=new LinkedHashMap<Integer,String>();
map.put(1, "java");
map.put(1, "xml");
map.put(1, "servlet");
map.put(1, "jsp");
pageContext.setAttribute("MAP", map);
%>
<table border="0" align="center">
<tr>
<th>编号</th>
<th>书名</th>
<th>操作</th>
</tr>
<%--取出域对象内容赋给var --%>
<%-- <c:forEach var="s" items="${SL}"> --%>
<c:forEach var="entry" items="${MAP}">
<tr>
<td>${entry.key}</td>
<td>${entry.value}</td>
<td>购买</td>
</tr>
</c:forEach>
</table>
</body>
</html>
运行结果: