• 9. JSP


    JSTL核心标签库简介

    JSTL中的核心标签库主要用于完成基本的逻辑运算,在开发中使用较多。

    在开发前导入相关jar包之后,还需要在页面中通过 taglib 指令将标签库导入: 

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

    这是核心库的头 定死了的啊  阿帕奇规定这样使用的:

    我们开始讲解  核心库中有哪些标签:

    c:out标签

    用于在页面上输出 EL 表达式的值,该标签不常使用,因为不使用该标签也能够在页面上输出EL表达式

    例:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <%
            request.setAttribute("name", "bihu");
        %>
        
        为什么不经常用?   因为直接el表达式即可输出:
        <br>
        <br>
        1. el表达式直接输出: ${ name }
        <br>
        2. 用c:out 标签:     <c:out value="name :  ${ name }"></c:out>
    
    </body>
    </html>  

    所以,,,为什么不经常用...


    c:catch标签

    当有异常发生时,用于捕获异常相当于 try-catch 中的 catch 代码块该标签中只有一个属性 var,是捕获到的异常对象,名称可以自定义。该标签不常用,一般不会在页面中显示异常信息

    <c:catch var="e">
            ${ pageContext.name }        <%-- 捕获的是这个异常!  就像 try - catch 一样 这里故意给个异常给他啊! --%>
            
    </c:catch>
    
    <%-- 然后我们将其捕获的异常栈输出: --%>
    <br>
    捕获的异常: ${ e.message  }

    一般会用 调试可能用一下 。


    c:if标签

    该标签主要用于条件判断。

    • test:判断的条件。若为 true,则执行标签体中的内容,否则不执行。
    • var:存储 test 的判断结果。不常用。
    • scope:存储 test 判断结果的变量的存放范围。不常用。

    三个属性 先看代码:

    <% 
        request.setAttribute("person", "user");
    %>
    <c:if test="${ person == 'user' }" var="flag" scope="request">
        管理员
        <br>
        var  : 
        ${ flag }
        <br>
    </c:if>

    至于 scope 我也不知道 反正不常用 ... 晚点问老师


    :choose标签

    实现多分支判断。类似于 switch-case 语句。一个 标签中可以包含多个与一个。

    这玩意和switch 差不多:

    例:

     <% 
        request.setAttribute("hobby", "Game");
    %>
     
     <c:choose>
     <c:when test="${ hobby == 'Muisc' }">
         我喜欢听音乐
     </c:when>
     
     <c:when test="${ hobby == 'football' }">
         我喜欢踢足球
     </c:when>
     
      <c:when test="${ hobby == 'Game' }">
         我喜欢打游戏
     </c:when>
     
      <c:when test="${ hobby == 'Basketball' }">
         我喜欢打篮球
     </c:when>
     
     </c:choose> 

    c:forEach标签

    该标签用于循环遍历数组、集合(List、Set、Map),实际开发中使用较多。

    各遍历都在里面:

     --------------------------c:forEach标签-------------------------------------
     <br>
     -------------1.遍历数组
    <%    Object[] arr = {"北京","上海","广州","深圳"};    
        request.setAttribute("city", arr);
    %>
    <br>
    <c:forEach items="${ city }" var="city_temp">
                    ${ city_temp } <br>      <%-- 开始遍历 --%>
    </c:forEach>
    
    <br>
     -------------2.遍历 List
     <%    List<String> list = new ArrayList();
         list.add("张三");
         list.add("李四");
         list.add("王五");
         list.add("赵6");
        request.setAttribute("person", list);
    %>
    <br>
    <c:forEach items="${ person }" var="person_temp">
                    ${ person_temp } <br>      <%-- 开始遍历 --%>
    </c:forEach>
    <br>
     -------------3.遍历 Set
     <%    Set<String> set = new HashSet();
         set.add("1 a");
         set.add("2 b");
         set.add("3 c");
         set.add("4 d");
        request.setAttribute("code", set);
    %>
    <br>
    <c:forEach items="${ code }" var="code_temp">
                    ${ code_temp } <br>      <%-- 开始遍历 --%>
    </c:forEach>
    
     -------------4.遍历 Map
     <%    Map<Integer,String> map = new HashMap();
         map.put(1, "信息工程学院");
         map.put(2, "现代教育学院");
         map.put(3, "机电技术学院");
         map.put(4, "艺术学院");
         map.put(5, "经济管理学院");
        request.setAttribute("college", map);
    %>
    <br>
    <c:forEach items="${ college }" var="college_temp">
                    ${ college_temp.key } : ${ college_temp.value }
                     <br>      <%-- 开始遍历 --%>
    </c:forEach>

    特别注意 Map 的遍历 如果你不以 xxx.key xxx.value  形式来的话 如果直接输出会输出 key=value 这种形式

    c:forEach标签 还有几个标签要讲解: begin 、end 和 step 和 varStatus

    begin  和 end 是开始和结束的意思  在这个标签中 他作用是 从哪里开始遍历 到哪里结束遍历 ,但是 都包括了 begin 和 end 【即包括自己】

    step 迈步的意思  他的作用是 迈开遍历  如果为1 那就以一步走的方式遍历【即全部都遍历】 如果为2 那就以两步走的方式遍历: 例如: 有 1 2 3 4 5 6 我的step为2 那么我遍历的元素是:

    1 3 5 , 所以这个你要认真看下就懂了

    varStatus 是用来存储状态的,下图讲解了:【图源自于网上 满好的.】

    所以 你就可以   varStatus.xxxx 使用了:

    例: 用list做数据库 创建一个表格 规定 1 3 5 、 2 4 5 行 不同颜色:

    <%-- 最好用 类 的方式存储! ! 这里演示就用String 和 Integer 了 !!!  --%>
    <%  Map<String,Integer> table = new HashMap();
        table.put("雷军", 32);
        table.put("柳传志", 29);
        table.put("马云", 33);
        table.put("马化腾", 41);
        table.put("陈欧", 22);
        request.setAttribute("person", table);
    %>
    
    <table border="1">
    <tr>
    <td>序号</td>
    <td>姓名</td>
    <td>年龄</td>
    </tr>
    
    <c:forEach items="${ person }"   var="person_temp" varStatus="i">
    <tr style="${ i.index % 2 == 0 ? 'background-color:#7bbfea' :'background-color:#007947' }">
    <td>
    ${ i.index }
    </td>
    <td>
    ${person_temp.key }
    </td>
    <td>
    ${person_temp.value }
    </td>
    </tr>
    </c:forEach>
    
    </table>

    代码也写到了 集合哪里最好存储类 不然的话你只能存储就那么两个 如果是类,就可以 类.xx 这样代码健壮性和很方便 快捷 ,因为foreach遍历的是每个元素。。。。

    关于 varStatus  图标的属性 自己多去使用即可!

    图:


    完全代码:

    <%@page import="java.util.HashMap"%>
    <%@page import="java.util.Map"%>
    <%@page import="java.util.Set"%>
    <%@page import="java.util.HashSet"%>
    <%@page import="java.util.List"%>
    <%@page import="java.util.ArrayList"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <style>
    table{
    border-collapse:collapse;
    }
    </style>
    </head>
    <body>
    <!-- --------------------------c:out标签------------------------------------- -->
    <br>
    <br>
     <hr>
        <%
            request.setAttribute("name", "bihu");
        %>
        
        为什么不经常用?   因为直接el表达式即可输出:
        <br>
        <br>
        1. el表达式直接输出: ${ name }
        <br>
        2. 用c:out 标签:     <c:out value="name :  ${ name }"></c:out>
    
    
     <hr>
     --------------------------c:catch标签------------------------------------- 
    
    <c:catch var="e">
            ${ pageContext.name }        <%-- 捕获的是这个异常!  就像 try - catch 一样 这里故意给个异常给他啊! --%>
            
    </c:catch>
    
    <%-- 然后我们将其捕获的异常栈输出: --%>
    <br>
    捕获的异常: ${ e.message  }
    
     <hr>
     --------------------------c:if标签------------------------------------- 
    <br>
    <br>
    <% 
        request.setAttribute("person", "user");
    %>
    <c:if test="${ person == 'user' }" var="flag" scope="request">
        管理员
        <br>
        var  : 
        ${ flag }
        <br>
        
    </c:if>
     --------------------------c:choose标签-------------------------------------
     <br>
     
     <% 
        request.setAttribute("hobby", "Game");
    %>
     
     <c:choose>
     <c:when test="${ hobby == 'Muisc' }">
         我喜欢听音乐
     </c:when>
     
     <c:when test="${ hobby == 'football' }">
         我喜欢踢足球
     </c:when>
     
      <c:when test="${ hobby == 'Game' }">
         我喜欢打游戏
     </c:when>
     
      <c:when test="${ hobby == 'Basketball' }">
         我喜欢打篮球
     </c:when>
     
     </c:choose> 
    <br>
     --------------------------c:forEach标签-------------------------------------
     <br>
     -------------1.遍历数组
    <%    Object[] arr = {"北京","上海","广州","深圳"};    
        request.setAttribute("city", arr);
    %>
    <br>
    <c:forEach items="${ city }" var="city_temp">
                    ${ city_temp } <br>      <%-- 开始遍历 --%>
    </c:forEach>
    
    <br>
     -------------2.遍历 List
     <%    List<String> list = new ArrayList();
         list.add("张三");
         list.add("李四");
         list.add("王五");
         list.add("赵6");
        request.setAttribute("person", list);
    %>
    <br>
    <c:forEach items="${ person }" var="person_temp">
                    ${ person_temp } <br>      <%-- 开始遍历 --%>
    </c:forEach>
    <br>
     -------------3.遍历 Set
     <%    Set<String> set = new HashSet();
         set.add("1 a");
         set.add("2 b");
         set.add("3 c");
         set.add("4 d");
        request.setAttribute("code", set);
    %>
    <br>
    <c:forEach items="${ code }" var="code_temp">
                    ${ code_temp } <br>      <%-- 开始遍历 --%>
    </c:forEach>
    
     -------------4.遍历 Map
     <%    Map<Integer,String> map = new HashMap();
         map.put(1, "信息工程学院");
         map.put(2, "现代教育学院");
         map.put(3, "机电技术学院");
         map.put(4, "艺术学院");
         map.put(5, "经济管理学院");
        request.setAttribute("college", map);
    %>
    <br>
    <c:forEach items="${ college }" var="college_temp">
                    ${ college_temp.key } : ${ college_temp.value }
                     <br>      <%-- 开始遍历 --%>
    </c:forEach>
    
    <br>
    ------------------------------------制作表格
    <%-- 最好用 类 的方式存储! ! 这里演示就用String 和 Integer 了 !!!  --%>
    <%  Map<String,Integer> table = new HashMap();
        table.put("雷军", 32);
        table.put("柳传志", 29);
        table.put("马云", 33);
        table.put("马化腾", 41);
        table.put("陈欧", 22);
        request.setAttribute("person", table);
    %>
    
    <table border="1">
    <tr>
    <td>序号</td>
    <td>姓名</td>
    <td>年龄</td>
    </tr>
    
    <c:forEach items="${ person }"   var="person_temp" varStatus="i">
    <tr style="${ i.index % 2 == 0 ? 'background-color:#7bbfea' :'background-color:#007947' }">
    <td>
    ${ i.index }
    </td>
    <td>
    ${person_temp.key }
    </td>
    <td>
    ${person_temp.value }
    </td>
    </tr>
    </c:forEach>
    
    </table>
    
    
    
    
    </body>
    </html>  

    说明: 这里为什么一直用request这个域存储属性? 随便的啊 这里图方便 你可以用其他的,比如pageContext 、 session 、 什么什么都可以 , 你喜欢。

    这里就说那么多常用的 还有很多自己去百度....

                        完。

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14837661.html

  • 相关阅读:
    Windows Phone 7.8 SDK 离线安装包
    利用Async CTP改造Live SDK for WP7
    删除TFS云端上的项目
    Azure通过TFS进行部署
    IIS部署 HTTP Error 500.35 ANCM Multiple InProcess Applications in same Process
    树莓派4B装机指南(无屏幕)
    腾讯云VPS(CVM)重装Debian系统后的基础配置工作
    @Schedule和基于SchedulingConfigurer 定时任务
    (FutureTask和Future) 使用方式 开启线程异步执行并可以阻塞得到返回值
    springboot与logbackspring 非常简单集成
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14837661.html
Copyright © 2020-2023  润新知