1.0 JSTL的下载

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上。

2.0 搭建开发环境

1. Dependencies provided by a JSP 2.1 container:

- Java 1.5 or later

- Servlet 2.5 or later

- JSP 2.1 or later

2. Additional dependencies

- The XML tag library requires Apache Xalan 2.7.1 or later

3. Add the following JARfiles to the '/WEB-INF/lib' directory of your application:

- taglibs-standard-spec-1.2.1.jar

- taglibs-standard-impl-1.2.1.jar

- taglibs-standard-jstlel-1.2.1.jar

- xalan-2.7.1.jar

- serializer-2.7.1.jar

3.0 引入对应的JSTL Tag Libraries

核心标签库的引入:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

4.0 核心标签库

4.1 <c:out>

属性说明:

value:必须,值会输出到页面。可以是表达式或字符串。

escapeXml:非必须,值可以是true/false,默认是true。默认情况下以下字符原样输出,也就是不当html解析,如果设置为false就会转为相应的html实体。

default:非必须,设置默认值,当value的值是null时,输出。

示例:

<c:out value="aa"></c:out>     <!-- 输出的是aa -->

<c:out value="${aa}">bb</c:out> <!-- ${aa}不存在,返回的是null,所以 输出的是bb,默认值也可以在标签中间-->

<c:out value="${aa}" default="bb"/> <!-- ${aa}不存在,返回的是null,所以 输出的是bb,-->

<c:out value="${aa}"/> <!-- ${aa}不存在,返回的是null,又没有默认值,就输出一个空字符串-->

<c:out value="<a href=\"#\">aa</a>" default="bb"/> <!-- <a href="#">aa</a> -->

<c:out value="<a href=\"#\">aa</a>" escapeXml="false" default="bb"/> <!-- aa -->

4.2 <c:set>

1)        给page/request/session/application内置对象的属性赋值

<a href="page.jsp?usernaem=liSi">set标签测试</a>

page.jsp

<c:out value="${param.usernaem}"/> <!-- 使用EL表达式接收url的传值时,必须要加 param。输出的是 liSi-->

<c:set var="usernaem" value="张三"  scope="request"/> <!— 给在request范围内的变量usernaem赋一个新值张三-->

<c:out value="${usernaem}"/> <!—  输出张三 -->

说明:如果var属性的值在request范围内存在,那么会在request对象中创建这个属性,并赋值。

<c:set var="aa" value="bb"  scope="request"/>

<%=request.getAttribute("aa") %>   <!— 输出 bb -->

<c:out value="${aa}"/>              <!— 输出 bb -->

2)        给page/request/session/application内置对象的属性赋值,与 1) 的区别把value属性的值放在标签中。

<c:set var="aa"  scope="request"/>bb</c:set>

<%=request.getAttribute("aa") %>   <!— 输出 bb -->

<c:out value="${aa}"/>              <!— 输出 bb -->

3)   给javaBean属性赋值

引入类:

<%@ page import="com.zheting.it.vo.*" %>

实例化对象:

<%  Person person = new Person();  %>

修改对象的值:

<c:set property="age" target="<%= person %>" value="22"/>

<c:out value="<%= person.getAge() %>"/>  <!— 输出 22 -->

4)   给javaBean属性赋值

引入类:

<%@ page import="com.zheting.it.vo.*" %>

实例化对象:

<%

Person person = new Person();

pageContext.setAttribute("kk", person);

%>

修改对象的值:

<c:set property="age" target="${kk}" value="22"/>

<c:out value="${kk.age}"/> <!— 输出 22 -->

5)   给javaBean属性赋值

<jsp:useBean id="tt" class="com.zheting.it.vo.Person" scope="page" />

<c:set property="age" target="${tt}" value="11"/>

<c:out value="${tt.age}"/> <!— 输出 11 -->

说明:value 属性的值可以写在标签体中。

4.3 <c:remove>

4.4 <c:catch>

4.5 <c:if>

