jstl核心标签库

编程爱好者联盟 2017-03-19

JSTL(jsp standard tag Library) jsp标准标签库,它是apache对el表达式的扩展,jstl与el结合可以完成更强大的功能。

       JSTL它是一种标签语言,它不是jsp内置标签,所以在使用JSTL需要导入相关的jar包。

核心标签库一共有12个:

标签名功能备注
set  if  forEach  out  remove  redirect用于重定向 choose when otherwise  forToken  url 和 param  catch  import  

1、set标签:

<body>
    <c:set scope="request" value="tom" var="name"></c:set>
    <%--上述jstl标签相当于是request.setAttribute("name","tom") --%>
    ${requestScope.name}
    <%--
        scope:域范围
        value:设置值
        var:设置的名称
    --%>
    <br>
    <%
        User user = new User();
        user.setUsername("fox");
        request.setAttribute("user", user);
    %>

    <c:set property="username" target="${user}" value="james" />
    ${user.username}
    <%--
        上述的jstl代码,相当于 从request域中获了到user对象, 并给user对象赋值username=james, 备注,User是一个实体类,
        user.setUser("james");
     --%>

</body>

2、if标签:

<body>
    <c:if test="false">
            hello
        </c:if>
    <hr>
    <%
        request.setAttribute("a", 10);
        request.setAttribute("b", 20);
    %>

    <c:if test="${a>b}">   <!--这个地方不能写${a}>${b}, 也不能写${a>${b}}-->
        ${a }
    </c:if>

    <c:if test="${a<b}">
        ${b }
    </c:if>
    
    <%--    
        if标签必须有test属性,并且它的值必须是true/false
    --%>
</body>

3、forEach标签:

c:forEach基本使用1
    <br>
    <c:forEach begin="1" end="10" var="n" step="1">
        ${n}<br>
    </c:forEach>
    <%--
        上述代码相当于是
        for(int n=1;n<=10;n++){
            out.println(n);
        }
        begin:循环开始变量
        end:循环结束变量
        var:定义一个变量,用于接收循环
        step:步长
     --%>

    <hr>
    c:forEach基本使用2
    <br>
    <c:forEach begin="1" end="10" var="n" step="1" varStatus="vs">
        ${n}--${vs.count }--${vs.index}--${vs.first}--${vs.last}--${vs.current}<br>
    </c:forEach>
    <%--
        varStatus它是用于记录循环状态,它是一个对象,可使用的属性有 
        count:用来记录循环的元素的个数
        index:用来记录所循环的容器中的元素的下标
        first:判断当前是否是第一个元素
        last:判断当前是否是最后一个元素
        current:代表当前循环的元素
     --%>
</body>
<body>
    c:forEach高级使用:
    <hr>
    <h1>遍历数组</h1>
    <%
        String[] st = { "aaa", "bbb", "ccc" };
        request.setAttribute("st", st);
    %>
    <c:forEach items="${st}" var="s" varStatus="vs">
        ${s}---${vs.index }<br>
    </c:forEach>
    <%--
        items:用于接收一个容器
        var:它是用于接收从容器中迭代出来元素
        上面代码相当于增强for循环
        for(String s:st){
        }
        
     --%>
    <hr>
    <h1>遍历List集合</h1>
    <%
        List<String> list = new ArrayList<String>();
        list.add("111");
        list.add("222");
        list.add("333");
        request.setAttribute("list", list);
    %>
    <c:forEach items="${list}" var="n">
        ${n}<br>
    </c:forEach>
    
    <hr>
    <h1>遍历Map集合</h1>
    <%
        Map<String,String> map=new HashMap<String,String>();
        map.put("one", "111");
        map.put("two", "222");
        request.setAttribute("map", map);
    %>
    <c:forEach items="${map}" var="entry">
        ${entry.key}--${entry.value}<br>
    </c:forEach>
    
    <%--
        对map集合遍历,它相当于是使用entrySet()方法遍历
        
        Set<Map.Entry<String,String>> entry=map.entrySet();
        for(Map.Entry<String,String> me:entry){
            me.getKey()  me.getValue():
        }
        
     --%>
</body>

4、out标签:

<body>
      <%
          request.setAttribute("msg", "<font color='red'>hello world</font>");
      %>
    <c:out value="${msg}" default="good" escapeXml="true"/>
    
    <%--
        value:代表要输出的信息
        default:默认值
        escapeXml:它的值如果是false,信息会被浏览器解析,如果为true,代表信息原样输出。
     --%>
</body>

5、remove标签:

<body>
    
    <%
        User user = new User();
        user.setUsername("fox");
        request.setAttribute("user", user);
    %>

    ${user}  <!-- 获取user并打印 -->
    <c:remove var="user" scope="request"/>
    <%--上述代码相当于  request.removeAttribute("user")--%>
    ${user}  <!-- 这里获取不到user,因为已经被删除了 -->
</body>

6、redirect标签:

<body>
    <c:redirect context="/jstl" url="/demo1.jsp"/>
    <%--
        相当于response.sendRedirect("/jstl/demo1.jsp");
     --%>
</body>

7、choose when otherwise标签:

<body>
    <%
        int day = 50;
        switch (day) {
        case 1:
            out.println("周1");
            break;
        case 2:
            out.println("周2");
            break;
        case 3:
            out.println("周3");
            break;
        case 4:
            out.println("周4");
            break;
        case 5:
            out.println("周5");
            break;
        case 6:
            out.println("周6");
            break;
        case 7:
            out.println("周7");
            break;
        default:
            out.print("无此天");
        }
    %>
    <hr>
    <%
        request.setAttribute("day", 50);
    %>
    <c:choose>
        <c:when test="${day==1}">周1</c:when>
        <c:when test="${day==2}">周2</c:when>
        <c:when test="${day==3}">周3</c:when>
        <c:when test="${day==4}">周4</c:when>
        <c:when test="${day==5}">周5</c:when>
        <c:when test="${day==6}">周6</c:when>
        <c:when test="${day==7}">周7</c:when>
        <c:otherwise>
            无此天
        </c:otherwise>
    </c:choose>
</body>

8、forToken标签:

<body>
        <%
            request.setAttribute("str", "aa,bb,cc");
        %>
        <c:forTokens items="${str}" delims="," var="n">
            ${n}<br>
        </c:forTokens>
</body>

9、url 标签 和 param标签:

<body>
       <c:url context="/jstl" scope="request" value="/hello" var="myurl">
           <c:param name="username" value="张三"></c:param>
       </c:url>
       ${requestScope.myurl}
       <%--
           content它相当于工程名
           scope:域范围
           value:访问的资源路径
           var:声明一个变量
        --%>
        
        <%--
            param就是描述参数
            它的优点是可以直接将汉字进行url编码
         --%>
</body>

10、catch标签:

<body>
        <c:catch var="e">
            <%
                int i=0;
                int n=10/i;
            %>
        </c:catch>
        ${e}
</body>

11、import标签:

<body>
        <c:import url="demo1.jsp"></c:import>
        <%--相当于include操作, 静态导入 --%>
</body>

相关推荐