常用标签"/>
JSTL+EL JSP常用标签
JSP常用标签的配置及使用JSTL
什么是JSTL?
—JSTL是java中的一个定制标记库集
为什么要使用JSTL?
—实现了JSP页面中的代码复用:基于标签库原理,重复率较高的代码块支持复用,提高效率
—书写JSP页面时可读性更强:长得很像xml,方便前端查看和参与开发。
实际演示:
JSTL环境搭建
由于JSTL标签和Servet及JSP页面有着比较严格的版本对应关系,版本对应不正确很容易抛出异常,所以我们采用:
下载配置Tomcat不再赘述
下载JSTL1.1.2
以此寻找下面的路径
jakarta/taglibs/standard/binaries/ 找到对应版本的zip包进行下载
创建eclipse web project工程
把lib下的两个文件直接粘贴到WEB-INF目录下的lib目录下
选中两个文件,右键
配置Tomcat7.0 Server
运行项目,保证项目可以正常运行。
第一个JSTL小程序
导入标签库
<c:out>//输出标签
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib uri="" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ".dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><c:out value="this is myFirst JSTLDemo"> </c:out>
</body>
</html>
JSTL的好帮手-EL表达式
JSTL标签的四大分类及JSTL函数
*核心标签
——最常用,最重要
*格式化标签
SQL标签
XML标签
*JSTL函数
——常用
<c:out>
中的value输出变量需要使用EL表达式
什么是EL表达式
全名为Expression Language
——经常与JSTL配合使用,使得JSP页面更直观,写法更简单
——普通写法:<%=session.getValue("name") %>
——EL表达式写法:<c:out value="${sessionScope.name}"/>
*EL表达式的格式
——使用“$”定界,内容包括在花括号“{}”中;${表达式}
“.”与”[]”运算符
*通常情况是通过 ${user.sex} ${user["sex"]}
*”[]”还可以用来进行集合元素中的定位 ${booklist[0].price}
*除2中情况外
——1.包含特殊字符:
* user.first−name错误的写法∗ <script type="math/tex" id="MathJax-Element-1">{user.first-name} 错误的写法
* </script>{user[“first-name”]} 正确的写法
——2.通过变量动态取值: user[param]∗param可以是nameorsexorothers∗“.”的写法是 <script type="math/tex" id="MathJax-Element-2">{user[param]}
* param可以是name or sex or others
* “.”的写法是</script>{suer.name}or ${user.sex}….需要具体的变量名
*
EL变量
按照从小到大的顺序查找变量,page->request->session->application
EL自动类型转换
要取得文本框中的输入,我们需要做类型转换
EL运算符
运算符允许对数据和文字进行组合以及比较。
验证匀速符(empty):对于验证数据特别有用。可以将empty和表达式配合使用,通过判断结果值(true or false)来判断表达式是否为NULL。
<body><c:out value="this is myFirst JSTLDemo"> </c:out><br><c:out value="${1+2}"> </c:out><br><%String username=""; request.setAttribute("username", username); %><c:out value="${empty username}"> </c:out><br>
</body>
JSTL核心标签的使用
JSTL标签之out标签
JSTL的核心标签库标签共13个,从功能上可以分为4类
——表达式控制标签:out set remove catch
——流程控制标签: if choose when otherwise
——循环标签:forEach forTokens
——URL操作标签:import url redirect
表达式控制标签out详解
out标签的用法?
——输出常量
*可在value属性中直接赋值
——输出变量
*变量不存在时可配合default属性输出默认值,还可通过escapeXml控制转义字符的输出方式
<body><!-- 使用out标签输出常量 --><c:out value="this is myFirst JSTLDemo"> </c:out><br><!-- 使用out标签输出变量 --><%session.setAttribute("name", "Jessica"); %><c:out value="${name}"></c:out><br><!-- 当变量不存在时,通过default不存在时输出默认值 --><c:out value="${name1}" default="error"></c:out><br><!-- 设置输出转义后的字符需要escapeXml设置成false --><c:out value="<out标签>" escapeXml="false"></c:out><br>
</body>
JSTL标签之set标签
*set标签的用法
——存值到scope中
可将值以变量形式存放在指定的范围中(2种方式)
<!-- 存值到scope中 --><c:set value="today" var="day" scope="session"></c:set><c:out value="${day}"></c:out><br><c:set var="age" scope="application">eleven</c:set><c:out value="${age}"></c:out><br>
——存值到JavaBean的属性中
需要配合target属性指定对象并且通过property属性指定要赋值的对象中的哪个属性
代码示例:
新建Person.java类
package com.vishuo.test;public class Person {private String name2;private String age2;private String address;public String getName2() {return name2;}public void setName2(String name2) {this.name2 = name2;}public String getAge2() {return age2;}public void setAge2(String age2) {this.age2 = age2;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}
index.jsp文件
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="" prefix="c"%><jsp:useBean id="person" class="com.vishuo.test.Person"></jsp:useBean><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ".dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><!-- 通过set标签向person中赋值 --><c:set target="${person}" property="name2" value="zhangsan"></c:set><c:out value="${person.name2}"></c:out> <br><c:set target="${person}" property="age2" value="26"></c:set><c:out value="${person.age2}"></c:out> <br><c:set target="${person}" property="address" value="北京市 朝阳区"></c:set><c:out value="${person.address}"></c:out><br><c:set target="${person}" property="name2" >zhangsan</c:set><c:out value="${person.name2}"></c:out> <br><c:set target="${person}" property="age2">26</c:set><c:out value="${person.age2}"></c:out> <br><c:set target="${person}" property="address" >北京市 朝阳区</c:set><c:out value="${person.address}"></c:out><br>
</body>
</html>
JSTL标签之remove标签
remove标签的用法
——remove掉某个变量
——var属性是必选
——scope属性是可选的
如果在不同的scope中存在相同名称的scope变量的话,我们就可以指定到具体的scope去remove
<!-- remove标签的用法 --><c:set var="firstName" value="Lily"></c:set><c:out value="${firstName}"></c:out><br><c:set var="lastName" value="wang"></c:set><c:remove var="lastName"/><c:out value="${lastName}"></c:out><br>
JSTL标签之catch标签
*catch标签的用法
——catch标签中可以包含那些容易出错的JSTL标签(逻辑)
<!-- catch标签的用法 --><c:catch var="error"><c:set target="aa" property="bb">asasa</c:set></c:catch><c:out value="${error}"></c:out><br>
JSTL标签之if标签
if标签的用法
——同程序中的if作用相同,用来实现分支条件控制
*test属性用于存放判断条件,一般使用EL表达式来编写
*var指定名称用来存放判断的结果类型为true或false
*scope用来存放var属性存放的范围
<c:if test="" var="" scope=""></c:if>
<!-- if标签的用法 --><form action="index.jsp" method="post"><input type="text" name="score" value="${param.score}" /><input type="submit"></form><br><!-- 优秀score>=90 --><c:if test="${param.score>=90}" var="result" scope="application"><c:out value="恭喜,您的成绩是优秀!"></c:out></c:if><c:out value="${applicationScope.result}"></c:out><br>
JSTL标签之choose-when-otherwise标签
choose,when,otherwise标签的用法
——通常这三个标签被放在一起配合使用
——<c:choose>
标签嵌套在<c:when>
和<c:otherwise>
标签的外面作为他们的父标签来使用
——其中choose和when标签也可以一起组合使用
综上所述通常有以下二种语法结构:
——用法一:3个标签同时使用
<c:choose><c:when test="判断条件">......//业务逻辑1<c:when>......//业务逻辑2<c:otherwise>......//业务逻辑3</c:choose>
<form action="index.jsp" method="post"><input type="text" name="score" value="${param.score}" /> <input type="submit" value="提交验证"/></form><br><!-- choose,when,otherwise --><c:choose><c:when test="${param.score>=90 && param.score<=100}"><c:out value="优秀"></c:out></c:when><c:when test="${param.score>=80 && param.score<90}"><c:out value="良好"></c:out></c:when><c:when test="${param.score>=70 && param.score<80}"><c:out value="中等"></c:out></c:when><c:when test="${param.score>=60 && param.score<70}"><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><c:choose><c:when test="${param.score==100}"><c:out value="太棒了,你是第一名"></c:out></c:when></c:choose>
JSTL标签之forEach标签
forEach标签的用法
——根据循环条件遍历集合(Collection)中的元素
* var设定变量名用于存储从集合中取出元素(必须无默认值)
* items指定要遍历的集合(必须无默认值)
* begin,end用于指定遍历的起始位置和终止位置(有默认)
* step指定循环的步长(有默认)
* varStatus通过index,count,first,last几个状态值,描述begin和end子集中的元素的状态
常用用法1—全部遍历
<c:forEach var="存储当前遍历元素的变量" items="待遍历集合">——操作var变量表示的元素<br>
</c:forEach>
<!-- forEach标签的用法 --><%List<String> fruits = new ArrayList<String>();fruits.add("apple");fruits.add("orange");fruits.add("pear");fruits.add("watermelon");fruits.add("banana");fruits.add("grape");request.setAttribute("fruits", fruits);%><!--用法一:全部遍历 --><c:forEach var="fruit" items="${fruits}"><c:out value="${fruit}"></c:out><br></c:forEach>
常用用法2—部分遍历
<!--用法二:部分遍历 --><c:forEach var="fruit" items="${fruits}" begin="1" end="4"><c:out value="${fruit}"></c:out><br></c:forEach><c:out value="==========================="></c:out><br>
常用用法3—部分遍历中指定步长
<!--用法三:部分遍历并且指定步长 --><c:forEach var="fruit" items="${fruits}" begin="1" end="4" step="2"><c:out value="${fruit}"></c:out><br></c:forEach><c:out value="==========================="></c:out>
常用用法4—部分遍历时候输出元素状态
<!--用法四:部分遍历并且输出元素状态 --><c:forEach var="fruit" items="${fruits}" begin="1" end="4" step="1" varStatus="fru"><c:out value="${fruit}的四个属性值"></c:out><br><c:out value="index属性${fru.index}"></c:out><br><c:out value="count属性${fru.count}"></c:out><br><c:out value="first属性${fru.first}"></c:out><br><c:out value="last属性${fru.last}"></c:out><br><c:out value="————————————————————————————"></c:out><br></c:forEach><c:out value="==========================="></c:out><br>
forTokens标签的用法
——用于浏览字符串,并根据指定的字符将字符串截取
*items指定被迭代的字符串
*delims指定使用的分隔符
*var指定用来存放遍历到的成员
*begin指定遍历的开始位置(int型从取值0开始)
*end指定遍历结束的位置(int型,默认集合中最后一个元素)
*step遍历的步长(大于0的整型)
*varStatus通过index,count,first,last几个状态值,描述begin和end子集中的元素的状态
<!--forTokens标签的用法 --><c:forTokens items="010-88096789-123" delims="-" var="num"><c:out value="${num}"></c:out><br></c:forTokens>
import标签的用法
——可以把其他静态或动态文件包含到本JSP页面
——同<jsp:include>
的区别为:只能包含同一个web应用中的文件。而<c:import>
可以包含其他web应用中的文件,甚至是网络上的资源。
<!--import标签的用法 --><!-- 导入网络上的绝对路径 --><c:catch var="error09"><c:import url="" charEncoding="utf-8"></c:import></c:catch><c:out value="${error09}"></c:out><br><!-- 导入相对路径文件 --><c:catch var="error09"><c:import url="/tt.txt" charEncoding="utf-8"></c:import></c:catch><c:out value="${error09}"></c:out><br>
*context引入的内容是webapps下的其他web project
——1.修改tomcat的发布路径
——2.修改TOMCAR_HOME%/conf/context.xml的Context标签中的属性
* crossContext=”true”
第一步:
remove掉已加载的项目。tomcat要保持运行
第二步:
修改Context,保存
重新运行项目。
<!-- context属性的用法 --><c:catch var="error06"><c:import url="/importFile.jsp" context="/AnotherWebProject" charEncoding="utf-8"></c:import></c:catch><c:out value="${error06}"></c:out><br>
JSTL标签之redirect标签
——该标签用了实现请求的重定向,同时可以在url中加入指定的参数
*url 指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址
*context用于导入其他web应用中的页面
<!-- redirect标签的用法 --><c:redirect url="sencond.jsp"><c:param name="username">Lily</c:param><c:param name="password">aaaaaa</c:param></c:redirect><!-- 在sencond.jsp中获取传过来的值 --><c:out value="${param.username}"></c:out><c:out value="${param.password}"></c:out>
JSTL标签之url标签
——该标签用于动态生成一个String类型的URL,可以同<c:param>
标签共同使用,也可以使用html的<a>
标签实现超链接。
<!-- url标签 --><c:if test="${ 1<3 }"><c:set var="partUrl">aa</c:set></c:if><c:url value="http://localhost:8080/${partUrl}" var="newUrl" scope="session"></c:url><a href="${newUrl}">新的URL</a>
JSTL函数之常用函数(1)
*要在页面添加
<%@ taglib prefix="fn" uri="" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri=""%>
<%@ taglib prefix="c" uri=""%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ".dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSTL函数的使用</title>
</head>
<body><c:out value="“你好,Hello World中是否包含“World”${fn:contains('你好Hello World','World')}"></c:out><br><c:out value="“你好,Hello World中是否包含“aaaa”${fn:contains('你好Hello World','aaaa')}"></c:out><br><c:out value="“你好,Hello World中是否包含“hello”${fn:containsIgnoreCase('你好Hello World','hello')}"></c:out><br><br /><c:out value="${fn:startsWith('刘德华','刘')}"></c:out><br /><c:out value="${fn:endsWith('刘德华','华')}"></c:out><br /><br /><c:out value="${fn:escapeXml('<book>冰与火之歌</book>') }"></c:out><c:out value="${('<book>冰与火之歌</book>') }"></c:out><br /><c:out value="“你好,Hello World中,'llo'出现的值”${fn:indexOf('你好,Hello World','llo')}"></c:out><br><br />
</body>
</html>
代码示例:
链接: 密码: xg8a
更多推荐
JSTL+EL JSP常用标签
发布评论