zoukankan      html  css  js  c++  java
  • JSTL1.2学习总结

    1.0 JSTL的下载

    JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上。

    2.0 搭建开发环境

       1. Dependencies provided by a JSP 2.1 container:

          - Java 1.5 or later

          - Servlet 2.5 or later

          - JSP 2.1 or later

       2. Additional dependencies

          - The XML tag library requires Apache Xalan 2.7.1 or later

    3. Add the following JARfiles to the '/WEB-INF/lib' directory of your application:

       - taglibs-standard-spec-1.2.1.jar

       - taglibs-standard-impl-1.2.1.jar

       - taglibs-standard-jstlel-1.2.1.jar

       - xalan-2.7.1.jar

       - serializer-2.7.1.jar

    3.0 引入对应的JSTL Tag Libraries

    核心标签库的引入:

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

     

    4.0 核心标签库

    4.1 <c:out>

     

    属性说明:

    value:必须,值会输出到页面。可以是表达式或字符串。

    escapeXml:非必须,值可以是true/false,默认是true。默认情况下以下字符原样输出,也就是不当html解析,如果设置为false就会转为相应的html实体。

     

    default:非必须,设置默认值,当value的值是null时,输出。

    示例:

    <c:out value="aa"></c:out>     <!-- 输出的是aa -->

    <c:out value="${aa}">bb</c:out> <!-- ${aa}不存在,返回的是null,所以 输出的是bb,默认值也可以在标签中间-->

    <c:out value="${aa}" default="bb"/> <!-- ${aa}不存在,返回的是null,所以 输出的是bb,-->

    <c:out value="${aa}"/> <!-- ${aa}不存在,返回的是null,又没有默认值,就输出一个空字符串-->

    <c:out value="<a href="#">aa</a>" default="bb"/> <!-- <a href="#">aa</a> -->

    <c:out value="<a href="#">aa</a>" escapeXml="false" default="bb"/> <!-- aa -->

    4.2 <c:set>

     

    1)        给page/request/session/application内置对象的属性赋值

    <a href="page.jsp?usernaem=liSi">set标签测试</a>

    page.jsp

    <c:out value="${param.usernaem}"/> <!-- 使用EL表达式接收url的传值时,必须要加 param。输出的是 liSi-->

    <c:set var="usernaem" value="张三"  scope="request"/> <!— 给在request范围内的变量usernaem赋一个新值张三-->

    <c:out value="${usernaem}"/> <!—  输出张三 -->

    说明:如果var属性的值在request范围内存在,那么会在request对象中创建这个属性,并赋值。

    <c:set var="aa" value="bb"  scope="request"/>

    <%=request.getAttribute("aa") %>   <!— 输出 bb -->

    <c:out value="${aa}"/>              <!— 输出 bb -->

    2)        给page/request/session/application内置对象的属性赋值,与 1) 的区别把value属性的值放在标签中。

    <c:set var="aa"  scope="request"/>bb</c:set>

    <%=request.getAttribute("aa") %>   <!— 输出 bb -->

    <c:out value="${aa}"/>              <!— 输出 bb -->

    3)   给javaBean属性赋值

    引入类:

    <%@ page import="com.zheting.it.vo.*" %>

    实例化对象:

    <%  Person person = new Person();  %>

    修改对象的值:

    <c:set property="age" target="<%= person %>" value="22"/>

    <c:out value="<%= person.getAge() %>"/>  <!— 输出 22 -->

    4)   给javaBean属性赋值

    引入类:

    <%@ page import="com.zheting.it.vo.*" %>

    实例化对象:

    <% 

    Person person = new Person();

    pageContext.setAttribute("kk", person);

     %>

    修改对象的值:

    <c:set property="age" target="${kk}" value="22"/>

    <c:out value="${kk.age}"/> <!— 输出 22 -->

    5)   给javaBean属性赋值

    <jsp:useBean id="tt" class="com.zheting.it.vo.Person" scope="page" />

    <c:set property="age" target="${tt}" value="11"/>

    <c:out value="${tt.age}"/> <!— 输出 11 -->

    说明:value 属性的值可以写在标签体中。

    4.3 <c:remove>

     

    4.4 <c:catch>

     

    4.5 <c:if>

     

    var属性用来存储test属性比较的结果,即true/false。

    <c:set var="salary" scope="session" value="${2000*2}"/>

    <c:if test="${salary > 2000}" var="ff">

    <c:out value="${ff}"/> <!— true-->

    语法一只是为了得到比较结果时使用,标签体中没有要执行的内容。

    多个条件判断时,用and连接,注意返回false时不输出false,输出的是一个空字符串。

    <c:if test="${salary > 2000 and salary < 5000}" var="ff">

    <c:out value="${ff}"/>  

    <%=pageContext.getAttribute("ff") %>

    附:EL表达式中的操作符:

     

    可以判断一个对象(如集合)或属性为null或空字符串””。

    4.6 <c:choose>

     

    4.7 <c:forEach>

     

    <c:forEach>可以循环的对象:

     

    <% 
            String[] arr = {"a","b","c","d","e","f"}; //数组
            pageContext.setAttribute("arr", arr);
            
            List list = new ArrayList(); //List
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            list.add("e");
            list.add("f");
            pageContext.setAttribute("list", list);
            
            Map map = new HashMap();
            map.put("a", "aa");
            map.put("b", "bb");
            map.put("c", "cc");
            map.put("d", "dd");
            map.put("e", "ee");
            map.put("f", "ff");
            pageContext.setAttribute("map", map);
            
         %>
         <c:forEach var="item" items="${arr}" >
               <c:out value="${item}"/>
           </c:forEach>
           <br/>
           <c:forEach var="item" items="${list}" >
               <c:out value="${item}"/>
           </c:forEach>
           <br/>
           <c:forEach var="item" items="${map}" >
               <c:out value="${item.key}"/>
               <c:out value="${item.value}"/>
               <c:out value="${item}"/>
           </c:forEach>
           <br/>
           <c:forEach var="i" begin="1" end="100" step="5">
              <c:out value="${i}"/>
        </c:forEach>

    运行结果:

     

    只输出偶数:

    <c:forEach var="i" begin="1" end="100" varStatus="status">
    
               <c:if test="${status.count%2==0}">
    
                    <c:out value="${i}"/>
    
               </c:if>
    
    </c:forEach>

    运行结果:

    varStatus属性详细介绍:

    varStatus属性是实现了接口:javax.servlet.jsp.jstl.core.LoopTagStatus

     

    c:forEach varStatus属性

    current当前这次迭代的(集合中的)项
    index当前这次迭代从 0 开始的迭代索引
    count当前这次迭代从 1 开始的迭代计数
    first用来表明当前这轮迭代是否为第一次迭代的标志
    last用来表明当前这轮迭代是否为最后一次迭代的标志

    4.8 <c:forTokens>

     

    这个标签的作用就是把字符串按照指定的分隔符拆分,并循环。

    <c:forTokens items="0aa,1bb,2cc,3dd,4ee,5ff,6gg,7kk,8mm,9nn,10zz" delims="," var="item" begin="2" end="9" varStatus="status">
    
                <c:if test="${status.count%2==0}">
    
                      <c:out value="${item}"/>
    
                </c:if>
    
    </c:forTokens>

    运行结果:

    items属性值得字符串,用delims属性值”,”分割,从索引2开始,到索引9(包括)结束,varStrtus的属性值中记录循环状态信息,其count属性是从1开始计数的,var属性值存储着当前循环得到的那个值。

    5.0 格式化标签库

    5.1 <fmt:setLocale> 设置local信息

     

    <fmt:setLocale value="zh_CN" />

    <fmt:setLocale value="zh-CN" />

    <fmt:setLocale value="${header['accept-language']}" />

    5.2 <fmt:setBundle>绑定资源文件

     

     <fmt:setBundle basename="com.zheting.it.resources.MessageResources"/>

    5.3 <fmt:message>读取资源文件

     

    <fmt:message key="loginForm.uname"/>

  • 相关阅读:
    Web前端开发——HTML概述
    Web前端开发——概述
    [nowCoder] 两个不等长数组求第K大数
    [nowCoder] 两个长度相同有序数组的中位数
    [nowCoder] 完全二叉树结点数
    [nowCoder] 子数组最大乘积
    [nowCoder] 局部最小值位置
    [LeetCode] Binary Tree Right Side View
    [C/CPP系列知识] Type difference of character literals 和 bool in C and C++
    [C/CPP系列知识] C++中extern “C” name mangling -- Name Mangling and extern “C” in C++
  • 原文地址:https://www.cnblogs.com/zheting/p/7594392.html
Copyright © 2011-2022 走看看