zoukankan      html  css  js  c++  java
  • 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:Javajdk1.6.0_11jrelibext下即可

    若运行里出现以下信息:

    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.57conflogging.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最重要!

  • 相关阅读:
    FlashSocke 通过flash进行socket通信(as代码)
    JavaScript 中的对象深度复制(Object Deep Clone)
    map,vector 等容器内容的循环删除问题(C++)
    [转]用JavaScript在浏览器中创建下载文件
    [记]WIndow/Linux 获取本机(全部)IPv4、IPv6、MAC地址方法 (C/C++)
    [记]Debian alias 设置, 不设置貌似有点不方便习惯
    Linux 安装配置 FTP 服务 (vsftpd)
    FreeSWITCH 安装配置的 各种坑, 填坑
    ubuntu编译安装ruby1.9.3,从p551降级到p484
    redmine3.3.3 rake db:migrate 报错invalid byte sequence in US-ASCII (Argument Error) 解决方法
  • 原文地址:https://www.cnblogs.com/wujixing/p/5016827.html
Copyright © 2011-2022 走看看