java web jstl标签库

jsp页面是为了显示数据,如果嵌入java代码,就会使得可读性差,java代码也难以重用和维护。为了不在jsp页面里面写java脚本,我们使用了jsp内置的行为、指令,也使用el表达式来获取对象和值,但是这些并没有提供循环遍历的功能,所以我们就需要用到jstl标签库。

引入方式

要使用jstl标签库,我们需要用到tablib指令引入。

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/>等标签。

  1. <c:out/>标签
    <c:out value="" default="" escapeXml />
    作用:将指定内容输出到浏览器,默认支持el表达式,

value:输出的值,可以为EL表达式
default:如果value属性的值不存在,会输出default属性值
excapeXml:如果为true,则会为value中的特殊字符进行转义,默认为true

<c:out value="${user.name}" default="不存在这个值" /> <br/>
<c:out value="${empty user}" /> <br/>
<c:out value="字符串" /> <br/>
<c:out value="<b>不转义</b>" escapeXml="false"/> <br/>
image.png

第一行不存在user.name , 所以显示的是default里面的内容;
第四行选择不转义,所以<b></b>这些字符没有显示,并且内容加粗了

  1. <c:set/>标签
  • <c:set var="" value="" [scope="{ page|request|session|application }"]></c:set>
    这种var不能接受EL表达式,只能是字符
  • <c:set target="" property="" value="" />
    target:跟var类似,但是它只能够接受EL表达式,可以是一个对象,一个map等,和var进行互补
    property:对象中的属性名 
    value:属性赋值
<c:set var="hello" value="hello page" scope="page"></c:set>
<c:set var="hello" value="hello request" scope="request"></c:set>
<c:out value="${hello}"></c:out><br/>
<c:out value="${requestScope.hello}"></c:out><br/>

<jsp:useBean id="user" class="bean.user" scope="page"/>
<c:set target="${user}" property="name" value="hello world"></c:set>
<c:out value="${user.name}"></c:out><br/>

image.png
  1. <c:remove />标签
    <c:remove var="" scope=""/>
    移除page域中的hello,显示时依次找page、request、session、application中的hello,所以最后显示的是request中的hello
<c:remove var="hello" scope="page"/>
<c:out value="${hello}"></c:out><br/>`
image.png
  1. <c:if test=""/>标签
<c:if test="${not empty user.name }">
<c:out value="username: ${user.name}"></c:out><br/>
</c:if>
image.png
  1. <c:choose />标签
    <c:choose />相当于switch的作用
    <c:when />相当于case的作用
    <c:otherwise />相当于default的作用
<c:set target="${user }" property="age" value="15"/>
<c:choose>
    <c:when test="${user.age<10 }">小于10岁</c:when>
    <c:when test="${user.age<20 }">大于等于10岁小于20岁</c:when>
    <c:otherwise>大于等于20岁</c:otherwise>
</c:choose>
image.png
  1. <c:forTokens > 标签
    将自定义字符串,按照指定字符进行分割,并遍历输出
    items:自定义字符串
    delims:指定字符
    var:遍历的变量名。
<c:forTokens items="lin-jia-qian" delims="-" var="s">
        ${s }<br/>
</c:forTokens>
image.png
  1. <c:catch > 标签

相当于try catch

<c:catch var="e">
    <c:set target="cuowudefuzhi" property="hi" value="dfdvc"/>
</c:catch>
<c:if test="${not empty e }">
${e }<br/>
</c:if>
image.png
  1. <c:forEach/>标签
    <c:forEach items="" var="" />
    items:需要遍历的对象
    var:用于存放遍历的每一项内容,存放在page作用域,只能在循环体中使用

普通for循环:

<c:forEach var="num" begin="0" end="10" step="2">
    ${num }
</c:forEach>
image.png

forEach list集合:

<%
List<String> list=new ArrayList<String>();
list.add("item1");
list.add("item2");
list.add("item3");

pageContext.setAttribute("list", list);

%>

<c:forEach items="${list }" var="str" >
    ${str}<br/>
</c:forEach>

image.png

forEach map映射:

<%
  Map<String,String> map=new HashMap<String,String>();
  map.put("1","hello");
  map.put("2","world");
  pageContext.setAttribute("map", map);
%>
<c:forEach items="${map }" var="item">
    ${item.key }=${item.value }<br/>
</c:forEach>
image.png
  1. <c:url />标签
    <c:url value="" var="" scope="" />
    value:要进行重写的url
    var:如果写了该变量,那么就会将其重写后的url存入作用域中,默认是page,以scope属性值为准
    scope:作用域范围,默认是page
<c:url value="/index.jsp" var="beanNameUrl" scope="page">
    <c:param name="userName" value="lin"></c:param>
</c:url>
<a href="${ beanNameUrl}">点击跳转</a>
image.png

这个可以用于浏览器把cookie功能关闭时传递sessionid。

  1. <c:redirect />标签
<c:redirect url="/index.jsp">
</c:redirect>
  1. <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"%>
是一些辅助性功能标签,就讲解一个把,用的不多

fn方法库

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
提供一些方法,函数,例如字符串查找,截取之类。
必须在el表达式中使用
格式:fn:methodName()的格式,比如:fn:contains()

1、fn:contains(string, substring)
如果参数string中包含参数substring,返回true。

2、fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true

3、fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true。

4、fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回。

5、fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置。

6、fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

7、fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。

8、fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果。

9、fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true。

10、fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置。

11、fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串。

12、fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串。

13、fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回。

14、fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回。

15、fn:trim(string)
去除参数string 首尾的空格,并将其返回。

其他库

除此之外,还有sql库和xml库,不过一般不会在里面用

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,296评论 18 399
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,310评论 0 13
  • JSP是在HTML文档中嵌入java代码的技术,本质上是一个servlet类,因为在服务器端会被编译为一个serv...
    shawXXQ阅读 356评论 0 0
  • 很多刚开始做淘客的新手们经常会遇到找产品的问题,为什么我辛辛苦苦找的产品就推不出去呢?为什么我找的高佣产品,到最后...
    kimi小晨哥阅读 491评论 0 0
  • 最近放假又赶上考试,都快忘了日记这茬了~ 又不开心了,╯^╰ 我总感觉历史老师烦我,高二的时候有一次上课,我...
    唯左阅读 65评论 0 0