JSP标准标签库

JSTL(JSP标准标签库)是一个开放源代码的标签组件

链接:http://pan.baidu.com/s/1jIvearG 密码:vatq

将下载的JSTL的jar包放在项目的WEB-INF\lib文件夹中
解压该jar包将其中的META-INF文件夹中的几个主要标签配置文件(c.tld、fmt.tld、fn.tld、sql.tld、x.tld)保存在WEB-INF文件夹中
配置完成后需要重新启动Tomcat服务器

核心标签库

核心标签库是JSTL中最重要的部分,也是开发中最常用到的部分,在核心标签库中主要完成的就是流程控制、迭代输出等操作。

功能分类标签名称描述
基本标签<c:out>输出属性内容
<c:set>设置属性内容
<c:remove>删除指定属性
<c:catch>异常处理
流程控制标签<c:if>条件判断
<c:choose>多条件判断,可以设置<c:wen>和<c:otherwise>标签
迭代标签<c:forEach>输出数组、集合
<c:forTokens>字符串拆分及输出操作
包含标签<c:import>将一个指定的路径包含到当前页进行显示
生成URL标签<c:url>根据路径和参数生成一个新的URL
客户端跳转<c:redirect>客户端跳转

<c:out>

<c:out>标签主要用于输出内容,语法如下:
没有标签体:

<c:out value="打印的内容" [escapeXml="[true|false]"][default="默认值"]/>

有标签体:

<c:out value="打印的内容" [escapeXml="[true|false]"]>
    默认值
</c:out>

<c:out>标签的属性
value:设置要显示的内容
default:如果要显示的value内容为null,则显示default定义的内容
escapeXml:是否转换字符串,例如将“<”转换成为“>”,默认为true

<c:set>标签

<c;set>标签主要用来将属性保存在4种属性范围中,与setAttribute()方法的作用类似
<c:set>设置–没有标签体

<c:set var="属性名称" value="属性内容" [scope="[page | request | session | application]"]/>

<c:set>设置–有标签体

<c:set var="属性名称" [scope="[page | request | session | application]"]/>

<c:set>设置内容到对象–没有标签体

<c:set value="属性内容" target="储存的对象名称"  property="对象的属性名称" />

<c:set>设置内容到对象–有标签体

<c:st target="储存的对象名称" property="对象的属性名称">
    属性内容
</c:set>

<c:remove>标签

<c:remove>标签在程序中的主要作用是删除指定范围中的属性,功能与removeAttribute()方法类似

语法如下:

<c:remove var="属性名称" [scope="[page | request | session | application]"]/>

<c:catch>标签

<c:catch>标签主要用来处理程序中产生的异常,并进行相关的异常处理
语法如下:

<c:catch [var="保存异常信息的属性名称"]>
    有可能发生异常的语句
</c:catch>

<c:if>标签

<c:if>标签主要用来完成分支语句的实现
没有标签体:

<c:if test="判断条件" var="储存判断结果" [scope="[page | request | session | applictation]"] />

有标签体:

<c:if test="判断条件" var="储存判断结果" [scope="[page | request | session | application]"]>
满足条件时执行的语句
</c:if>

<c:choose>、<c:when>、<c:otherwise>标签

<c:if>标签只可以进行一个条件的判断,如果现在要同时判断多个条件,可以使用标签,但是标签只能作为<c:when>和<c:otherwise>的父标签出现
<c:choose>的语法如下:

<c:choose>
    标签体内容(<c:when>、<c:otherwise>)
</c:choose>

<c:when>相当于if 和 if else
<c:otherwise>相当于else (只能出现一次或0次)
<c:otherwise>要写在<c:when>后面 ,只有当所有<c:when>都不满足之后,<c:otherwise>才会被得到执行。

<c:forEach>标签

<c:forEach>标签的主要功能为循环控制,可以将集合中的成员进行迭代输出,功能与Iterator接口类似。
语法如下:

