天天看点

《Java从入门到放弃》JSP入门篇:EL和JSTL

EL即Expression Language(表达式语言),主要用来替代JSP页面中用来做简单运算和显示的代码。EL表达式可以用来显示page、request、session和application中的数据。

EL表达式的语法非常简单:

${  EL exprission },${  bean.name } 或  ${  bean['name'] }

案例:在页面上显示个人信息。

《Java从入门到放弃》JSP入门篇:EL和JSTL

User类代码如下:

package com.test.entity;

public class User {
	private String loginID;
	private String loginPWD;
	private String nickName;
	private String tel;
	
	public String getLoginID() {
		return loginID;
	}
	public void setLoginID(String loginID) {
		this.loginID = loginID;
	}
	public String getLoginPWD() {
		return loginPWD;
	}
	public void setLoginPWD(String loginPWD) {
		this.loginPWD = loginPWD;
	}
	public String getNickName() {
		return nickName;
	}
	public void setNickName(String nickName) {
		this.nickName = nickName;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	
	
}
           

index.jsp页面代码如下:

<body>
    <%
    	User user = new User();
    	user.setNickName("李大爷");
    	session.setAttribute("user", user);
    %>
    <p style="color:red;">${user.nickName }</p>
  </body>
           

运行效果:

《Java从入门到放弃》JSP入门篇:EL和JSTL

JSTL(JavaServerPages Standard Tag Library)是指JSP标准标签库。

使用JSTL的步骤:

1. 在JSP页面添加JSTL引用。

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

2. 使用JSTL标签。常用JSTL标签有if标签和forEach标签。

if标签用于判断条件是否成,与Java中的If语句做用相同。其语法如下:

<c:if   test="codition"    var="name"    scope="applicationArea" >

</c:if>

属性名 是否支持EL 属性类型 描述
test true Boolean 决定是否处理标签体的内容 
var false String 用于指定变量名,该变量用于保存test属性的判断结果
scope false String 用于指定变量的有效范围,默认值为page。可选值有page、request、session和application

案例:修改前一篇 文章中的需求,使用if标签。

《Java从入门到放弃》JSP入门篇:EL和JSTL

之前使用的纯JSP的代码实现的登录前后的效果。使用if标签实现,代码如下:

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

  <body>
    <c:if test="${empty user}" var="loginState">
		<a href="#" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >登录</a>&nbsp;
		<a href="#" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >注册</a>    
    </c:if>
    <c:if test="${!loginState }">
    	<a href='#'>${user.loginID }</a>
    </c:if>
   </body>
           

forEach标签,用于实现对集合中对象的遍历。语法格式如下:

<c:forEach     items=collection         var=name    begin=start   end=end  step=count>

</forEach>

属性名 是否支持EL 属性类型 描述
var false Boolean 决定是否处理标签体的内容 
item true 数组、字符串和集合类型 迭代的集合对象
varStatus false String 迭代的状态,可以获得迭代自身信息
begin true int 如果指定begin属性,则从item的下标为begin的位置开始迭代,如果没有指定begin属性,则从0下标开始迭代
end true int 如果指定end属性,就在item的下标为end的位置结束迭代,如果没有指定end属性,将迭代到最后一个下标位置。迭代的步长默认为1
step true int

案例:在页面上显示所有歌手。

数据库中的信息如下:

《Java从入门到放弃》JSP入门篇:EL和JSTL

创建singerList.jsp页面,代码如下(可以自己创建集合,添加临时数据,效果相同):

SingerService singerService = new SingerService();
List<Singer> list = singerService.selectAll();
session.setAttribute("singerList", list);
           
<body>
    <c:forEach items="${singerList }" var="singer" varStatus="status">
    	<p ${status.index%2==1?"style='background-color: #aa8a0c;'":"" }>${singer.singerName }&nbsp;&nbsp;${singer.birthday }</p>
    </c:forEach>
  </body>
           

运行结果如下:

《Java从入门到放弃》JSP入门篇:EL和JSTL