JSP标准标签库(JSTL)--核心标签库 c

时间:2023-03-09 06:03:28
JSP标准标签库(JSTL)--核心标签库 c

核心标签库是JSTL中最重要的部分,可以完成输出,判断,迭代等操作

功能分类:

1. 基本标签:

  <c:out>:输出属性内容

  <c:set>:设置属性内容

  <c:remove>:删除指定属性

  <c:catch>:异常处理

2. 流程控制标签:

  <c:if>:条件判断

  <c:choose>:多条件判断,可以设置<c:when>, <c:otherwise>标签

3. 迭代标签:

  <c:forEach>:输出数组,集合  

  <c:forTokens>:字符串拆分及输出操作

4. 包含标签:<c:import> 将一个指定的路径包含到当前页进行显示

5. 生成URL标签:<c:url>

6. 客户端跳转: <c:redirect>

  • <c:out>:输出属性内容:

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

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

escapeXml:是否转换字符串,例如将">"转换成&gt,默认为true

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
pageContext.setAttribute("info","<www.MLDN.cn>") ;
%>
<h3>属性存在:<c:out value="${info}"/></h3>
<h3>属性不存在:<c:out value="${ref}" default="没有此内容!"/></h3>
<h3>属性存在:<c:out value="${ref}">没有此内容!</c:out></h3>
</body>
</html>

运行程序如果出现错误:java.lang.NoClassDefFoundError: javax/el/ELResolver

到apache-tomcat/lib目录下,拷贝el-api.jar放到D:\Java\jdk1.6.0_11\jre\lib\ext下即可

若运行里出现以下信息:

org.apache.jasper.compiler.TldLocationsCache tldScanJarINFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

可以修改D:\apache-tomcat-7.0.57\conf\logging.properties文件,将

org.apache.jasper.compiler.TldLocationsCache.level = FINE  注释去掉,调整log等级

  •  <c:set>:设置属性内容

设置属性:

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

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

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:set var="info" value="Hello MLDN!" scope="request"/>
<h3>属性内容:${info}</h2>
</body>
</html>

设置对象:

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

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

通过<c:set>标签还可以进行已有JavaBean的复制操作:

javabean文件:

package org.lxh.jstldemo.vo ;
public class SimpleInfo {
private String content ;
public String getContent(){
return this.content ;
}
public void setContent(String content){
this.content = content ;
}
}

jsp文件:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="org.lxh.jstldemo.vo.SimpleInfo"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
SimpleInfo sim = new SimpleInfo() ;
request.setAttribute("simple",sim) ;
%>
<c:set value="Hello MLDN!" target="${simple}" property="content"/>
<h3>属性内容:${simple.content}</h2>
</body>
</html>
  • <c:remove>:删除指定属性

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

jsp例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:set var="info" value="Hello MLDN!!" scope="request"/>
<c:remove var="info" scope="request"/>
<h3>属性内容:${info}</h3>
</body>
</html>
  • <c:catch>:异常处理

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

jsp文件:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:catch var="errmsg">
<%
int result = 10 / 0 ;
%>
</c:catch>
<h3>异常信息:${errmsg}</h3>
</body>
</html>
  • <c:if>:条件判断 

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

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

</c:if>

jsp例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:if test="${param.ref=='mldn'}" var="res1" scope="page">
<h3>欢迎${param.ref}光临</h3>
</c:if>
<c:if test="${10<30}" var="res2">
<h3>10比30小</h3>
</c:if>
</body>
</html>
  • <c:choose>:多条件判断

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

<c:when test="判断条件">满足条件时执行的语句</c:when>

<c:otherwise>当所有<c:when>条件不满足时,执行本内容</c:otherwise>

jsp例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
pageContext.setAttribute("num",10) ;
%>
<c:choose>
<c:when test="${num1==10}">
<h3>num属性的内容是10!</h3>
</c:when>
<c:when test="${num1==20}">
<h3>num属性的内容是20!</h3>
</c:when>
<c:otherwise>
<h3>没有一个条件满足!</h3>
</c:otherwise>
</c:choose>
</body>
</html>
  • <c:forEach>:输出数组,集合 

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

</c:forEach>