<c:forEach [var="每一个对象的属性名称"] items="集合" [varStatus="保存相关成员信息"] [begin="集合的开始输出位置"] [end="集合的结束输出位置"] [step="每次增长的步长"]>
    标签体
</c:forEch>

var:用来存放集合中的每一个对象
items:保存所有的集合,主要是数组、Collection(List、set)及Map
varStatus:用于存放当前对象的成员信息
begin:集合的开始位置,默认从0开始
end:集合的结束位置,默认为集合的最后一个元素
step:每次迭代的间隔数,默认为1
例如:

<body>
    <%
        List all=new ArrayList();
        all.add("www");
        all.add("huihui");
        all.add("com");
        pageContext.setAttribute("ref",all);
    %>
    <h3>输出全部、
    <c:forEach items="${ref}" var="mem">
        ${mem}、
    </c:forEach></h3>

只要是Collection接口的子接口或类都可以输出

在用<c:forEach>进行输出Map集合时,所有保存在集合Map中的对象都是通过Map.Entry的形式保存的,所以想要分理出key和value,则需要通过Map.Entry提供的getKey()和getValue()方法
例如

<%
    Map map=new HashMap();
    map.put("www","www.huihui.com");
    map.put("name","huihui");
    pageContext.setAttribute("ref",map); 
%>
<c:forEach items="${ref}" var="mem">
    <h3>${mem.key}-->${mem.value} </h3>
<c:forEach>

<forTokens>标签

<forTokens>标签也是用于输出操作的,类似于String类中的split()方法和循环输出的一种集合。语法如下:

<c:forTokens items="输出的字符串" delims="字符串分割符" [var="存放每一个字符串变量"]
[varStatus="存放当前对象的相关信息"] [begin="输出位置"] [end="结束位置"] [step="输出间隔"]>
    标签体内容
</c:forTokens>

var:用来存放集合中的每一个对象
items:要输出的字符串
delims:定义分隔字符串的内容
varStatus:存放当前对象的相关信息
begin:开始的输出位置,默认从0开始
end:结束的输出位置,默认为最后一个成员
step:迭代输出的间隔

一般用到var、items、delims
例如

<%
    Stirng info="www.baidu.com";
    pageContext.setAttribute("ref",info);
%>
<h3>拆分的结果是:
<c:forTokens items="${ref}" delims="." var="con">
    ${con}、
</c:forTokens></h3>

<c:import>标签

<c:import>标签可以将其他页面的内容包含进来一起显示,这与<jsp:include>标签的功能类似,但是与<jsp:include>标签不同的是,<c:import>可以包含外部的页面。<c:import>标签的语法如下:

<c:import url="包含的地址的URL" [context="上下文路径"] [var="保存内容的属性名称"]
    [scope="[page | request | session |application ]"] [charEncoding="字符编码"]
    [varReader="以Reader方式读取内容"]>
    标签体内容
    [<c:param name="参数名称" value="参数内容"/>]
</c:import>

context:如果要访问在同一个Web容器下的其他资源时设置,必须以”/”开头
var:储存导入的文件内容
varReader:储存导入的文件内容,以Reader类型存入
url:设置时不能设置为null,否则会出现JasperException异常

当 : <c:import url=”http://www.baidu.com” charEncoding=”UTF-8”/>时,导入时只是将站点的HTML代码导入进来,而相关的图片显示和css文件会出现问题

如果要想导入的页面传递参数,则可以使用<c:import>标签中的<c:param>子标签进行传递。

例如

param.jsp
<h3>name参数:&{param.name}</h3>
<h3>URL参数:&{param.url}</h3>
传递参数页面:import_param.jsp
    <c:import url="param.jsp" charEncoding="urf-8">
        <c:param name="name" value="huihui" />
        <c:param  name="url" vlaue="www.baidu.com" />
    </c:import>

<c:url标签>

<c:标签可以直接产生一个URL地址
无标签体:

<c:url value="操作的url" [context="上下文路径"] [var="保存的属性名称"]
    [scope="[page|request|session|application]"]/>