var属性用来存储test属性比较的结果,即true/false。

<c:set var="salary" scope="session" value="${2000*2}"/>

<c:if test="${salary > 2000}" var="ff">

<c:out value="${ff}"/> <!— true-->

语法一只是为了得到比较结果时使用,标签体中没有要执行的内容。

多个条件判断时,用and连接,注意返回false时不输出false,输出的是一个空字符串。

<c:if test="${salary > 2000 and salary < 5000}" var="ff">

<c:out value="${ff}"/>

<%=pageContext.getAttribute("ff") %>

附:EL表达式中的操作符:

可以判断一个对象(如集合)或属性为null或空字符串””。

4.6 <c:choose>

4.7 <c:forEach>

<c:forEach>可以循环的对象:

<%
String[] arr = {"a","b","c","d","e","f"}; //数组
pageContext.setAttribute("arr", arr); List list = new ArrayList(); //List
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
pageContext.setAttribute("list", list); Map map = new HashMap();
map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");
map.put("d", "dd");
map.put("e", "ee");
map.put("f", "ff");
pageContext.setAttribute("map", map); %>
<c:forEach var="item" items="${arr}" >
<c:out value="${item}"/>
</c:forEach>
<br/>
<c:forEach var="item" items="${list}" >
<c:out value="${item}"/>
</c:forEach>
<br/>
<c:forEach var="item" items="${map}" >
<c:out value="${item.key}"/>
<c:out value="${item.value}"/>
<c:out value="${item}"/>
</c:forEach>
<br/>
<c:forEach var="i" begin="1" end="100" step="5">
<c:out value="${i}"/>
</c:forEach>

运行结果:

只输出偶数:

<c:forEach var="i" begin="1" end="100" varStatus="status">

           <c:if test="${status.count%2==0}">

                <c:out value="${i}"/>

           </c:if>

</c:forEach>

运行结果:

varStatus属性详细介绍:

varStatus属性是实现了接口:javax.servlet.jsp.jstl.core.LoopTagStatus

c:forEach varStatus属性

current当前这次迭代的(集合中的)项
index当前这次迭代从 0 开始的迭代索引
count当前这次迭代从 1 开始的迭代计数
first用来表明当前这轮迭代是否为第一次迭代的标志
last用来表明当前这轮迭代是否为最后一次迭代的标志

4.8 <c:forTokens>

这个标签的作用就是把字符串按照指定的分隔符拆分,并循环。

<c:forTokens items="0aa,1bb,2cc,3dd,4ee,5ff,6gg,7kk,8mm,9nn,10zz" delims="," var="item" begin="2" end="9" varStatus="status">

            <c:if test="${status.count%2==0}">

                  <c:out value="${item}"/>

            </c:if>

</c:forTokens>

运行结果:

items属性值得字符串,用delims属性值”,”分割,从索引2开始,到索引9(包括)结束,varStrtus的属性值中记录循环状态信息,其count属性是从1开始计数的,var属性值存储着当前循环得到的那个值。

5.0 格式化标签库

5.1 <fmt:setLocale> 设置local信息

<fmt:setLocale value="zh_CN" />

<fmt:setLocale value="zh-CN" />

<fmt:setLocale value="${header['accept-language']}" />

5.2 <fmt:setBundle>绑定资源文件

<fmt:setBundle basename="com.zheting.it.resources.MessageResources"/>

5.3 <fmt:message>读取资源文件

<fmt:message key="loginForm.uname"/>

