Jstl之核心标签库与格式标签库使用JSTL(JSPStandardTagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat4.x。在JSP2.0中也是作为标准支持的。JSTL1.0发布于2002年6月,由四个定制标记库(core、format、xml和sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。core标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作URL的标记。顾名思义,format标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行JSP页面的国际化。xml库包含一些标记,这些标记用来操作通过XML表示的数据,而sql库定义了用来查询关系数据库的操作。一、JSTL库安装如果要使用JSTL,则必须将jstl.jar和standard.jar文件放到classpath中,如果你还需要使用XMLprocessing及Databaseaccess(SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。ApacheTomcat安装JSTL库步骤如下:下载standard.jar和jstl.jar,这里可以下download.csdn.net/detail/evankaka/8871459,我已打包好的standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下。使用任何库,你必须在每个JSP文件中的头部包含taglib标签。standard.jar的作用JSP标准标签库,和jstl.jar一起使用,在1.0的版本中,但在jstl-1.2.jar就不在需要了。如果你想在项目中使用JSTL和EL表达式,那么你必须要引入这个standard.jar文件。即使你没有引入,那MyEclipse工具自带的类库也会帮你倒入。其他工具不会。jstl.jar下载地址:下载地址:如果是在Maven中可以这么写:[html]viewplaincopy!--standard.jar--dependencygroupIdtaglibs/groupIdartifactIdstandard/artifactIdversion1.1.2/version/dependency!--JSTL--dependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.1.2/version/dependency二、核心标签核心标签是最常用的JSTL标签。引用核心标签库的语法如下:[html]viewplaincopyprename=codeclass=html%@taglibprefix=curi=标签描述c:out用于在JSP中显示数据,就像%=...c:set用于保存数据c:remove用于删除数据c:catch用来处理产生错误的异常状况,并且将错误信息储存起来c:if与我们在一般程序中用的if一样c:choose本身只当做c:when和c:otherwise的父标签c:whenc:choose的子标签,用来判断条件是否成立c:otherwisec:choose的子标签,接在c:when标签后,当c:when标签判断为false时被执行c:import检索一个绝对或相对URL,然后将其内容暴露给页面c:forEach基础迭代标签,接受多种集合类型c:forTokens根据指定的分隔符来分隔内容并迭代输出c:param用来给包含或重定向的页面传递参数c:redirect重定向至一个新的URL.c:url使用可选的查询参数来创造一个URLc:if使用c:if标签必须要有test属性,当test中的表达式结果为true时,则会执行本体内容;如果为false,则不会执行。例如:${requestScope.username=='admin'},如果requestScope.username等admin时,结果为true;若它的内容不等于admin时,则为false。接下来看下列的范例:c:iftest=${requestScope.username=='admin'}ADMIN您好!!//body部分/c:if如果名称等于admin,则会显示ADMIN您好!!的动作,如果相反,则不会执行c:if的body部分,所以不会显示ADMIN您好!!//body部分。另外c:if的本体内容除了能放纯文字,还可以放任何JSP程序代码(Scriptlet)、JSP标签或者HTML码。除了test属性之外,c:if还有另外两个属性var和scope。当我们执行c:if的时候,可以将这次判断后的结果存放到属性var里;scope则是设定var的属性范围。哪些情况才会用到var和scope这两个属性呢?例如:当表达式过长时,我们会希望拆开处理,或是之后还须使用此结果时,也可以用它先将结果暂时保留,以便日后使用。例子:[html]viewplaincopy%@pagelanguage=javaimport=java.util.*pageEncoding=UTF-8%%@taglibprefix=curi=!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.01Transitional//ENhtmlheadmetahttp-equiv=Content-typecontent=text/html;charset=UTF-9/headbody%Stringamind=Admin;request.setAttribute(amind,amind);%c:iftest=${requestScope.amind=='Admin'}var=conditionscope=request您好Admin先生/c:if/body/html运行结果:c:choose使用c:choose用于条件选择,他和c:whenc:otherwise一起使用,他们只能组合在一起使用c:when代表了c:choose的一个条件分支,他必须以c:choose作为他的父标签他必须在c:otherwise之前出现,只要遵寻这两个规则,使用起来很简单,下面给出代码:[html]viewplaincopyc:choosec:whentest=expressionbodycontent/c:whenc:whentest=expressionbodycontent/c:when...c:otherwisebodycontent/c:otherwise/c:choose如:[html]viewplaincopy%@pagelanguage=javaimport=java.util.*pageEncoding=UTF-8%%@taglibprefix=curi=:useBeanid=userclass=com.mucfc.User/jsp:setPropertyproperty=namename=uservalue=arthur/jsp:setPropertyproperty=agename=uservalue=12/!DOCTYPEHTMLPUBLIC-//W3C//DTDHTML4.01Transitional//ENhtmlheadmetahttp-equiv=Content-typecontent=text/html;charset=UTF-8/headbodyc:choosec:whentest=${user.name=='arthur'}欢迎朋友:${user.name}/c:whenc:otherwise登录失败/c:otherwise/c:choosebody/html运行结果:c:forEachc:foreach类似于for和foreach循环c:forEach标签用于通用数据循环,它有以下属性属性描述是否必须缺省值items进行循环的项目否无begin开始条件否0end结束条件否集合中的最后一个项目step步长否1var代表当前项目的变量名否无varStatus显示循环状态的变量否无c:forEach标签的语法定义如下所示。[html]viewplaincopyc:forEachvar=nameitems=expressionvarStatus=namebegin=expressionend=expressionstep=expressionbodycontent/c:forEachc:forEach标签的items属性支持Java平台所提供的所有标准集合类型。此外,您可以使用该操作来迭代数组(包括基本类型数组)中的元素。它所支持的集合类型以及迭代的元素如下所示:Java.util.Collection:调用iterator()来获得的元素。ava.util.Map:通过java.util.Map.Entry所获得的实例。java.util.Iterator:迭代器元素。java.util.Enumeration:枚举元素。Object实例数组:数组元素。基本类型值数组:经过包装的数组元素。用逗号定界的String:分割后的子字符串。javax.servlet.jsp.jstl.sql.Result:SQL查询所获得的行。如可以写:[html]viewplaincopy%ListStringlist=newArrayListString();list.add(nqwe);list.add(ftyu);list.add(vfg);request.setAttribute(list,list);%c:forEachvar=stritems=${list}varStatus=status${status.count}:c:outvalue=${str}/br/c:forEach整数[html]viewplaincopyc:forEachvar=ibegin=1end=10step=1c:outvalue=${i}/,/c:forEachp计算x的平方[html]viewplaincopytabletrthValue/ththSquare/th/trc:forEachvar=xbegin=0end=10step=2trtdc:outvalue=${x}//tdtdc:outvalue=${x*x}//td/tr/c:forEach/tablep字符串47,52,53,55,46,22,16,2分隔.[html]viewplaincopytableborder=1c:forTokensit