JSTL标签和EL表达式

    |     2016年12月29日   |   struts2   |     0 条评论   |    2059

目录结构

一、JSTL简介和环境配置
  1、什么是JSTL
  2、为什么要使用JSTL
  3、JSTL环境搭建
二、EL表达式
  1.什么是EL表达式?
  2.EL变量
  3.EL隐式对象
  4.EL运算符
三、JSTL核心标签库使用
四、JSTL函数使用

一、JSTL简介和环境配置

1、什么是JSTL

JSP 标准标签库(JSP Standard Tag Library,JSTL)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。
JSTL标签库分为:1、核心标签库core 2、格式化标签库. 3、SQL标签库 4、XML标签库

2、为什么要使用JSTL

实现了JSP页面中的代码复用(基于标签库原理,重复率较高的代码块支持复用,提高效率)
书写JSP页面时可读性更强(长得很像xml,方便前端查看和参与开发)

3、JSTL环境搭建

JSTL的下载:

下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
下载文件:jakarta-taglibs-standard-1.1.2.zip————2004-10-25 20:57 933K

解压文件后,在lib文件夹会获得两个jar包: standard.jar和jstl.jar

需要把这两个jar包导入到项目中,jsp页面引入标签库

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

注意:

载入外来包,我们不介意采取:右击项目——Build Path方式,因为这样只是引入了一个jar包的link进来,如果把项目挪动位置或者把jar包删除了,则报错。所以我们推荐直接把要载入的文件复制到:项目——WebRoot\WEB-INF\lib里面,不要忘了把jar包选中——右键——Build Path—-Add to Build Path。这样做可以让jar包随着项目走,绑在了一起。

二、EL表达式

JSTL标签中Value中的值其实可以输出变量和常量。其中常量可以直接输出,变量需要通过EL表达式去获取。

<c:out value="20"></c:out>
<c:out value="${age}"></c:out>

el1

1.什么是EL表达式?

全名是Expression Language,常常配合jstl标签库使用,使得JSP页面更直观,写法更简单。

比如:普通写法:
<%=session.getValue("name")%>
EL表达式写法:
<c:out value="${sessionScope.name}" />

EL表达式的格式:

用美元符号“$”定界,内容包括在花括号“{}”中,即${表达式}。

注意“.”和“[]”运算符:
el2

2.EL变量

el3

如:<c:out value="${temp}"></c:out>

如果没有做范围的限定,会依据默认从小到大开始搜索,如果还是找不到,则输出空字符串。
el4

3、EL隐式对象

el5

4、EL运算符

el6

对empty举例:

<% String username="null"; request.setAttribute("username", username); %>
<c:out value="${empty username}"></c:out>
Ps:如果username为null或者"",则返回true;如果username为"有内容",则返回false。

el表达式中empty运算符对字符串为Null,及空字符串都返回 TRUE。

三、JSTL核心标签库使用

JSTL 核心标签库标签共有13个,功能上分为4类:

1.表达式控制标签:out、set、remove、catch

2.流程控制标签:if、choose、when、otherwise

3.循环标签:forEach、forTokens

4.URL操作标签:import、url、redirect

使用标签时,一定要在jsp文件头加入以下代码:

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

1、out标签(表达式控制标签)

out标签的作用:

 
        <c:out value="23" default="20"></c:out>
	<c:out value="${age}" default="20"></c:out>

2、set标签(表达式控制标签)

set的标签的作用:

存值到scope中(page,request,session,application);
可以将值以变量形式存放在指定范围内,有两种方式:

<c:set var="age" value="23" scope="session" /> 	<%-- <c:set var="age" scope="session">23</c:set>--%>
<h1><c:out value="三、set标签给javaBean属性赋值"></c:out></h1>
	<jsp:useBean id="person" class="com.ittx.entity.Person" scope="page" />
	<c:set target="${person}" property="name" value="麻子"></c:set>
	<c:out value="${person.name}" />
	<%-- <jsp:setProperty property="name" name="person" value="小明11"/> --%>
	<%-- <jsp:getProperty property="name" name="person" /> --%>

3、remove标签(表达式控制标签)

remove标签的用法:

只能remove掉某个变量(不能remove某个类对象的某个属性);
var属性是必选;
scope属性是可选。

<c:set var="firstName" value="小明"></c:set>
	<c:remove var="firstName" />

4、catch标签(表达式控制标签)

