博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb回顾第十篇JSTL
阅读量:5734 次
发布时间:2019-06-18

本文共 4651 字,大约阅读时间需要 15 分钟。

  前言:JSTL(JSP Standard Tag Library)JSP标准标签库。它的目的是为了简化JSP的开发,如何没有JSTL可能我们开发的时候就需要写大量的自定义标签,无疑会加大开发难度,有了JSTL以后我们就不需要写那些普通的标签(除非特殊的)这样一来我们的开发效率也会提升,在这里我主要讲解一下http://java.sun.com/jsp/jstl/core标签库。

1:普通的标签

JSTL普通标签有<c:out>、<c:set>、<c:remove>、<c:catch>

1.1:<c:out>

首先为了使用JSTL标签库的内容我们先在maven项目中引入jar包,我使用的是

javax.servlet
jstl
1.2

如果我们在声明一下jsp的指令元素<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>,如果就可以进行我们的开发。out无疑是输出的意思,所以<c:out>主要作用就是输出我们的变量值,和脚本元素<%=%>有相同的功能。

<c:out>有三个属性值,value,escapeXml,default。value就是我们要输出的值,escapeXml是已转换功能比喻<和&lt的转换默认是true,default是默认值。下面我们来写一个<c:out>。

<%      int i=1+1;      request.setAttribute("i", i);    %>

如果运行我们就可以看到我们要的结果,有人说如果要是要标签体怎么办,其实也很简单,把value值置null即可,这个我们看下源码