有标签体:

<c:url value="操作的url" [context="上下文路径"] [var="保存的属性名称"]
    [scope="[page| request|session|application]"]>
    <c:param name="参数名称" value="参数内容"/>
</c:url>

url:要执行的url
context:如果要访问在同一个Web容器下的其他资源时设置,必须以“/”开头
var:储存导入的文件内容
scope:定义var的保存范围,默认为page范围

例如:

<c:url value="http://www.baidu.com" var="urlinfo">
    <c:param name="author" value="huihui"/>
    <c:param name="logo" value="qaq"/>
</c:url>
<a href="${urlinfo}">新的地址</a>

生成的新地址是:http://www.baidu.com/?author=huihui&logo=qaq

<c:redirect>标签

<c:redirect>标签类似于response.sendRedirect()操作进行的客户端跳转。
语法如下:

    没有标签体:
<c:redirect url="跳转的地址"  context="上下文路径"/>
    有标签体:
<c:redirect url="跳转的地址" context="上下文路径">
    <c:param name="参数名称" value="参数内容"/>
</c:redirect>

国际标签库

国际化是程序的重要组成部分,一个程序可以根据所在区域进行相应信息的显示,例如,各个地区的数字、日期显示风格都是不同的,在JSTL中使用fmt.tld作为格式化标签库的定义文件

功能分类标签名称描述
国际化标签<fmt:setLocale>设置一个全局的地区代码
<fmt:requestEncoding>设置统一的请求编码
信息显示标签<fmt:bundle>设置临时的要读取资源文件的名称
<fmt:message>通过key取得value,通过<fmt:param>向动态文中设置内容
<frm:setBundle>设置一个全局的要读取资源文件的名称
数字及日期格式化<fmt:formatNumber>格式化数字
<fmt:parseNumber>反格式化数字
<fmt:formatDate>格式化日期,将日期变为字符串
<fmt:parseDate>反格式化日期,将字符串变为日期
<fmt:setTimeZone>设置一个全局的时区
<fmt:timeZone>设置一个临时的时区

<fmt:setLocale>标签

<fmt:setLocale>标签主要功能是设定用户所在的区域
语法如下:

<fmt:setLocale value="区域编码" [variant="浏览器"] [scope="[page| request| session | application]"]/>

value:设置地区的编码,表示一个java.util.Locale类
variant:如果要访问在同一个Web容器下的其他资源时设置,必须以“/”开头

<%
    pageContext.setAttribute("date",new Date());
%>
<h3>中文日期显示:
<fmt:setLocale value="zh_CN"/>  
    <fmt:formatDate value="${date}"/> </h3>
<h3>英文日期显示:
<fmt:setLocal value="en_US"/>
    <fmt:formatDate value="${date}"/></h3>

<fmt:requsetEncoding>标签

设置所有的请求编码,与setCharacterEncoding()方法的功能一样
语法如下:

<fmt:requestEncoding [value="字符集"]/>

读取资源文件

在国际化中最重要的组成部分就是资源文件的读取,在JSTL中提供了4个标签用于资源的读取和操作,分别是<fmt:message>、<fmt:param>、<fmt:bundle>和<fmt:setBundle>
所有的资源文件都是以*.properties作为后缀,所有的内容要按照“key=value”的格式进行编写,在Web中,资源文件要保存在/WEB-INF/classes文件夹中。
例如

定义资源文件-----/WEB-INF/classes/Message.properties
naem=LiXingHua
#info=欢迎{0}光临!
info=\u6b22\u8fce{0}\u5149\u4e34\uff01

资源文件定义完成之后,即可利用<fmt:bundle>标签在一个JSP页面中指定资源文件的名称
语法如下:

<fmt:bundle basename="资源文件名称" [prefix="前置标记"]>
    标签体内容
</fmt:bundle>

此时不需要加上文件的后缀.*properties
当通过<fmt:bundle>标签指定好资源文件名称后,即可使用<fmt:message>标签按照key读取value
语法如下:

