EL和JSTL快速入门

 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>
运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值