public int doStartTag() throws JspException {      needBody = false;            // reset state related to 'default'      this.bodyContent = null;  // clean-up body (just in case container is pooling tag handlers)            try {    // print value if available; otherwise, try 'default'    if (value != null) {            out(pageContext, escapeXml, value);        return SKIP_BODY;    } else {        // if we don't have a 'default' attribute, just go to the body        if (def == null) {        needBody = true;        return EVAL_BODY_BUFFERED;        }

在部分源码中我们可以看见只要Default和value值为null就可以展示标签体内部的值了比喻<c:out value='<%=null%>'>no</c:out>。

1.2:<c:set>

这个主要目的是设置范围变量的值或者JavaBean的属性。在这里我就不再展示源码,大家有兴趣可以自己查阅。以讲解为主

<c:set>有5个属性,分别是value、var、scope、target、 property,value是被计算的表达式,var计算结果的名称,scope是JSP的范围默认为page,target要设置属性的JavaBean对象,最后一个是设置对象的属性。下面用例子让大家更加清晰

现在我要设置一个num=1+1的值并且保存在Session中,那么用<c:set>就是<c:set var="num" value="${1+1}" scope="session"></c:set>然后我们就可以引用这个值了

<c:out value="${num}"></c:out>。那么如果是JavaBean对象呢我们就要用上target属性了。如下

<%        UserBean userBean = new UserBean();        pageContext.setAttribute("userBean", userBean);    %>    
张三

1.3:<c:remove/>

这个主要移除范围变量,有2个属性,var和scope。var要移除变量的名称,scope是jsp的范围,默认值是page。

比喻我要移除上面的userBean就是<c:remove var="userBean"  scope="session"/>意思就是移除Session中一个叫做userBean的属性。

1.4:<c:catch>

 这个表示捕获异常,其中有一个var属性,表示把这个异常赋值给var。代码如下

<% String userName="zhangsan"; %>

2:条件标签

条件标签包括<c:if>、<c:choose>、<c:when>、<c:otherwise>

2.1:<c:if>

这个意思很明显就是实现java中if语句功能的。其中有三个属性:test、var、scope。test表示测试的条件比喻(1>0),var表示测试结果导出来的名称,scope表示范围。默认为page。例子如下

所以我们开发的时候可以通过<c:if>来作为一个判断语句,其他地方直接拿来用。

2.2:<c:choose>、<c:when>、<c:otherwise>

这个相当于Switch,case,Default。在我自定义标签那篇提及过。其中<c:when>有一个属性就是test是判断的结果。举个简单例子如下

李四
无匹配

3:迭代标签

迭代标签有2个一个是<c:forEach>,另一个是<c:forTokens>

3.1:<c:forEach>

这个主要针对包含多个对象集合进行迭代显示。它有6个属性,var、items、varStatus、begin、end、step。var表示迭代的对象,items表示要被迭代的集合对象,varStatus表示当前迭代对象的状态,begin被迭代对象集合从哪个开始(默认是从第一个开始迭代),end表示被迭代对象集合从哪个结束(默认全部迭代完),step迭代的步长默认是1。

同样举个例子

ArrayList al = new ArrayList();        UserBean user1 = new UserBean("zhangsan", 25, "7808@outlook.com");        UserBean user2 = new UserBean("lisi", 15, "16455@qq.com");        UserBean user3 = new UserBean("wangwu", 35, "7808@outlook.com");        al.add(user1);        al.add(user2);        al.add(user3);
${userBean.userName} ${status.count} ${status.index} ${status.first} ${status.last}

我们看下结果

其中从结果我们可以看出varStatus的作用主要是判断当前迭代对象的一个状态,比statu.last表示判断是否是最后一个对象。

3.2:<c:forTokens>

这个标签主要针对字符串,比喻String userNames="li;zhang;zhao"这个时候这个标签就可以迭代把他们输出来。这个属性和上面标签一样,但是多了一个delims表示分割符。

String str="张三,李四,王五,";

4:URL相关的标签

Url标签包含<c:import>、<c:url>、<c:redirect>、<c:param>

4.1:<c:param>

是作为一个URL请求添加的参数,主要和<c:url>,<c:redirect>等配合使用

4.2:<c:url>

可以用<c:url>来定义一个URL链接在另一个url出引用。有4个属性value、var、context、scope。value是要处理的url,var是要 导入url范围变量的名称,context是指定上下文的名字scope是JSP范围默认page。同样举个例子

比喻我先定义一个url<c:url value="http://www.cnblogs.com/cate/java/" var="myurl" scope="session"></url>,然后我就可以直接引用了<a href='<c:out value="${myurl}"></c:out>'>博客园</a>,如果我要加请求参数怎么办呢,就要把上面的url改成

我们运行看下结果是否把请求参数加上了

4.3:<c:redirect>

这个表示重定向,有2个属性,一个是url表示定向到哪个地址,另一个则是content表示上下文的路径。这个很简单,写法如下

<c:redirect url="${myurl}"></c:redirect>当然也可以加上请求的参数

<c:redirect url="${myurl}">

<c:param name="userName" value="zhangsan"></c:param>
</c:redirect>

4.4:<c:import>

这个表示要导入的资源,可以是一张照片,也可以是一个网站,(不仅可以导入本应用程序的资源也可以导入其他网站的资源)

 

转载于:https://www.cnblogs.com/LipeiNet/p/5768337.html

你可能感兴趣的文章
C++ 虚析构函数
查看>>
设计思路
查看>>
用 Flask 来写个轻博客 (33) — 使用 Flask-RESTful 来构建 RESTful API 之二
查看>>
使用navicat连接linux服务器数据库方法
查看>>
Mysql修改语句的运行流程
查看>>
VS中实时获取SVN的版本号并写入到AssemblyInfo.cs中(C#)
查看>>
钉钉开发系列(十二)机器人
查看>>
ubuntu 使用印象筆記 evernote nixnote2
查看>>
golang单点推送
查看>>
在行列均递增的矩阵中找一个数(要求比较次数不超过行数+列数)
查看>>
struts
查看>>
LINQ 标准的查询操作符 分组 group by into 、select new 、orderby descending、from in
查看>>
React.js
查看>>
浏览器缓存
查看>>
Python学习笔记_二维数组的查找判断
查看>>
紫书题目-树叶的下落
查看>>
RESTful接口设计原则和优点
查看>>
python解决汉诺塔问题
查看>>
命令行 批量修改文件的文件名(包括文件名包含空格)
查看>>
【NOIP】提高组2013 转圈游戏
查看>>