• JSTL


    JSTL全名为JavaServer Pages Standard Tag Library 主要提供给JavaWeb开发人员一个标准通用的标签函数库.

    Web程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的可读性,维护性和方便性.

    需要引入的jar 

    jstl.jar

    standard.jar

    标签函数库主要分为5大类:

    1.核心标签库(Core tag library)

    2.I18N格式标签库(I18N-capable formatting tag library)

    3.SQL标签库(SQL tag library)

    4.XML标签库(XML tag library)

    5.函数标签库(Functions tag library)

    最常用的是 核心标签库

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

    <c:out>

    与el类似,比el更强大,能够对敏感的字符进行转换

    <%
            request.setAttribute("book", "<<book>>");
        %>
        <br>
        book:${requestScope.book}
        <br>
        <c:out value="${requestScope.book }"></c:out>


    book:<>
    <<book>> 

    通过查看源文件,<c:out>会将敏感字符自动转义

        <br>
        book:<<book>>
        <br>
        &lt;&lt;book&gt;&gt;
        <br><br>
    
    
    <c:out value="${requestScope.book }" escapeXml="false"></c:out>

    设置escapeXml="false" 默认不进行转义

    <c:out value="${requestScope.book }" default="booktitle"></c:out>

    当从域中没找到book时,取默认值

    <c:set var="name" value="java" scope="page"></c:set>
    <%--
    pageContext.setAttribute("name", "java");
    --%>
    name:${pageScope.name }

    使用<c:set>向指定域对象中赋值,类似于setAttribute

    value中可以放EL表达式

    <c:set var="subject" value="${param.subject }" scope="session"></c:set>
         subject:${sessionScope.subject }

    使用<c:set>为javaBean赋值

    <%
             Customer cust = new Customer();
             cust.setId(1001);
             request.setAttribute("cust", cust);
         %>
         ID:${requestScope.cust.id }
         <br>
         <c:set target="${requestScope.cust }" property="id" value="${param.id }"></c:set>
         ID:${requestScope.cust.id }

    使用<c:remove>可以移除指定域对象中的指定属性

    <c:set value="1997-1-1" var="date" scope="session"></c:set>
         <c:out value="${sessionScope.date }"></c:out>
         <br>
         <c:remove var="date" scope="session"/>
         date:${sessionScope.date }
         <br><br>

    JSTL 流程控制

    <c:if> 仅有if,没有else,但可以把判断的结果储存起来,以备之后使用

    <c:set value="20" var="age" scope="request"></c:set>
        <c:if test="${requestScope.age>18 }">成年了</c:if>
        <br>
        <c:if test="${param.age>18 }" var="isAdult" scope="request"></c:if>
        isAdult:<c:out value="${requestScope.isAdult }"></c:out>
        <br><br>

    <c:choose>只能当做<c:when>,<c:otherwise>的子标签

    在同一个<c:choose>中时,<c:when>必须在<c:otherwise>之前

    <c:when>必须有test属性

    在同一个<c:choose>时,<c:otherwise>必须是最后一个标签

    <c:choose>
            <c:when test="${param.age>60 }">老年</c:when>
            <c:when test="${param.age>35 }">中年</c:when>
            <c:when test="${param.age>18 }">青年</c:when>
            <c:otherwise>未成年</c:otherwise>
        </c:choose>
        <br><br>

    JSTL迭代操作

    <c:forEach>,<c:forTokens>

    遍历一个Collection,遍历数组同Collection

    <%
            List<Customer> custs = new ArrayList<Customer>();
            custs.add(new Customer(1001,"AA","aa@java.com"));  //index:0
            custs.add(new Customer(1002,"BB","bb@java.com"));
            custs.add(new Customer(1003,"CC","cc@java.com"));
            custs.add(new Customer(1004,"DD","dd@java.com"));
            custs.add(new Customer(1005,"EE","ee@java.com"));
            custs.add(new Customer(1006,"FF","ff@java.com"));
            request.setAttribute("customers", custs);
        %>
        <c:forEach items="${requestScope.customers }" var="custs"
         varStatus="status">
            ${status.index},${status.count},${status.first},${status.last}:${custs.id }:${custs.name }:${custs.email }<br>
        </c:forEach>
    
        <br><br>

    遍历Map

    <%
            Map<String,Customer> custsMap = new HashMap<String,Customer>();
            custsMap.put("a", new Customer(1001,"AA","aa@java.com"));
            custsMap.put("b", new Customer(1002,"BB","bb@java.com"));
            custsMap.put("c", new Customer(1003,"CC","cc@java.com"));
            custsMap.put("d", new Customer(1004,"DD","dd@java.com"));
            custsMap.put("e", new Customer(1005,"EE","ee@java.com"));
            custsMap.put("f", new Customer(1006,"FF","ff@java.com"));
            request.setAttribute("customers", custsMap);
        %>
        <c:forEach items="${requestScope.customers }" var="custs">
            ${custs.key}-${custs.value.id }-${custs.value.name }-${custs.value.email }<br>
        </c:forEach>
        <br><br>

    可以用来获取属性名称

    <c:forEach items="${pageContext.session.attributeNames }" var="attrName">
            ${attrName }
        </c:forEach>

    <c:forTokens>处理字符串的,类似于String的split

    <c:set value="a,b,c.d.e.f;g;h" var="test" scope="request"></c:set>
        <c:forTokens items="${requestScope.test }" delims="," var="s">
            ${s }<br>
        </c:forTokens>

    a
    b
    c.d.e.f;g;h

    URL操作

    包括3个 

    <c:import>

    <c:redirect>

    <c:url>

    1.<c:import> 可以包含任何页面到当前页面

    <c:import url="http://www.baidu.com"></c:import>

    2.<c:redirect>使当前jsp页面重定向到指定的页面

    <c:redirect url="/a.jsp"></c:redirect>

    <c:redirect url="http://www.baidu.com"></c:redirect>

    / 代表当前web应用的根目录,因为是交由servlet容器处理的

    使当前JSP转发的指定页面可以使用

    <jsp:forward page="/b.jsp"></jsp:forward>

    / 代表的是当前WEB应用的根目录

    response.sendRedirect("/test.jsp");   / 代表的是WEB站点的根目录

    3.<c:url> c:url产生一个url地址.可以根据Cookie是否可用来智能进行URL重写,对GET请求参数进行编码

    可以把产生的URL存储在域对象的属性中. 还可以使用c:param为URL添加参数.

    c:url会对参数进行自动的转码

    value中的 / 代表当前web应用的根目录

    <c:url value="/a.jsp" var="aUrl">
            <c:param name="name" value="数据库"></c:param>
        </c:url>
        aUrl:${aUrl }
        <br><br>

    结果:

    aUrl:/testServlet/a.jsp?name=%e6%95%b0%e6%8d%ae%e5%ba%93

  • 相关阅读:
    Go语言v1.8正式发布,有显著的性能提升和变化(go适合服务器编程、网络编程)
    NET生成二维码
    组合模式
    Spring MVC
    前端事件
    Play Framework + ReactiveMongo
    DDD领域驱动设计初探
    jsRender模板引擎
    C#分布式缓存Couchbase
    ABP
  • 原文地址:https://www.cnblogs.com/wq3435/p/5191570.html
Copyright © 2020-2023  润新知