JavaWeb学习心得之JSTL标签库
来源:互联网 发布:什么是dsp广告知乎 编辑:程序博客网 时间:2024/04/28 14:22
一、JSTL标签库简介
JSTL标签库的使用是为了弥补html标签的不足,规范定义而诞生的。其包括核心标签、国际化标签、数据库标签、xml标签和JSTL函数。
二、核心标签库说明
JSTL的核心标签共有13个,从功能上分为4类:
- 表达式控制标签:out标签、set标签、remove标签、catch标签
- 流程控制标签:if标签、choose标签、when标签、otherwise标签
- 循环标签:forEach标签、forTokens标签
- URL操作标签:import标签、url标签、redirect标签、param标签
在JSP页面引入核心标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
三、表达式控制标签
1.out标签
功能:用来输出数据对象(字符串、表达式)的内容或结果。
语法:
- <c:out value="要显示的数据对象" 【escapeXml=“true|false”】 【default=“默认值”】 />
- <c:out value="要显示的数据对象" 【escapeXml=“true|false”】>默认值</c:out>
标签属性:
范例
<%@ page language="java" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html><head> <title>JSTL: --表达式控制标签“out”标签的使用</title></head><body> <h3><c:out value="下面的代码演示了c:out的使用,以及在不同属性值状态下的结果。"/></h3> <hr/> <ul> <%--(1)直接输出了一个字符串。 --%> <li>(1)<c:out value="JSTL的out标签的使用" /></li> <li>(2)<c:out value="<a href='http://www.cnblogs.com/'>点击链接到博客园</a>" /></li> <%--escapeXml="false"表示value值中的html标签不进行转义,而是直接输出 --%> <li>(3)<c:out value="<a href='http://www.cnblogs.com/'>点击链接到博客园</a>" escapeXml="false"/></li> <%--(4)字符串中有转义字符,但在默认情况下没有转换。 --%> <li>(4)<c:out value="<未使用字符转义>" /></li> <%--(5)使用了转义字符<和>分别转换成<和>符号。 --%> <li>(5)<c:out value="<使用字符转义>" escapeXml="false"></c:out></li> <%--(6)设定了默认值,从EL表达式${null}得到空值,所以直接输出设定的默认值。 --%> <li>(6)<c:out value="${null}">使用了默认值</c:out></li> <%--(7)未设定默认值,输出结果为空。 --%> <li>(7)<c:out value="${null}"></c:out></li> <%--(8)设定了默认值,从EL表达式${null}得到空值,所以直接输出设定的默认值。 --%> <li>(8)<c:out value="${null}" default="默认值"/></li> <%--(9)未设定默认值,输出结果为空。 --%> <li>(9)<c:out value="${null}"/></li> </ul></body></html>
2.set标签
功能:用于把某个对象存在指定的域范围内,或者将某个对象存储到Map或者JavaBean对象中。
语法:
- <c:set value="值1" var="name1" 【scope=“page|reuqest|session|application”】 />
- <c:set var="name2" 【scope="page|request|session|application】> 值2</c:set>
- <c:set value="值3" target="JavaBean对象" property="属性名" />
- <c:set target="JavaBean对象" property="属性名">值</c:set>
标签属性
Person类
/** * 类名称:Person * 类描述:一个只有getter和setter方法的JavaBean或者说一个pojo(简单的Java对象(Plain Old Java Objects))类, * 作为一个vo(数据传输对象)。定义了四个变量age、name、sex和home。 */ public class Person { private String age; private String home; private String name; private String sex; public String getAge() { return age; } public String getHome() { return home; } public String getName() { return name; } public String getSex() { return sex; } public void setAge(String age) { this.age = age; } public void setHome(String home) { this.home = home; } public void setName(String name) { this.name = name; } public void setSex(String sex) { this.sex = sex; }}
范例
<%@ page language="java" pageEncoding="UTF-8" import="java.util.*"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%--使用JSP的指令元素指定要使用的JavaBean --%><jsp:useBean id="person" class="javaBean.Person"/><%--负责实例化Bean,id指定实例化后的对象名,可以通过${person}得到person在内存中的值(或者使用person.toString()方法)。 --%><!DOCTYPE HTML><html><head> <title>JSTL: --表达式控制标签“set”标签的使用</title></head><body> <h3>代码给出了给指定scope范围赋值的示例。</h3> <hr/> <ul> <%--将data1的值放入page范围中 --%> <li>把值放入page域中:<c:set var="data1" value="page" scope="page"></c:set></li> <%--使用EL表达式从pageScope取出data1的值 --%> <li>page域中取值:${pageScope.data1}</li> <%--将data2的值放入request范围中 --%> <li>把值放入request域中:<c:set var="data2" value="request" scope="request"></c:set></li> <%--使用EL表达式从requestScope取出data2的值 --%> <li>request域中取值:${requestScope.data2}</li> <%--将data3的值放入session范围中 --%> <li>把值放入request域中:<c:set value="session" var="data3" scope="session"></c:set></li> <%--使用EL表达式从sessionScope取出data3的值 --%> <li>ssession域中取值:${sessionScope.data3}</li> <%--将data4的值放入application范围中 --%> <li>把值放入applicationScope域中:<c:set value="application" var="data4" scope="application"></c:set></li> <%--使用EL表达式从application取出data4的值 --%> <li>ssession域中取值:${applicationScope.data4}</li> <%--不指定范围使用EL自动查找得到值 --%> <li>未指定scope的范围,会从不同的范围内查找得到相应的值:${data1}、${data2}、${data3}、${data4}</li> </ul> <hr/> <h3>使用Java脚本实现以上功能</h3> <ul> <li>把一个值放入page域中。<%pageContext.setAttribute("data1","page");%></li> <li>从page域中得到值:<%out.println(pageContext.getAttribute("data1"));%></li> <li>把一个值放入request域中。<%request.setAttribute("data2","request");%></li> <li>从request域中得到值:<%out.println(request.getAttribute("data2"));%></li> <li>把一个值放入session域中。<%session.setAttribute("data3","session");%></li> <li>从session中域得到值:<%out.println(session.getAttribute("data3"));%></li> <%--out.println()方法与<%=%>表达式输出功能一样 但使用表达式输出(<%=%>)明显要比使用out.println()输出更好。 --%> <li><%=session.getAttribute("data3") %></li> <li>把另一个值放入application域中。<%application.setAttribute("data4","application");%></li> <li> 从application域中得到值:<%out.println(application.getAttribute("data4"));%></li> <li><%=application.getAttribute("data4")%></li> <li>未指定scope的范围,会从不同的范围内查找得到相应的值: <%=pageContext.findAttribute("data1")%>、 <%=pageContext.findAttribute("data2")%>、 <%=pageContext.findAttribute("data3")%>、 <%=pageContext.findAttribute("data4")%> </li> </ul> <hr/> <h3>操作JavaBean,设置JavaBean的属性值</h3> <%--设置JavaBean的属性值,等同与setter方法,Target指向实例化后的对象,property指向要插入值的参数名。 注意:使用target时一定要指向实例化后的JavaBean对象,也就是要跟<jsp:useBean>配套使用, 也可以java脚本实例化,但这就失去了是用标签的本质意义。 使用Java脚本实例化: <%@page import="javabean.Person"% <% Person person=new Person(); %> --%> <c:set target="${person}" property="name">韩信</c:set> <c:set target="${person}" property="age">25</c:set> <c:set target="${person}" property="sex">男</c:set> <c:set target="${person}" property="home">中国</c:set> <ul> <li>使用的目标对象为:${person}</li> <li>从Bean中获得的name值为:<c:out value="${person.name}"></c:out></li> <li>从Bean中获得的age值为:<c:out value="${person.age}"></c:out></li> <li>从Bean中获得的sex值为:<c:out value="${person.sex}"></c:out></li> <li>从Bean中获得的home值为:<c:out value="${person.home}"></c:out></li> </ul> <hr/> <hr/> <h3>操作Map</h3> <% Map map = new HashMap(); request.setAttribute("map",map); %> <%--将data对象的值存储到map集合中 --%> <c:set property="data" value="韩信" target="${map}"/> ${map.data}</body></html>3.remove标签
功能:从指定JSP范围移除指定变量
语法:<c:remove var="变量名" 【scope=“page|request|session|application"】/>
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html><head><title>JSTL: --表达式控制标签“remove”标签的使用</title></head><body> <ul> <c:set var="name" scope="session">韩信</c:set> <c:set var="age" scope="session">25</c:set> <li><c:out value="${sessionScope.name}"></c:out></li> <li><c:out value="${sessionScope.age}"></c:out></li> <%--使用remove标签移除age变量 --%> <c:remove var="age" /> <li><c:out value="${sessionScope.name}"></c:out></li> <li><c:out value="${sessionScope.age}"></c:out></li> </ul></body></html>4.catch标签
功能:用于捕获嵌套在标签体中的内容抛出的异常
语法:<c:catch 【var="varName"】>容易产生异常的代码</c:catch>(var属性用于标识标签捕获的异常对象,它将保存在page域中)
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html><head> <title>JSTL: --表达式控制标签“catch”标签实例</title></head><body> <h4>catch标签实例</h4> <hr> <%--把容易产生异常的代码放在<c:catch></c:catch>中, 自定义一个变量errorInfo用于存储异常信息 --%> <c:catch var="errorInfo"> <%--实现了一段异常代码,向一个不存在的JavaBean中插入一个值--%> <c:set target="person" property="hao"></c:set> </c:catch> <%--用EL表达式得到errorInfo的值,并使用<c:out>标签输出 --%> 异常:<c:out value="${errorInfo}" /><br /> 异常 errorInfo.getMessage:<c:out value="${errorInfo.message}" /><br /> 异常 errorInfo.getCause:<c:out value="${errorInfo.cause}" /><br /> 异常 errorInfo.getStackTrace:<c:out value="${errorInfo.stackTrace}" /></body></html>
四、流程控制标签
1.if标签
功能:用来实现条件控制。
语法:
- <c:if test="testCondition" var="varName" 【scope=“{page|request|session|application}”】/>
- <c:if test="testCondition" 【var="varName"】 【scope="{page|request|session|application}"】></c:if>
标签属性
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html><head> <title>JSTL: --流程控制标签 if标签示例</title></head><body> <h4>if标签示例</h4> <hr> <form action="JSTL_if_tag.jsp" method="post"> <input type="text" name="uname" value="${param.uname}"> <input type="submit" value="登录"> </form> <%--使用if标签进行判断并把检验后的结果赋给adminchock,存储在默认的page范围中。 --%> <c:if test="${param.uname=='admin'}" var="adminchock"> <%--可以把adminchock的属性范围设置为session,这样就可以在其他的页面中得到adminchock的值, 使用<c:if text=”${adminchock}”><c:if>判断,实现不同的权限。 --%> <c:out value="管理员欢迎您!"/> </c:if> <%--使用EL表达式得到adminchock的值,如果输入的用户名为admin将显示true。 --%> ${adminchock}</body></html>
2.choose标签、when标签、otherwise标签
功能:类似于if-else if-else
语法:
<c:choose>
<c:when test="条件1">
//业务逻辑1
<c:when>
<c:when test="条件2">
//业务逻辑2
<c:when>
<c:when test="条件n">
//业务逻辑n
<c:when>
<c:otherwise>
//业务逻辑
</c:otherwise>
</c:choose>
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html> <head> <title>JSTL: -- choose及其嵌套标签标签示例</title> </head> <body> <h4>choose及其嵌套标签示例</h4> <hr/> <%--通过set标签设定score的值为85 --%> <c:set var="score" value="85"/> <c:choose> <%--使用<c:when>进行条件判断。 如果大于等于90,输出“您的成绩为优秀”; 如果大于等于70小于90,输出“您的成绩为良好”; 大于等于60小于70,输出“您的成绩为及格”; 其他(otherwise)输出“对不起,您没能通过考试”。 --%> <c:when test="${score>=90}"> 你的成绩为优秀! </c:when> <c:when test="${score>70 && score<90}"> 您的成绩为良好! </c:when> <c:when test="${score>60 && score<70}"> 您的成绩为及格 </c:when> <c:otherwise> 对不起,您没有通过考试! </c:otherwise> </c:choose> </body></html>
1.forEach标签
功能:循环条件遍历集合。
语法:
<c:forEach
var=”name”
items=”Collection”
varStatus=”StatusName”
begin=”begin”
end=”end”
step=”step”>
本体内容
</c:forEach>
var=”name”
items=”Collection”
varStatus=”StatusName”
begin=”begin”
end=”end”
step=”step”>
本体内容
</c:forEach>
标签属性
varStatus属性
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@page import="java.util.ArrayList"%><!DOCTYPE HTML><html> <head> <title>JSTL: -- forEach标签实例</title> </head> <body> <h4><c:out value="forEach实例"/></h4> <% List<String>list = new ArrayList<String>(); list.add(0, "贝贝"); list.add(1, "晶晶"); list.add(2, "欢欢"); list.add(3, "莹莹"); list.add(4, "妮妮"); request.setAttribute("list", list); %> <B><c:out value="不指定begin和end的迭代:" /></B><br> <%--不使用begin和end的迭代,从集合的第一个元素开始,遍历到最后一个元素。 --%> <c:forEach var="fuwa" items="${list}"> <c:out value="${fuwa}"/><br/> </c:forEach> <B><c:out value="指定begin和end的迭代:" /></B><br> <%--指定begin的值为1、end的值为3、step的值为2, 从第二个开始首先得到晶晶,每两个遍历一次, 则下一个显示的结果为莹莹,end为3则遍历结束。 --%> <c:forEach var="fuwa" items="${list}" begin="1" end="3" step="2"> <c:out value="${fuwa}"/><br/> </c:forEach> <B><c:out value="输出整个迭代的信息:" /></B><br> <%--指定varStatus的属性名为s,并取出存储的状态信息 --%> <c:forEach var="fuwa" items="${list}" begin="3" end="4" varStatus="s" step="1"> <c:out value="${fuwa}" />的四种属性:<br> 所在位置,即索引:<c:out value="${s.index}" /><br> 总共已迭代的次数:<c:out value="${s.count}" /><br> 是否为第一个位置:<c:out value="${s.first}" /><br> 是否为最后一个位置:<c:out value="${s.last}" /><br> </c:forEach> </body></html>
功能:该标签用于浏览字符串,并根据指定的字符将字符串截取。
语法:
<c:forTokens items=”strigOfTokens”
delims=”delimiters”
[var=”name”
begin=”begin”
end=”end”
step=”len”
varStatus=”statusName”] >
本体内容
</c:forTokens>
参数说明:
delims=”delimiters”
[var=”name”
begin=”begin”
end=”end”
step=”len”
varStatus=”statusName”] >
本体内容
</c:forTokens>
参数说明:
- items指定被迭代的字符串
- delims指定使用的分隔符
- var指定用来存放遍历到的成员
- begin指定遍历的开始位置
- end指定遍历结束的位置
- step指定遍历步长
- varStatus存放遍历到的成员的状态信息
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html> <head> <title>JSTL: -- forTokens标签实例</title> </head> <body> <h4><c:out value="forToken实例"/></h4> <hr/> <%--提示:分隔符的作用是根据标识,截取字符串。 如果未设定分隔符或在字符串中没有找到分隔付,将把整个元素作为一个元素截取。 在实际应用中用于在除去某些符号在页面中显示。 --%> <c:forTokens var="str" items="北、京、欢、迎、您" delims="、"> <c:out value="${str}"></c:out><br/> </c:forTokens> <br/> <c:forTokens items="123-4567-8854" delims="-" var="t"> <c:out value="${t}"></c:out><br/> </c:forTokens> <br/> <c:forTokens items="1*2*3*4*5*6*7" delims="*" begin="1" end="3" var="n" varStatus="s"> <c:out value="${n}" />的四种属性:<br> 所在位置,即索引:<c:out value="${s.index}" /><br> 总共已迭代的次数:<c:out value="${s.count}" /><br> 是否为第一个位置:<c:out value="${s.first}" /><br> 是否为最后一个位置:<c:out value="${s.last}" /><br> </c:forTokens> </body></html>
六、URL操作标签
1.import标签
功能:该标签可以把其他静态或动态文件包含到JSP文件,与<jsp:include>的区别: <jsp:include>只能包含喊一个web应用中的文件,而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
语法:
- <c:import url="url" 【context=“context”】【value=“value”】【scope=“page|request|session|application”】/>
- <c:import url="url" varReader="name" 【context="context"】 【charEncoding="encoding"】/>
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html> <head> <title>JSTL: -- import标签实例</title> </head> <body> <h4><c:out value="import实例"/></h4> <hr/> <h4><c:out value="绝对路径引用的实例" /></h4> <%--使用绝对路径导入百度首页, 导入时使用<c:catch></c:catch>捕获异常。 --%> <c:catch var="error1"> <c:import url="http://wwww.baidu.com" charEncoding="utf-8"/> </c:catch> ${error1} <hr/> <h4> <c:out value="相对路径引用本应用中的文件" /> </h4> <%--使用相对路径导入同一文件夹下的“JSTL的import标签使用说明”文件, 接收的字符编码格式使用charEncoding设置为utf-8。 --%> <c:catch var="error2"> <c:import url="JSTL的import标签使用说明" charEncoding="utf-8"/> </c:catch> ${error2} <hr/> <h4><c:out value="使用字符串输出相对路径引用的实例,并保存在session范围内" /></h4> <%--导入“JSTL的import标签使用说明.txt”, 使用var定义的变量接收要导入的文件,并存储在session中, 如果在其他页面同样也要导入该文件,只须使用<c:out>输出“JSTL的import标签使用说明.txt”的值即可。 --%> <c:catch var="error3"> <c:import var="myurl" url="JSTL的import标签使用说明" scope="session" charEncoding="utf-8"/> <c:out value="${myurl}"></c:out> <hr/> <c:out value="${myurl}" /> </c:catch> ${error3} </body></html>
2.url标签
功能:用于在JSP页面中构建一个url地址,其主要目的是实现url重写。
语法:
- <c:url value="value" 【var="name"】 【scope="page|request|session|application"】 【context="context"】
- <c:url value="value" 【var="name"】 【scope=“page|request|session|application”】 【context="context"】><c:param name="参数名" value=“值“></c:url>
标签属性
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html><head> <title>JSTL: -- url标签实例</title></head><body> <c:out value="url标签使用"></c:out> <h4>使用url标签生成一个动态的url,并把值存入session中.</h4> <hr/> <c:url value="http://www.baidu.com" var="url" scope="session"> </c:url> <a href="${url}">百度首页(不带参数)</a> <hr/> <h4> 配合 <c:param>标签给url加上指定参数及参数值,生成一个动态的url然后存储到paramUrl变量中 </h4> <c:url value="http://www.baidu.com" var="paramUrl"> <c:param name="userName" value="韩信"/> <c:param name="pwd">123456</c:param> </c:url> <a href="${paramUrl}">百度首页(带参数)</a></body></html>3.redirect标签
功能:该标签用来实现重定向。
语法:
- <c:redirect url="url" 【context="contet"】/>
- <c:redirect url="url" 【context="context"】><c:param name="name1" value="value1"></c:redirect>
标签属性
范例
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%--引入JSTL核心标签库 --%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!DOCTYPE HTML><html><head> <title>JSTL: -- redirect标签实例</title></head><body> <c:redirect url="http://www.baidu.com"> <%--在重定向时使用<c:param>标签为URL添加了两个参数:uname=GACL和password=123 --%> <c:param name="uname">GACL</c:param> <c:param name="password">123</c:param> </c:redirect></body></html>
阅读全文
0 0
- JavaWeb学习心得之JSTL标签库
- javaweb之jstl标签库
- JavaWeb之JSTL标签库
- JavaWeb学习心得之JSP标签库打包
- JavaWeb学习心得之JSP标签
- 十一.javaweb之JSTL标签
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
- JavaWeb学习总结---JSTL标签库之核心标签
- JavaWeb总结二十八、JSTL标签库之核心标签
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
- Javaweb学习之JSTL核心标签库的使用
- JavaWeb学习心得之JSP自定义标签
- JavaWeb学习心得之自定义传统标签
- JavaWeb---JSTL标签库(core标签库)
- javaWEB-动态网页之jstl标签
- mysql常用函数
- 371. Sum of Two Integers
- 硬创公开课“小课”《Founder's Speech》 购票指南
- 是谁用“一天一充”的概念,扼住了智能手机的体验咽喉?
- 最强外放 双扬声器vivo Y37搭Super Audio影院音效上市
- JavaWeb学习心得之JSTL标签库
- Android Studio获取SHA1
- 理解回调函数与jsonp的原理(个人理解)
- linux启动流程
- 起底O2O黑幕,巨额灰色收入如何瞒天过海
- 除了“灰机”Z1,ZUK还带来了什么?
- 大数据之路-Hadoop-2-centos6.5编译32位hadoop
- .dll调用
- 《小黄人大眼萌》首日破亿 vivo定制版手机引粉丝疯狂晒单