前言: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包,我使用的是

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

如果我们在声明一下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);
%>
<c:out value="${i}"></c:out>

如果运行我们就可以看到我们要的结果,有人说如果要是要标签体怎么办,其实也很简单,把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);
%>
<c:set target="${userBean}" property="age" value="18">
</c:set>
<c:set target="${userBean}" property="userName" >张三</c:set>
<c:out value="${userBean.age}"></c:out>
<c:out value="${userBean.userName}"></c:out>

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。代码如下

<c:catch var="exception">
<%
String userName="zhangsan";
%>
</c:catch>
<c:out value="${exception}"></c:out>

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 test="${1<2}" var="testName" scope="application"></c:if>
<c:out value="${testName}"></c:out>

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

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

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

<c:choose>
<c:when test='${user}=="zhangsan"'>
<c:out value="张三"></c:out>
</c:when>
<c:when test='${user}=="lisi"'>
李四
</c:when>
<c:otherwise>
无匹配
</c:otherwise>
</c:choose>

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);
<c:forEach var="userBean" items="<%=al%>" varStatus="status">
<tr>
<td><c:out value="${userBean.age}"></c:out></td>
<td>${userBean.userName}</td>
<td>${status.count}</td>
<td>${status.index}</td>
<td>${status.first}</td>
<td>${status.last}</td>
</tr>
</c:forEach>

我们看下结果

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

3.2:<c:forTokens>

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

String str="张三,李四,王五,";
<c:forTokens items="<%=str%>" delims="," var="name">
<td><c:out value="${name}"></c:out></td>
</c:forTokens>

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改成

<c:url value="http://www.cnblogs.com/cate/java/" var="myurl" scope="session">
<c:param name="userName" value="zhangsan"></c:param>
<c:param name="password" value="123456"></c:param>
</c: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>

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

javaweb回顾第十篇JSTL的更多相关文章

  1. javaweb回顾第十二篇监听器

    前言:在web应用中,有时候你想在web应用程序启动或关闭的时候执行一些任务,或者你想见他Session的创建和关闭等你就可以通过监听器来实现.那么Servlet来8个监视器接口,下面一一讲解一下. ...

  2. javaweb回顾第八篇如何创建自定义标签

    前言:在javaweb开发中自定义标签的用处还是挺多的.今天和大家一起看自定义标签是如何实现的. 1:什么是标签 标签是一种XML元素,通过标签可以使JSP页面变得简介易用,而且标签具有很好的复用性. ...

  3. javaweb回顾第七篇jsp

    1:为什么会有JSP jsp全名(java server pages)中文叫做java服务器页面.在Servlet那一篇我们发现用Servlet可以生成动态页面,但是我们却在Servlet中却写了大量 ...

  4. javaweb回顾第六篇谈一谈Servlet线程安全问题

    前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安全问题. 1:多线程的Servlet模型 要想弄清Servlet线程安全我们必须先要明白Servlet实例 ...

  5. javaweb回顾第四篇Servlet异常处理

    前言:很多网站为了给用户很好的用户体验性,都会提供比较友好的异常界面,现在我们在来回顾一下Servlet中如何进行异常处理的. 1:声明式异常处理 什么是声明式:就是在web.xml中声明对各种异常的 ...

  6. javaweb回顾第三篇数据库访问

    前言:本篇主要针对数据库的操作,在这里不适用hibernate或者mybatis,用最原始的JDBC进行讲解,通过了解这些原理以后更容易理解和学习hibernate或mybatis. 1:jdbc的简 ...

  7. javaweb回顾第十一篇过滤器(附实现中文乱码问题)

    1:过滤器概念 过滤器就是一种在请求目标资源的中间组件,比喻把污水转换成纯净水中间需要一个污水净化设备,那么这个设备就好比一个过滤器.那么我用图来表示过滤器(可以有多个过滤器)运行的过程 2:Filt ...

  8. javaweb回顾第五篇浅谈会话

    1:什么是会话 通俗来说就是客户和服务器的一次私密谈话,客户发送请求以后服务器能够识别请求是来自同一个客户,他们是1对1的关系. 了解会话以后我们就要去考虑如何去实现这些问题下面一一进行解析 2:会话 ...

  9. javaWeb核心技术第十篇之Filter

    Web中有三大组件(需要配置web.xml) servlet:服务器端的小程序. Filter(过滤器):运行在服务器,对请求的资源进行过滤,对响应进行包装. 经典案例: 自动登录,网站全局编码,非法 ...

随机推荐

  1. Python排列组合问题

    1.字符串的全排列 问题描述:打印出原字符串中所有字符的所有排列.——将输入字符串中的每个字符作为一个不同的字符看待,即使它们是重复的,如'aaa'应打印6次. Python可以用生成器解决: def ...

  2. windows环境下安装win8.1+Mac OS X 10.10双系统教程

    首先要感谢远景论坛里的各位大神们的帖子  没有他们的分享我也不能顺利的装上Mac OS X 10.10! 写这篇随笔主要是为了防止自己遗忘,同时给大家分享下我的经验. 本教程适用于BIOS+MBR分区 ...

  3. BZOJ2683 简单题(CDQ分治)

    传送门 之前听别人说CDQ分治不难学,今天才知道果真如此.之前一直为自己想不到CDQ的方法二很不爽,今天终于是想出来了一道了,太弱-- cdq分治主要就是把整段区间分成两半,然后用左区间的值去更新右区 ...

  4. Java SE、Java EE、Java ME

    Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...

  5. oracle高阶知识点

    ------------------------------------------------- varchar2(4000)字符型,最大长度不能超过4000,与char的区别是不用空格补足 num ...

  6. HDU 2068 RPG的错排

    要求答对一半或以上就算过关,请问有多少组答案能使他顺利过关. 逆向思维,求答错一半或以下的组数 1,错排 错排公式的由来 pala提出的问题: 十本不同的书放在书架上.现重新摆放,使每本书都不在原来放 ...

  7. 工作随笔——Swift中的Range和一些字符操作

    截取字符串在Swift中相比OC要复杂很多,主要原因可能还是OC的NSRange的创建方法中参数类型为int,而Swift却对类型要求很严格,int不能作为参数创建Range,这要使用String中的 ...

  8. Java学习笔记(六)

    期末课程选题:QQ登录界面.好友列表界面及聊天框界面. 功能实现:简单的功能可实现,如:点击登录进入好友列表界面:点击好友可进入聊天框:可实现简单聊天功能:聊天可输入及输出,可选择私聊或群聊,可获得当 ...

  9. Getting Started with WebRTC [note]

    Getting Started with WebRTC 原文 RTCPeerConnection 1.caller和callee互相发现彼此 2.并且交换capabilities信息 3.初始化ses ...

  10. 使用的组件:JQuery UI

    jQuery UI包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的模式,所以,只要您学会使 ...