JSTL表达式的使用

版权声明:yuanmomoya https://blog.csdn.net/yuanmomoya/article/details/82527362

要使用JSTL首先要引入相关jar包。必须导包引入!!!一般引入的代码也放到base标签中

     jsp脚本片段使用JSTL替代

              - 取出域中的属性值,先判断,然后遍历或者直接显示到页面中

              - jstl一般结合EL表达式使用,先取出值然后使用jstl判断或遍历

              - jstl每个标签都是一套java代码

         JSTL:  jsp standard tag lib

              使用步骤:

                       1、将jstl需要使用的jar包拷贝到项目中

                       2、在需要使用jstl的页面中通过taglib指令引入需要使用的标签库

                       3、给需要使用的标签库指定标签的前椎名

              核心标签库:core  重点

                  - if、if-else、for、域属性值的操作、重定向...

                  - c

              格式化标签库:fmt

                  - 日期时间的处理 、 国际化

             函数标签库:fun

                  - 字符串处理的方法:  截取

               xml标签库:解析xml的标签库,已经淘汰

                ql标签库:和数据库交互的标签库,淘汰

                            一般结合el使用

1、c:out    取出域中的值显示到页面中

                   作用:向页面输出内容

                   value:要输出的值

                   default:如果value值为空,显示默认值

                   escapeXml:是否对xml特殊符号转义

                            默认会对value值进行检查,对html符号进行转义   true

                            false  不转义

例子:    <%

              request.setAttribute("address", "我也不知道");

              request.setAttribute("code", "<script>alert('tianwanggaidihu')</script>");

          %>

        <c:out value="${address }" default="北京"></c:out><br/>

        <%-- ${code } --%><!-- 将域中属性值取出写入到响应体中交给浏览器 , 如果内容是html内容,浏览器会解析 -->

        <c:out value="${code }" escapeXml="true"></c:out>

2、c:set  向域中设置属性值

             request.setAttribute("address", "我也不知道");

               scope: 要存储值的域

                        不指定默认存在pageContext域中

                        page/request/session/application

               var:  存储的键

               value: 存储的属性值

  <h4>c:set</h4>

        <c:set var="key" value="pagehehe" scope="page"></c:set>

        <c:set var="key" value="requesthehe" scope="request" ></c:set>

        <c:set var="key" value="sessionhehe" scope="session"></c:set>

        <c:set var="key" value="applicationhehe" scope="application"></c:set>

       

       pageScope: ${pageScope.key }<br/>

        requestScope:${requestScope.key }<br/>

       sessionScope: ${sessionScope.key }<br/>

       applicationScope: ${applicationScope.key }<br/>

3、c:remove  移除域中指定的属性值

               request.removeAttribute("key");

               var:要移除的属性的键

               scope:如果不指定,默认全域移除[所有域中的指定键对应的值都会移除]

c:remove var="key" scope="session"/>

        <h4>c:remove</h4>

         pageScope: ${pageScope.key }<br/>

        requestScope:${requestScope.key }<br/>

       sessionScope: ${sessionScope.key }<br/>

       applicationScope: ${applicationScope.key }<br/>

