在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为、行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它能够获取各种对象,各种值,并且还不会抛出NullPointerException之类的错误,但是EL表达式功能还是有限,例如不能遍历集合等,因此为了完善JSP,让其完全不使用java代码,就有了jstl标签库,使用jstl和EL的配合使用,基本上可以实现所有的功能,显示数据,遍历数据等。

    

一、为什么使用标签?

    JSP是用来显示数据的,前面我们在JSP中的HTML中嵌入java代码,与<%%>等混在一起,可读性和可维护性都很差,而且使用java脚本不便于代码重用,要实现比较复杂的显示功能,也不方便,而JSP标签和HTML代码很类似,使用JSP标签显得JSP整洁而干净,可读性好,标签能够重复使用,所以就像我们上面说的,我们慢慢意识到不足,就自然在一步步改进,从使用JSP行为,使用EL,在使用标签,都是为了一个目的,让JSP更加完全,方便,只显示数据,而不嵌入逻辑代码。这个涉及到了分层思想,后面说讲解到。

  

二、JSTL标签库

    JSTL标签库中包括很多种类的标签core、fmt、fn方法库、sql标签库,使用JSTL标签库,需要用taglib指令导入JSTL标签库      

    core标签库

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

      讲解<c:out/>、<c:set/>、<c:remove/>、<c:if  test=""/>、<c:choose  />、<c:forTokens />、<c:catch /> 、<c:url  />、 <c:redirect />、<c:forEach/>、

    <c:out/>标签

      out :将指定内容输出到浏览器,默认支持el表达式,

      <c:out value="" default="" escapeXml />

          value:输出的值,可以为EL表达式

          default:如果value属性的值不存在,会输出default属性值

          excapeXml:如果为true,则会为value中的特殊字符进行转义,默认为true

            

            

      <c:set/>和<c:remove/>标签

            

          图中只介绍set标签的一种用法,其中var不能接受EL表达式,只能是字符,

          <c:set target="" property="" value="" />

            target:跟var类似,但是它能够接受EL表达式,可以是一个对象,一个map等,和var进行互补

            property:对象中的属性名 

            value:属性赋值

            

          使用哪种set标签,就看自己的需求了。

      <c:if  test=""/>标签

            if条件语句

            

      <c:choose  />标签

            

      <c:forTokens > 标签

            将自定义字符串,按照指定字符进行分割,并遍历输出

            items:自定义字符串

            delims:指定字符

            var:遍历的变量名。

            

      <c:catch > 标签

            相当于try catch

            

            

            var:捕捉后的异常对象

       <c:forEach/>标签

          增强的for循环,

          格式:

            <c:forEach items="" var="" /> 

            items:需要遍历的对象

            var:用于存放遍历的每一项内容,存放在page作用域,只能在循环体中使用

          1、items为字符串或字符串数组

              为字符串,直接输出,为字符串数组,遍历输出

              

             

          2、items为list集合

              

          3、items为map集合

              

          4、普通for循环

              

              begin:从1开始

              end:到10结束

              step:每次加2

              var:循环的变量,

      <c:url  />标签

          记得讲session的时候,如果cookie禁用了,那么只能将url进行重写才能让session继续生效,而使用的api是response.encodeURL();就是将SESSIONID当作参数带过来,而url标签的作用就是实现类似功能

          <c:url value="" var="" scope="" />  就讲解三个属性

            value:要进行重写的url

            var:如果写了该变量,那么就会将其重写后的url存入page作用域中,如果scope没有的话,默认就是page,否则以scope属性值为准,在作用域范围内就可以直接拿着这个变量使用了,如下面所展示的。

            scope:作用域范围,默认是page,

              

            访问后点击超链接

              没有关闭cookie,所以不会将SESSIONID写入url中 。

              

      <c:redirect />标签

          

    

      <c:import />标签

          类似于JSP的include行为和include指令,JSTL也提供了include功能的标签<c:import/>,不过import标签功能更强大,甚至可以把Internet上的网页包含进来。

          <c:import url="http://www.baidu.com" charEncoding="utf-8"/>

          

          

      

    fmt标签库

        是一些辅助性功能标签,就讲解一个把,用的不多,等用到的时候在去详细学

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

        标签只有一个属性,value  

        <fmt:requestEncoding/>设置编码,

          相当于Java中的request.setCharacterEncoding("");

          post提交中文参数,使用<fmt:requestEncoding value="utf-8"/>来设置编码,就不会出现中文乱码了。

          get提交中文参数,该标签就会失效,除非到TOMCAT的server.xml中,将URLEncoding设置为UTF-8(默认为ISO-8859-1)。

        <fmt:setLocale/>显示所有地区的数据格式

        等等

    fn方法库

        提供一些方法,函数,例如字符串查找,截取之类。之所以不叫fn标签库而叫fn方法库,因为与core,fmt标签格式不一样,并且必须在el表达式中使用

        格式:fn:methodName()的格式,比如,fn:contains()

        contains方法判断是否包含指定的字符串,相当于java里String类的contains方法。

           fn:contains(String string1,String string2);

        containsIgnoreCase方法,判断是否包含指定字符串,忽略大小写

           fn:contains(String string1,String string2)

        endsWith方法,判断某字符串是否以指定的参数结尾,

           fn:endWith(String string1,String string2);

        startsWith方法,判断某字符串是否以指定参数开始

           fn:startsWith(String string1,String string2);

        escapeXml方法,是否转义字符

           fn:escapeXml(source);

        indexOf方法,查找字符串在另一个字符串中第一次出现的位置

           fn:indexOf(String string1,String string2);

        split方法,将字符串以指定参数为界分割成多个字符串形成字符串数组

           。。

        join方法,与split方法相反,将字符串数组以参数为界连接成字符串

        length方法,取字符串,数组,集合的长度

        等等

    SQL标签库

        JSP中直接可以操作数据库,但是大多数时候我们都不会这样用。。

    XML标签库

        为了方便地处理XML,

          

