JSTL标签&EL表达式

一.EL表达式

1.1EL表达式简介

1、目的:简化jsp界面,减少HTML代码与java代码的耦合。(减少jsp中java代码)

2、基本语法:${EL表达式}

3、“.”和[]运算符

${user["username"]}

${user.username}

 

 

 

4、算术运算符

在EL表达式中也能够使用:+,-,*,/(div),%(mod)运算符的。例如:

${list[0]-list[1]}

 

 

5、关系运算符EL表达式的关系运算符和JAVA中的关系运算符一样。(==,!=,>(gt),<(lt),>=(ge),<=(le))

${list[0]>=list[1]}

${list[0] ge list[1]}

 

 

 

6、逻辑运算符&&(and)  ||(or)  !(not)

${list[0]>90 && list[1]<100}

${list[0]>90 and list[1]<100}

${!(list[0]<100)}

${not(list[0]<100)}

 

 

 

 

7、三目运算符

${lsit[0]>list[1]? list[0]:list[1]}

8、empty运算符(重点)

作用1:判断对象是否存在,不存在返回true,否则返回false

作用2:判断集合数组中是否存在元素,不存在返回true,存在返回false。

作用3:判断字符串是否为空或null,为空返回true,否则返回false

1.2EL表达式的作用域

page--》request--》session--》application

例如:${username}这个表达式,会首先从page的属性中去找username,如果找到那么输出;如果没有找到,那么继续到request对象中去找,一直到找到为止。如果到application中都没有找到,那么输出空。

示例:

session.setAttribute("uname", "zhangsan");

request.setAttribute("uname", "李四");

${uname}

 

 

 

上面这段程序输出结果:“李四”,而不会输出”zhangsan”。

1.3其他对象

1、param对象:从URL参数,或者表单数据中获取内容。

例如:

http://127.0.0.1:8080/Servlet4/demo?id=123

${param.id}

 

 

 

2、获取cookie

//写一个cookie

Cookie cookie = new Cookie("cname", "wangwu");

response.addCookie(cookie);

${cookie.cname.value}

 

 

 

 

3、pageContext(用来获取项目的跟路径)

<%= pageContext.getServletContext().getContextPath() %>

<br>

${pageContext.request.contextPath}

 

 

 

二JSTL标签

要使用JSTL标签,那么必须向项目中条件JSTL的依赖JAR包:jstl-1.2.jar

2.1核心库

1.引入核心库

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

2.核心库中的内容

3.流程控制标签-----if

<h4>流程控制标签if</h4>

<p>如果年龄小于等于18岁,那么显示未成年人禁止访问~</p>

<!--

注意:if标签是没有else选项的。如果还要对结果进行再次判断,那么可以将结果放在

属性var中(相当于在page中给了一个level的属性,值就是if判断的结果)。

 -->

<c:if test="${age<18}" var="level">未成年人禁止访问</c:if>

<c:if test="${!level}">已满18岁,可以访问了哦……</c:if>

 

 

 

 

 

 

4.流程控制标签---choose when otherwise

choose when otherwise是一套标签,相当于:if..else if.......else....

<h4>流程控制标签:choose</h4>

<p>下拉列表的初始化功能。根据sevlet传过来的学历信息来初始化下拉列表。</p>

学历:

<select>

<c:choose>

<c:when test="${xl==1}">

<option value="1" selected="selected">初中</option>

<option value="2">高中</option>

<option value="3">大学</option>

</c:when>

<c:when test="${xl==2}">

<option value="1">初中</option>

<option value="2" selected="selected">高中</option>

<option value="3">大学</option>

</c:when>

<c:otherwise>

<option value="1">初中</option>

<option value="2" >高中</option>

<option value="3" selected="selected">大学</option>

</c:otherwise>

</c:choose>

</select>

 

 

 

 

 

 

 

 

 

 

 

 

 

5.循环标签forEach

一般用于下拉表数据绑定

//servlet构建需要显示的数据列表

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//手动构建一个userlist

List<User> list = new ArrayList<>();

for(int i=0;i<12;i++){

User u = new User();

u.setUsername("用户"+i);

u.setUserpwd("123"+i);

list.add(u);

}

request.setAttribute("list", list);

request.getRequestDispatcher("/userlist.jsp").forward(request, response);

}

//在jsp中使用foreach标签完成循环显示

<tbody>

<c:forEach items="${list}" var="user">

<tr>

<td>${user.username}</td>

<td>${user.userpwd}</td>

</tr>

</c:forEach>

</tbody>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.2国际化标签

1.引用国际化标签库

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

2.日期格式化formatDate

<fmt:formatDate vlue="${date}" pattern="yyyy-mm-dd HH:mm:ss"/>

2.3functions

1.引用函数标签库

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

3、使用示例

<td title="${user.username}">

${(fn:length(user.username)>3)?(fn:substring(user.username,0,3)):user.username}

</td>