条件一般是使用el表达式判断后得到一个布尔类型的结果进行使用

         4、 c:if      if(boolean 条件){//代码块}(就是java中学习的if  else 语句)

                  作用:相当于java中单个的if语句

                  test:  if语句执行的条件

                  双标签的内部就是控制的要执行的代码块

                  如果条件结构复杂,一般不适用单个的if语句,多个if之间没有直接的互斥关系

<!-- 判断用户提交的请求参数score是否>=60   -->

      <c:if test="${param.score>=60 }">

          <h4>恭喜你及格了...</h4>

      </c:if>

     

      <c:if test="${param.score<60 }">

          <h4>恭喜你不及格...</h4>

      </c:if>

if-else if-else

         5、c:choose   : 在页面中创建一个if-else的语句结构

                  c:when:  相当于  if  或 else if

                  c:otherwise: 相当于 else

              注意:

                  1、choose内只能有when和otherwise子标签组成,如果需要内部注释,只能使用jsp注释

                  2、choose中可以有多个when语句,但是如果条件有包含关系,范围小的需要在上面

                  3、othserwise 一般最多使用一个,在条件的最后使用

                  4、when和otherwise只能当做choose的子标签使用,when和otherwise内可以随意写

<!-- 判断用户提交的age参数,如果>40 输出     如果>30  如果>18  其他 -->

      <c:choose>

          <%-- 开始了判断 --%>

          <c:when test="${param.age>40 }">

              <c:choose>

                  <c:when test="${param.age>=90 }">

                       <h3>人生90古来稀...</h3>

                  </c:when>

                  <c:when test="${param.age>=70 }">

                       <h3>人生70古来也稀...</h3>

                  </c:when>

                  <c:otherwise>

                           <!-- hehe -->

                       <h3>你的路已经走了一半了...</h3>

                  </c:otherwise>

              </c:choose>

          </c:when>

          <c:when test="${param.age>30 }">

              <h3>你的路已经快。。走了一半了...</h3>

          </c:when>

          <c:when test="${param.age>18 }">

              <h3>那就是我...</h3>

          </c:when>

          <c:otherwise>

              <h3>你还嫩着呢....</h3>

          </c:otherwise>

      </c:choose>

     

6、c:forEach : 相当于java中的for循环

              如果遍历一组数:相当于普通for[  for(int i=1;i<=5;i++){//代码块   i }   ]

              如果遍历集合:相当于增强for[ for(Object obj:list){//代码块} ]

      -->

      <!-- 6。1  遍历一组数

          begin:遍历的起始索引值   不能小于0

          end:遍历的结束索引值

          step:步进 ,默认1

          var: 如果在遍历的代码块中需要使用正在遍历的索引值,可以设置var属性,标签默认会将正在遍历的索引值存到pageContext域中,键就是var的值

                  标签遍历结束后会自动移除域中var对应的属性

                   应用:生成页码

 <c:forEach begin="1" end="5" var="index" >

          <!-- 每次遍历执行的代码块 -->

          <%-- <h5>hehe + ${pageScope.index }</h5> --%>

          <a href="pageServlet?pageNumber=${index }">${index }</a>

      </c:forEach>

6.2 遍历list

          items:指定要遍历的集合,需要使用EL从域中取出

                   标签会自动根据集合的长度进行遍历

          var:  标签每次遍历时可以将正在遍历的集合的元素存到pageContext域中,var的值就是属性名

 <%

          List list = new ArrayList();

          list.add("tingjie");

          list.add("cls");

          list.add("zhanglaoshi");

          list.add("xiaohu");

          list.add("wangyang");

          request.setAttribute("list", list);

     

      %>

      <c:forEach items="${list }" var="item">

          <span>${item }<span>

      </c:forEach>

      <br/>

6.3 遍历map: foreach标签遍历map时,由于map是键值对的结构,每次遍历可以得到键和值

                       标签会将正在遍历元素的键和值封装为一个对象,如果设置了var属性,就会存到pageContext域中

                       封装的对象有两个属性: key , value

                   开发中一般不会直接遍历map,将map的值获取进行遍历

              

          了解:foreach标签在遍历开始时会创建一个状态对象,用来记录正在遍历的状态,随着遍历刷新状态值

              varStatus:  标签会将正在遍历的对象存到pageContext域中,varStatus的值会作为键  

                   状态包括:  当前遍历的元素是不是第一个、是不是最后一个、已经遍历了几个元素、当前元素的索引...

    <%

          Map map = new HashMap();

          map.put("t1", "val1");

          map.put("t2", "val2");

          map.put("t3", "val3");

          request.setAttribute("map", map);

      %>

      <c:forEach items="${requestScope.map }" var="item" varStatus="vs">

          <c:if test="${vs.first }">

              <h5 style="background-color: red;">${item.key } -->${item.value }-->索引:${vs.index }->数量:${vs.count }->是否第一个:${vs.first }->是否最后一个:${vs.last }</h5>

          </c:if>

          <c:if test="${vs.last }">

              <h5 style="background-color: green;">${item.key } -->${item.value }-->索引:${vs.index }->数量:${vs.count }->是否第一个:${vs.first }->是否最后一个:${vs.last }</h5>

          </c:if>

      </c:forEach>

<!--总结:主要的作用

          c:out

          c:set

          c:remove

          c:if

          c:choose-c:when-c:otherwise  重点

          c:forEach   重点

          c:redirect

       -->

       <!-- 重定向的路径由浏览器解析

          重定向标签由jsp引擎翻译,绝对路径由服务器先解析,会自动在地址前追加项目名

          jsp所有的技术中[inclue/转发动作标签/重定向标签/动态包含标签]  如果使用了绝对路径都是由服务器解析

       -->

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

函数标签库:function

              处理字符串的

              必须在EL内使用

              在el中调用方法处理字符串后,el会将结果输出到页面中显示

      -->

      ${fn:replace("jintiantianqizhenhao" , "tian" ,"WAN") }

猜你喜欢

转载自blog.csdn.net/yuanmomoya/article/details/82527362