JSTL1.2学习总结的更多相关文章

  1. 关于JAVA学习计划和感想

    学习计划第一阶段:    JAVA语言基础知识.包括异常.IO流.多线程.集合类.    要求:异常------掌握try-catch-finally的使用          IO流------掌握字 ...

  2. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门

    一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...

  3. SpringMVC学习总结(一)——SpringMVC入门

    摘要: Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求 ...

  4. 学习笔记_Java_day13_JSTL标签库(1、2、3、4、5、6、7、8)

    1.一种标签语言 day13 l  JSTL标签库(重点) l  自定义标签(理解) l  MVC设计模式(重点中的重点) l  Java三层框架(重点中的重点) JSTL标签库 1 什么是JSTL ...

  5. J2EE学习路线

    第一部分:  JAVA语言基础知识.包括异常.IO流.多线程.集合类.数据库.(切记基础知识一定要时时刻刻巩固,注意,如果你是想以最快速度学习J2EE,关于Java中的Swing知识点,就只做了解)  ...

  6. web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子

    写android有段时间了,感觉思维越写越狭窄,考虑问题越来越局限了,看不到一个项目整体的设计和构架,觉得很有必要多多写一些大型的框架性的东西来提高自己的视野. 从接触java到现在一年多了,在我的印 ...

  7. java web学习笔记 jstl

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53311722  冷血之心的博客) 一.JSTL标签介绍 1.什么是 ...

  8. 初学Java Web(6)——JSP学习总结

    为什么要学习 JSP Servlet 的短板: Servlet 的出现,是为了解决动态输出网页的问题. 虽然这样做目的能达到,但是存在一些缺陷: 在 Servlet 输出网页片段非常恶心 (可读性差, ...

  9. 一脸懵逼学习Struts数据校验以及数据回显,模型驱动,防止表单重复提交的应用。

    1:Struts2表单数据校验: (1)前台校验,也称之为客户端校验,主要是通过Javascript编程的方式进行数据的验证. (2)后台校验,也称之为服务器校验,这里指的是使用Struts2通过xm ...

随机推荐

  1. 常用工具说明--搭建基于rietveld的CodeReview平台(未测试)

    为什么要codereview . 整个团队的编码风格是统一的. . 有高手能对自己的代码指点一二,从而提高编码水平. . 减少低级错误的出现 . 约束自己写高质量的代码,因为是要给人看的. 我们对co ...

  2. jquery.edatagrid(可编辑datagrid)的使用

    用spring+springmvc+mybatis+mysql实现简单的可编辑单元格,首先是页面效果图: 其中,“编号”列是不可编辑的,“暂缓措施”是可以自由编辑的,主要html组成: <%@ ...

  3. Java Native Interface Specification Contents 翻译

    https://docs.oracle.com/en/java/javase/12/docs/specs/jni/index.html Google翻译 第1章:简介 本章介绍Java Native ...

  4. 在linux命令行利用SecureCRT上传下载文件

    一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地?与ssh有关的 ...

  5. Redis学习笔记1 -- 单机环境时分布式锁的使用

    使用第三方开源组件Jedis实现Redis客户端,且只考虑Redis服务端单机部署的场景. 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKee ...

  6. thinkphp下判断状态值语法

    在thinkphp框架下我们经常会用到状态值的判断:但是这样写会引起语法错误. <div> <if condition="{$res.status} eq '0'" ...

  7. FastJson 常见问题

    一.场景 在使用序列化的时候,Object里包含了两个一模一样的对象,所以解析的时候,只有第一个能解析出来,另外一个无法显示. 查看了json的序列化源码,发现是DisableCircularRefe ...

  8. SpringBoot如何添加拦截器

    在web开发的过程中,为了实现登录权限验证,我们往往需要添加一个拦截器在用户的的请求到达controller层的时候实现登录验证,那么SpringBoot如何添加拦截器呢? 步骤如下: 1.继承Web ...

  9. 【Python】猜数小游戏(文件操作)

    人生苦短,我用Python 关键词 1.多用户 2.字典记录所有成绩 3.每次游戏轮数&总游戏次数&平均每次游戏需要多少轮 字典Dictionary.列表List.元组Tuple差异化 ...

  10. 17.分支的合并&遇到冲突时的分支合并

    分支的合并 假设你已经修正了 #53 问题,并且打算将你的工作合并入 master 分支. 为此,你需要合并 iss53 分支到 master 分支,这和之前你合并 hotfix 分支所做的工作差不多 ...