三、总结

    重点讲解了一下JSTL中的core标签库,其实也就是一些控制流程的标签,没什么思想,只要会用就行了,以后忘记了就回过头来查查看,最重要的是思想,这些死东西记录一下就行了。

Java Web(七) JSTL标签库的更多相关文章

  1. web开发(七) JSTL标签库

    在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6432786.html>,在此仅供学习参考之用. 一.为什 ...

  2. JavaWeb总结(七)—JSTL标签库

    一.JSTL标签库介绍 JSTL标签库的使用时为了弥补HTML标签的不足,规范自定义标签的使用而诞生的.使用JSTL标签的目的是不希望在JSP中出现Java逻辑代码. 二.JSTL标签库的分类 1.核 ...

  3. java基础开发—jstl标签库

    在DRP项目中.接触到了JSTL标签库. 在未使用Jstl之前,我们使用JSP脚本实现一些声明或是表达式任务,做一些业务相关操作时,须要在页面中嵌入大量的java代码.在DRP项目开发前期.使用jsp ...

  4. Java Web之JSTL标准标签库总结

    [文档整理系列] Java Web之JSTL标准标签库总结

  5. Java Web程序设计笔记 • 【第10章 JSTL标签库】

    全部章节   >>>> 本章目录 10.1 JSTL 概述 10.1.1 JSTL 简介 10.1.1 JSTL 使用 10.1.2 实践练习 10.2 核心标签库 10.2. ...

  6. Java第三阶段学习(十四、JSP动态页面、EL表达式、JSTL标签库)

    一.JSP技术 1.jsp脚本和注释 jap脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部,比如写在doget.dopost 内的代码 2) ...

  7. Java实战之04JavaWeb-04JSP、EL表达式、JSTL标签库

    一.jsp部分 只要是与页面显示相关的都是重点 1.jsp的脚本 <%java代码%>:被翻译到service方法内部,局部变量,局部的功能 <%=表达式或变量%>:翻译成se ...

  8. Vue.js——循环(Java、JSTL标签库、数据库)

    一.Vue.js循环 Vue.js循环要使用 v-for 指令. v-for 指令需要以 student in StudentList 形式的特殊语法使用, StudentList 是源数据数组并且s ...

  9. JSTL 标签库<转>

    http://elf8848.iteye.com/blog/245559 JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的.把常用的内容,放在这里备份一份,随用随查.尽量做到不用查,就可 ...

随机推荐

  1. IOS开发中如何使用通知NSNotification传值

    通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便.便捷,一个简单的Demo实现通知的跳转传值. 输入所要发送的信息 ,同时将label的值通过button方法调用传递, - (IB ...

  2. IOS开发-OC学习-protocol(协议)

    在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法. 例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法:学 ...

  3. VirtualBox 安装增强工具

    菜单的: Device>insert  guest addtion. 定位: cd /media/cdrom 安装: sudo sh ./VBoxLinuxAdditions-x86.run 然 ...

  4. bzoj3052

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题目大意:自己看看,懒得写 题解:带修改的树上莫队,经典爆评测机的题 代码: #inc ...

  5. 微软2017MVP大礼包拆箱攻略

    容我本周偷个懒,晒个大礼包就糊弄过去了.13号晚上拿到的大礼包,激动的没敢拆,一直等到娃睡着了,才偷偷打开了快递,忍了两天没忍住,上来晒图得瑟一下,请各位轻拍,谢谢! 1.大礼包的盒子(联邦快递的盒子 ...

  6. javascript中的元素包含判断

    在实际开发中,很多时候需要知道某个节点是不是另一个节点的后代.很多浏览器提供了contains方法,如: console.log(document.documentElement.contains(d ...

  7. 兼容ie6及以上的阴影滤镜的写法

    .subnav{ width: 220px; _width:160px; min-height: 168px; border: 1px solid #d0d8da; background: #fff; ...

  8. glyph

    glyph[英][glɪf][美][ɡlɪf]n.象形文字; 纵的沟纹; 竖沟; 浮雕;

  9. MySQL数据类型--日期时间

    一.博客前言 自接触学习MySQL已有一段时间了,对于MySQL的基础知识还是略懂略懂的.在这一路学习过来,每次不管看书还是网上看的资料,对于MySQL数据类型中的时间日期类型总是一扫而过,不曾停下来 ...

  10. 从svn上回滚版本

    转载地址:http://blog.csdn.net/happyqyt/article/details/7107039 提交SVN后想回滚到旧版本. 选择TortoiseSVN→Repo-browser ...