没有标签体:
<fmt:messge key="资源文件的指定key" [bundle="资源文件名称"]
    [var="存储value内容的属性名称"][scope="[page|request|session|application]"]/>
有标签体:
<fmt:message key="资源文件的指定 key" [bundle="资源文件名称"]
    [var="存储value内容的属性名称"][scope="[page|request|session|application]"]>
    <fmt:param value="设置占位符内容"/>   //要设置的参数内容
</fmt:message>

例如:

Message.properties

name=huihui
#info=欢迎{0}光临!
info=\u6b22\u8fce{0}\u5149\u4e34\uff01

读取资源文件:message.jsp
<fmt:bundle basename="Message">
    <fmt:message key="name" var="nameref"/>
</fmt:bundle>
<h3>姓名:${nameref}</h3>
<fmt:bundle basename="Message">
    <fmt:message key="info" var="inforef">
        <fmt:param value="shandong"/>
    </fmt:message>
</fmt:bundle>
<h3>信息:${inforef}</h3>

当资源文件不存在或者key为Null时,读取的信息将为”??????”

在进行资源读取时也可以通过<fmt:setBundle>标签设置一个默认的读取资源名称
这样每次在使用<fmt:setBundle>标签进行信息读取时,直接通过bundle设置要读取资源的属性即可
语法如下:

<fmt:setBundle basename="资源文件名称" [var="保存资源文件内容的属性名称"]
    [scope="[page|request|session|application]"]/>

SQL标签

功能分类标签名称描述
数据源标签<sql:setDataSource>设置要使用的数据源名称
数据库操作标签<sql:query>执行查询操作
<sql:update>执行更新操作
事务处理标签<sql:transaction>执行事务的处理操作,并设置操作的安全级别

MVC设计模式中要求数据库操作都要放在JavaBean(DAO)中完成,而JSTL是直接在JSP上操作的 ,开发中并不推荐。
因此暂且跳过此内容,以后需要再看。

XML标签库

功能分类标签名称描述
核心操作<x:out>输出XPath指定的内容
<x:parse>进行XML解析
<x:set>将内容保存在属性范围中
流程控制<x:if>判断XPath指定的内容是否满足条件
<x:choose>多条件判断,相当于swith语句
<x:when>判断条件,相当于case语句
<x:otherwise>条件出口,相当于default
<x:forEach>循环输出节点

XPath简介

XPath的主要功能是在XML文档中能够准确的找到某一个节点元素,可以通过XPath找到一个XML文档中定义的节点内容或属性等

路径标记描述
根元素/
父节点../
任何路径下的节点//
属性@属性名称
通配符*

例如:

    <?xml version="1.0" encoding="utf-8"?>
    <addresslist>
        <linkman>
            <name id="www">huihui</name>
            <email>huihui@qq.com</email>
        </linkman>
    </addresslist>

超找实例

路径标记描述
找到name元素/addresslist/linkman/name
直接找到name元素//name
找到Id属性//name/@id

<x:parse>标签

<x:parse>标签的主要作用是进行XML解析的操作
语法如下:
无标签体


<x:parse [doc="XML文件内容"] [var="保存名称"][scope="[page|requset|session|application]"] [varDom="DOM解析后的XML对象"][scopeDom="varDom范围"][systemId="XML文件的URL"]/>

有标签体

<x:parse [var="保存名称"] [scope="[page|request|session|application]"] [varDom="Dom解析后的XML对象"][scopeDom="varDom范围"][systemId="Xml文件的URL"]>
    要解析的XML文件
</x:parse>

无标签体和有标签体的区别是无标签体中要解析的文件在doc中,有标签体则在标签体中
var:保存解析后的XML文件的对象
scope:var变量保存范围,默认page
varDom:使用DOM解析后的XML文件对象
scopeDom:varDom属性的保存范围
systemId:文件的URI

剩下的xml标签省略掉了 过后再议。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值