JSTL标签的用法详解
在JSP中写Java代码是一件很恶心的事情,代码量少的话还可以,要是多的话,就蛋疼了,整个页面都是<% %>所以EL表达式和JSTL就应运而生了,这里我们注重讲解一下JSTL标签的使用:
首先来开一下JSTL的语法:
JSTL语法及参数
JSTL包含以下的标签:
常用的标签:如<c:out>、<c:remove>、<c:catch>、<c:set>等
条件标签:如<c:if><c:when>、<c:choose>、<c:otherwise>等
URL标签:如<c:import>、<c:redirect>和<c:url>等
XML标签:如<xml:out>等
国际化输出标签:如<fmt:timeZone>等
SQL标签:如<sql:query>、<sql:update>、<sql:transaction>等
一般用途的标签:
1.<c:out>
没有Body时的语法
<c:out value=”value” [escapeXml=”{true|false}”] [default=”defaultValue”]/>
有Body时的语法
<c:out value=”value” [escapeXml=”{true|false}”]>
这里是Body部分
</c:out>
名字 类型 描述
value Object 将要输出的表达式
escapeXml boolean 确定以下字符:<,>,&,’,”在字符串中是否被除数,默认为true
default Object 如果vaule计算后的结果是null,那么输出这个默认值
2.<c:set>
这个标签用于在某个范围(page、request、session、application等)中使用某个名字设定特定的值,或者设定某个已经存在的javabean对象的属性。他类似于<%request.setAttrbute(“name”,”value”);%>
语法1:使用value属性设定一个特定范围中的属性。
<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”]/>
语法2:使用value属性设定一个特定范围中的属性,并带有一个Body。
<c:set var=”varName” [scope=”{page|request|session|application}”]>
Body部分
</c:set>
语法3:设置某个特定对象的一个属性。
<c:set value=”value” target=”target” property=”propertyName”/>
语法4:设置某个特定对象的一个属性,并带有一个Body。
<c:set target=”target” property=”propertyName”>
Body部分
</c:set>
名字 类型 描述
value Object 将要计算的表到式。
var String 用于表示value 值的属性,如果要在其他标签中使用,就是通过这 个var指定的值来进行的。它相当于在标签定义了一个变量,并且这个变量只能在标签中的一个。
scope String var的有效范围,可以是page|request|session|application中的一个
target String 将要设置属性的对象,它必须是javabean或则java.util.Map对象
property Object 待设定的Target对象中的属性名字,比如在javabean中有个name属性,提供了setUserId方法,那么这里填userId。
3.<c:remove>
<c:remove var=”varName” [scope=”{page|request|session|application}”]/>
4.<c:catch>
这个标签相当于捕获在它里边的标签抛出的异常对象
<c:catch [var=”varName”]> //var是异常的名字
内容
</c:catch>
条件标签
1. <c:if>
语法1:无Body情况
<c:if test=”testCondition” var=”varName” [scope=”page|request|session|application”]/>
语法2:有Body的情况
<c:if test=”testCondition” var=”varName” [scope=”page|request|session|application”]>
Body内容
</c:if>
名字 类型 描述
test Boolean 表达式的条件,相当于if()中的条件判断语句。
var String 表示这个语句的名字。
scope String var这个变量的作用范围。
2.<c:choose>
语法:<c:choose>
Body内容(<c:when>和<c:otherwise>子标签)
</c:choose>
注意:它的Body只能由以下元素组成:
1) 空格
2) 0或多个<c:when>子标签,<c:when>必须在<c:otherwise>标签之前出现.
3) 0个或多个<c:otherwise>子标签。
3.<c:when>
代表的是<c:choose>的一个条件分支,只能在<c:choose>中使用
语法:<c:when test=”testCondition”> //test是boolean类型,用于判断条件真假
Body语句
</c:when>
4.<c:otherwise>
代表的是<c:choose>中的最后选择。必须在最后出现
<c:otherwise>
内容
</c:otherwise>
迭代标签
1.<c:forEach>
语法1:在Collection中迭代
<c:forEach[var=”varName”] items=”collection” [varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]
Body内容
</c:foeEach>
语法2:迭代固定的次数.
<c:forEach [var=”varName”] [varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]
Body内容
</c:foeEach>
名字 类型 描述
var String 迭代的参数,它是标签参数,在其他标签中通过它来引用这个标签中的内容。
Items Collection、ArrayList、 要迭代的items集合.
Iterator、Map、String、
Eunmeration等
VarStatus String 表示迭代的状态,可以访问迭代自身的信息
Begin int 表示开始迭代的位置。
End int 表示结束迭代的位置。
Step int 表示迭代移动的步长,默认为1。
URL相关的标签
1.<c:import>
语法1:资源的内容使用String对象向外暴露
<c:import url=”url” [context=”context”]
[var=”varName”] [scope=”{page|request|session|application}”] [charEncoding=”charEncoding”]>
内容
</c:import>
语法2:资源的内容使用Reader对象向外暴露。
<c:import url=”url” [context=”context”]
varReader=”varReaderName” [charEncoding=”charEncoding”]>
内容
</c:import>
名字 类型 描述
url String 待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源
context String 当使用相对路径访问外部context资源时,context指定了这个资源的名字。
var String 参数的名字。
scope String var参数的作用范围。
cahrEncoding String 输入资源的字符编码。
varReader String 这个参数的类型是Reader,用于读取资源。
2.<c:redirct>
语法1:没有Body的情况.
<c:redirect url=”value” [context=”context”]/>
语法2:有Body情况下,在Body中指定查询的参数
<c:redirect url=”value” [context=”context”]>
<c:param name=”name” value=”value”/>
</c:redirect>
3.<c:url>
语法1:没有Body
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”{page|request|session+application}”]/>
语法2:有Body
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”{page|request|session+application}”]>
<c:param name=”name” value=”value”/>
</c:url>
名字 类型 描述
value String URL值
context String 当使用相对路径访问外部context资源时,context指定了这个资源的名字
var String 标识这个URL标量。
Scope String 变量作用范围。
下面来看一下JSTL的具体用法:
首先定义一个Servlet中进行封装数据,然后转发到index.jsp页面中:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*************一个实体bean****************/
UserBean userBean = new UserBean();
userBean.setId("1001");
userBean.setName("jiangwei");
userBean.setAge(22);
userBean.setSex("男");
userBean.setBirth("1990-08-01");
request.setAttribute("userBean", userBean);
//request.getRequestDispatcher("/index.jsp").forward(request,response);
/************多个实体bean****************/
ArrayList<UserBean> userBeanList = new ArrayList<UserBean>();
for(int i=0;i<5;i++){
userBean.setId("1001");
userBean.setName("jiangwei");
userBean.setAge(22);
userBean.setBirth("1990-08-01");
userBeanList.add(userBean);
}
request.setAttribute("userBeanList", userBeanList);
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
(红色部分是放到request域中的属性名称,在index.jsp页面中需要用这个属性来操作数据的)
index.jsp页面中使用JSTL:
(1)首先要使用JSTL标签的话,需要引导额外的jar包:jstl.jar和standard.jar
(2)然后在index.jsp页面中引入标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(3)下面就可以使用JSTL标签库了:
<body>
<!-- c:out标签的使用:输出 -->
用户id:<c:out value="${userBean.id}" default="0"></c:out>
用户姓名:<c:out value="${userBean.name}"></c:out>
用户年龄:<c:out value="${userBean.age}"></c:out>
用户性别<c:out value="${userBean.sex}"></c:out>
用户的出生日期:<c:out value="${userBean.birth}"></c:out>
<br><br>
<!-- c:forEach标签的使用:迭代 -->
<c:forEach var="userBean" items="${userBeanList}">
用户id:<c:out value="${userBean.id}"></c:out>
用户姓名:<c:out value="${userBean.name}"></c:out>
用户年龄:<c:out value="${userBean.age}"></c:out>
用户性别<c:out value="${userBean.sex}"></c:out>
用户的出生日期:<c:out value="${userBean.birth}"></c:out>
<br><br>
</c:forEach>
<!-- c:set标签的使用:设置变量 -->
<c:set value="10元" var="r" scope="page"/>
价格:<c:out value="${r}"/>
<br><br>
<!-- c:remove标签的使用:移除属性 -->
<c:remove var="r" scope="page"/>
价格:<c:out value="${r}"/>
<!-- c:choose标签的使用:多分枝判断 -->
<c:set var="luck" value="${userBean.id}"></c:set>
<c:choose>
<c:when test="${luck==8}">恭喜你中了一等奖!</c:when>
<c:when test="${luck==6}">恭喜你中了二等奖!</c:when>
<c:when test="${luck==9}">恭喜你中了三等奖!</c:when>
<c:otherwise>谢谢参与,欢迎下次再来!</c:otherwise>
</c:choose>
<br><br>
<!-- c:if标签的使用:if判断 -->
判断:<c:if test="${userBean.id==0}">是真的</c:if>
<br><br>
<!-- c:forTokens标签的使用:字符串的分割 -->
<c:forTokens items="A,B,C,D,E,F,G" delims="," var="item">
${item}
</c:forTokens>
<br><br>
<!-- c:import标签的使用:包含include.jsp页面 -->
<c:import url="/include.jsp"></c:import>
<br><br>
<!-- c:redirect标签的使用:重定向打开include.jsp页面 -->
<c:redirect url="/include.jsp"></c:redirect>
<br><br>
<!-- c:url标签的使用:将url地址转换成字符串 -->
<c:url var="urlVar" value="/include.jsp"></c:url>
url地址:<c:out value="${urlVar}"/>
<br><br>
</body>
JSTL标签的用法详解的更多相关文章
- jstl标签: c:Foreach详解
为循环控制,它可以将集合(Collection)中的成员循序浏览一遍.运作方式为当条件符合时,就会持续重复执行的本体内容. 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍.运作方 ...
- 转: HTML的电子邮件链接标签mailto用法详解
mailto是网页设计制作中的一个非常实用的html标签,许多拥有个人网页的朋友都喜欢在网站的醒目位置处写上自己的电子邮件地址,这样网页浏览者一旦用鼠标单击一下由mailto组成的超级连接后,就能自动 ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- HTML video 视频标签全属性详解
HTML 5 video 视频标签全属性详解 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...
- Class.forName()用法详解
Class.forName()用法详解 标签: classjvmjdbc数据库documentationjava 2012-03-29 09:39 40414人阅读 评论(8) 收藏 举报 分类: ...
- linux mount命令参数及用法详解
linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...
- 1:CSS中一些@规则的用法小结 2: @media用法详解
第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule ...
- Ext.Net学习笔记23:Ext.Net TabPanel用法详解
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...
随机推荐
- Ceph的正确玩法之Ceph纠删码理论与实践
http://blog.itpub.net/31545808/viewspace-2637083/ 注意空格,有的命令少空格 随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈.在云计算这 ...
- 关于Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 ...
- 【Tomcat】2.配置Tomcat服务器端口和HTTPS
1.修改XML配置文件 找到Tomcat安装目录下的conf文件夹,打开server.xml文件(可以用笔记本打开) 其中有几行代码如下 <Server port="8005" ...
- USB仪器控制教程
概观 本教程是为出发点使用NI-VISA与USB设备进行通信.它不打算作为一个起点,学习USB构架或USB通讯中使用的各种协议.阅读本教程后,您应该能够安装一个USB设备,并使用NI-VISA与该设备 ...
- PHP面试 linux基础
Linux基础 Linux常用命令 系统安全:sudo su chmod setfacl 进程管理:w top ps kill pkill pstree killall 用户管理 ...
- yum安装LAMP
安装LAMP环境二进制包安装,先更新yum源,PHP 7.0.33 扩展可选 yum -y install mysql mysql-server mysql-devel httpd httpd-dev ...
- 写第一个 swift,iOS 8.0程序
class ViewController: UIViewController { @IBAction func btn_click(sender : AnyObject) { println(&quo ...
- MQ入门介绍
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传递指的是程序 ...
- BUUCTF RE部分题目wp
RE 1,easyre拖进ida,得到flag 2,helloworld 将文件拖入apk改之理,得到flag 3,xor拖进ida,就是简单异或,写脚本 glo=[0x66,0x0a,0x6b,0x ...
- 结对编程(四则运算题目生成器core第七组)对接心得
在这篇博客博主想记录一下此次结队编程作业中与ui组对接的心得.在这里我也想表达一下对涂涵越同学的敬佩,他遇到困难时孜孜不倦求解的毅力着实让我佩服,我们在dll的生成上遇到了很大的困难,要不是他的坚持我 ...