例子1:输出数组:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String info[] = {"MLDN","LiXingHua","www.MLDNJAVA.cn"} ;
pageContext.setAttribute("ref",info) ;
%>
<h3>输出全部:
<c:forEach items="${ref}" var="mem">
${mem}、
</c:forEach></h3>
<h3>输出全部(间隔为2):
<c:forEach items="${ref}" var="mem" step="2">
${mem}、
</c:forEach></h3>
<h3>输出前两个:
<c:forEach items="${ref}" var="mem" begin="0" end="1">
${mem}、
</c:forEach></h3>
</body>
</html>

结果:

输出全部: MLDN、 LiXingHua、 www.MLDNJAVA.cn、

输出全部(间隔为2): MLDN、 www.MLDNJAVA.cn、

输出前两个: MLDN、 LiXingHua、

输出list:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
List all = new ArrayList() ;
all.add("MLDN") ;
all.add("LiXingHua") ;
all.add("www.MLDNJAVA.cn") ;
pageContext.setAttribute("ref",all) ;
%>
<h3>输出全部:
<c:forEach items="${ref}" var="mem">
${mem}、
</c:forEach></h3>
</body>
</html>

结果:

输出全部: MLDN、 LiXingHua、 www.MLDNJAVA.cn、

输出map:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
Map map = new HashMap() ;
map.put("mldn","www.MLDNJAVA.cn") ;
map.put("lxh","LiXingHua") ;
pageContext.setAttribute("ref",map) ;
%>
<c:forEach items="${ref}" var="mem">
<h3>${mem.key} --> ${mem.value}</h3>
</c:forEach>
</body>
</html>

结果:

mldn --> www.MLDNJAVA.cn

lxh --> LiXingHua
  • <c:forTokens>:字符串拆分及输出操作

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

标签体内容

</c:forTokens>

类似String类中的split()方法

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String info = "www.MLDNJAVA.cn" ;
pageContext.setAttribute("ref",info) ;
%>
<h3>拆分结果是:
<c:forTokens items="${ref}" delims="." var="con">
${con}、
</c:forTokens></h3>
<h3>拆分结果是:
<c:forTokens items="Li:Xing:Hua" delims=":" var="con">
${con}、
</c:forTokens></h3>
</body>
</html>

结果如下:

拆分结果是: www、 MLDNJAVA、 cn、

拆分结果是: Li、 Xing、 Hua、
  •  包含标签:<c:import>

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

标签体内容

[<c:param name="参数名称" value=“参数内容”/>]

</c:import>

<c:import>与<jsp:include>类似,区别在于,<c:import>可以包含外部的页面,<jsp:include>只能包含本项目中的文件

包含外部页面的例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:import url="http://www.mldn.cn" charEncoding="UTF-8"/>
</body>
</html>

上述包含只包含文字,而不能包含图片等信息

包含内部文件的例子:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:import url="param.jsp" charEncoding="UTF-8">
<c:param name="name" value="LiXingHua"/>
<c:param name="url" value="www.MLDNJAVA.cn"/>
</c:import>
</body>
</html>

param.jsp:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<h3>name参数:${param.name}</h3>
<h3>url参数:${param.url}</h3>
  •  生成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>

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:url value="http://www.mldnjava.cn" var="urlinfo">
<c:param name="author" value="李兴华"/>
<c:param name="logo" value="mldn"/>
</c:url>
<a href="${urlinfo}">新的地址</a>
</body>
</html>

以上相当于帮主用户自动进行地址重写,如果传递的是中文,会帮助用户自动进行编码

跳转到以下页面:

http://www.mldnjava.cn/?author=%c0%ee%d0%cb%bb%aa&logo=mldn
  • 客户端跳转: <c:redirect>

<c:redirect url="跳转的地址" context="上下文路径"/>

<c:redirect url="跳转的地址" context="上下文路径">

  <c:param name="参数名称" value="参数内容"/>

</c:redirect>

response.sendRedirect()属于jsp代码,既然是jsp代码,则肯定要使用scriptlet进行包含,而一个jsp页面最好不要包含任何的scriptlet代码,那么就可以通过标签来完成

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://www.mldn.cn/jst/core"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<c:redirect url="param.jsp">
<c:param name="name" value="LiXingHua"/>
<c:param name="url" value="www.MLDNJAVA.cn"/>
</c:redirect>
</body>
</html>

可以发现,JSTL和一些基础开发一样,从开发上讲,判断,迭代操作使用较多。

其他的JSTL标签使用较少,C标签最重要,其中if,forEach最重要!