catch标签的用法:

catch标签中可以包含那些容易出错的JSTL标签(逻辑)

<c:catch var="error">
		<c:set target="user" property="firstName" value="lili"></c:set>
	</c:catch>
	<c:out value="${error}"></c:out>

5、if标签(流程控制标签)

if标签的用法:

同程序中的if作用相同,用来实现分支条件控制。
test属性用于存放判断的条件,一般使用EL表达式来编写。
var指定名称用来存放判断的结果类型为true或false
scope用来存放var属性存放的范围。

比如:根据用户输入的成绩进行等级判断

<c:if test="${param.score >= 90}" var="result">
		<c:out value="成绩优异!"></c:out>
	</c:if>

	<c:out value="${result}"></c:out>

6、choose、when、otherwise(流程控制标签)

 choose、when、otherwise 标签的作用:

通常这三个标签被放在一起配合使用
标签嵌套在标签的外面作为他们的父标签来使用。 
其中choose和when标签也可以一起组合使用。
综上所述通常有以下两种语法结构:

<c:choose>
			<c:when test="${param.score<=100 && param.score>=60 }">
				<c:out value="及格"></c:out>
			</c:when>
			<c:when test="${param.score<60 && param.score>=0 }">
				<c:out value="不及格"></c:out>
			</c:when>
			<c:otherwise>
				<c:out value="请检查你的输入!"></c:out>
			</c:otherwise>
		</c:choose>

7、forEach(循环控制标签)和forTokens(循环控制标签)

forEach标签的作用:

<h1>forEach</h1>
	
	<%
		ArrayList<String> lists = new ArrayList();
		lists.add("one");
		lists.add("two");
		lists.add("three");
		lists.add("four");
		session.setAttribute("list", lists);
		
	%>
	<c:forEach items="${sessionScope.list}" var="item" begin="1" end="3">
		<c:out value="${item}"/>
	</c:forEach>
	
	
	<br><hr>
	<h1>forTokens</h1>
	<%
		String noUrl = "login.jsp;login.do;loginout.jsp;register.jsp";
		session.setAttribute("noUrl", noUrl);
	%>
	<c:forTokens items="${sessionScope.noUrl}" delims=";" var="item">
		<c:out value="${item}"/><br>
	</c:forTokens>

9、URL操作标签

import,redirect标签,url标签

<%-- <jsp:include page="./index.jsp"></jsp:include> --%>
	<c:import url="http://www.baidu.com" charEncoding="utf-8"></c:import>
	
	<br><hr>
	<h1>redirect</h1>
	<%-- <c:redirect url="./index.jsp">
		<c:param name="userName" value="10"></c:param>
	</c:redirect> --%>
	
	<br><hr>
	<h1>url</h1>
	<c:url var="main" value="http://192.168.5.3:8080/Jstl/index.jsp">
		<c:param name="userName" value="11"></c:param>
		<c:param name="passWord" value="123456"></c:param>
	</c:url>
	
	<c:out value="${main}"></c:out>
	
	<a href="${main}">首页</a>

四、JSTL函数使用

1、contains函数、startsWith、endsWith

contains函数表示加入的字符串是否包含字串,返回一个boolean类型的值。

Ps1:配合使用:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

2、escapeXml、indexOf

<c:out
		value="“Hello World”字符串中是否包含“Hello”?${fn:contains('Hello World','Hello')}"></c:out>
	<hr>
	<c:out
		value="“Hello World”字符串中是否包含“ABCD”?${fn:contains('Hello World','ABCD')}"></c:out>
	<hr>
	<c:out
		value="“Hello World”字符串中是否包含“hello”(忽略大小写)?${fn:containsIgnoreCase('Hello World','hello')}"></c:out>
	<hr>
	<c:out
		value="“Hello”是否在“Hello World”字符串开头?${fn:startsWith('Hello World','Hello')}"></c:out>
	<hr>
	<c:out
		value="“world”是否在“Hello World”字符串尾部?${fn:endsWith('Hello World','world')}"></c:out>
		
	<c:out value="${fn:indexOf('helloworld','java')}"></c:out>	
	
    <c:out value="${fn:escapeXml('<book>书</book>')}"></c:out>
    <c:out value="<book>书</book>"></c:out>

h1

转载请注明来源:JSTL标签和EL表达式

上一篇:

下一篇:

回复 取消