el和jstl

1、什么是el以及特性是什么?

     1)el:即为表达式语言。

   2)格式:${ ...}

  3)作用:用来获取jsp四大作用域对象中的属性值并显示[赋值]在jsp的节点上。它实质上就是 <%= 表达式 %> 简洁式。另外, 它还可以获取 实        体内容。同时,可以实现表达式的计算与判断。

  底层利用的反射机制:

  A)可以利用如下方式直接进行属性的访问,

  格式:对象.属性。例如有一个user对象。取里面的age属性。

  就可以表达为${user.age};  可以进行判断后自动根据真假取值:${dog.sex? ’公’:’母’}

  注意:age等书写的方式一定的第一个单词的首字母小写然后遵循驼峰型格式。

  B)获取容器中的值使用容器.key获取其中的value。

  C)从JSP的四大作用域对象中获取属性的值。

   pageContext ---->  pageScope    ${pageScope.属性名}  或  ${属性名}

      request ---->  requestScope    ${requestScope.属性名}  或  ${属性名}

      session ---->  sessionScope    ${sessionScope.属性名}  或  ${属性名}

      application ---->  applicationScope    ${applicationScope.属性名}  或  ${属性名}

    注意: 当不写 XXXScope 前缀时,而直接 ${属性名} 去获取四大作用域中的值,则会从小到大去找,找到,则结束。即作用域越小优先级越高;

  D)从JSP的请求实体中获取参数的值:

                            param ----> ${param.参数名}

        paramValues ---> ${paramValues.参数名[索引号] }  或  ${paramValues.参数名['索引号'] 

  E)EL表达式中可以进行运算。

       算术运算, 关系运算, 逻辑运算:

       关系运算  ${ "5" > 3 }得到结果为true;

       注意: 在运算前,若数据类型不一致,则会发生类型的自动转换。  如:  ${'123' + 100};

       注意: EL 表达式中不能进行字符串的连接运算。  ${"Beijing" + 2008}  //报错

  4)特有的运算符。

  A) . 和 []  ;//此处.为成员运算符;[]为偏移运算符号;

  EL为了获取实体内容。为此,提供了专门的关键字  param 或 paramValues

             例如: 早期, 获取请求时的实体内容: <%= request.getParameter("uname") %>

                   现在, 获取请求时的实体内容: ${param.uname}                         

                   早期, 获取请求时的同名不同值的实体内容中:

                        <%

                              String[] favs = request.getParameterValues("fav");

                               for(int i = 0; i < favs.length; i++ ){

                                        out.print( favs[i] + "  ");

                               }

                        %>

                        

                   现在, 获取请求时的同名不同值的实体内容中

          [其中第一个参数是]: ${paramValues.fav[0] }

                   [第二个参数是: ]  ${paramValues.fav['1'] }

     b) empty  判断运算符

   当属性值为空值,EL中如何判断?

     案例如下:    

             <%

                       //String name = null;

                       String name = "";

                       request.setAttribute("name", name);

                      

                       Map<String,Integer> dogs = new HashMap<String,Integer>();

                       session.setAttribute("dogs", dogs);

                      

                       Set<String> cats = new TreeSet<String>();

                       List<String> cars = new LinkedList<String>();

                       pageContext.setAttribute("cats", cats);

                       pageContext.setAttribute("cars", cars);

             %>

             在EL表达式中,对属性值进行空值判断

             例如: 对request对象的name属性值进行判断,其结果为:   ${ empty requestScope.name}

             例如: 对session对象的dogs属性值进行判断,其结果为:   ${ empty sessionScope.dogs } ----- ${empty dogs }        

             例如: 对pageContext对象的cats属性值进行判断,其结果为:   ${ empty cats } 

             例如: 对pageContext对象的cars属性值进行判断,其结果为:   ${ empty cars } 

             特别注意:  EL表达式中的变量必须是 四大作用域的属性或请求实体中的参数。

2 、 什么是JSTL? ----jsp standard  tag lib;

    它是 JSP 的标准标签库。

      它主要是将 java的流程控制语句简化或优化成一个 JSP页面上可直接使用的标签。

        

3、JSTL的基本格式?

         格式:

          <c:标签>

                输出的信息

          </c:标签>

注意: 在使用 JSTL标签之前,必须在JSP页面使用 taglib 指令将用到的标签库导入过来。

4、导入标签库的taglib指令,其使用方式如下:

         <%@ taglib prefix="前缀" uri="标签库的地址及库名" %> 。。。//一般前缀使用字母c。

        

5、常用的标签库及其标签?

         a) http://java.sun.com/jstl/core_rt 核心标签库  

---> [ <c:if> | <c:choose><c:when><c:otherwise> | <c:forEach> ]

     另外了解: <c:url> | <c:param> | <c:import> | <c:redirect> 

     而 请求转发:<jsp:forward page=” xxx.jsp”> </jsp:forward> 形式称之为JSP的页面元素或页面标签,它是JSP内置的。

     重定向<c:redirect url=”xxx.jsp ”></c:redirect>

     b) http://java.sun.com/jstl/fmt_rt  格式化标签 --->[ <fmt:formatDate> | <fmt:formatNumber> ] 

6、<c:if> 标签的应用

       a) 形式一

                   <c:if test="${条件表达式}" var="存放结果的变量">

                       结果表现体

                  </c:if>      

            

    b) 形式二

             <c:if test="${条件表达式 }" var="存放结果的变量" scope="作用域对象">

                       结果表现体

             </c:if>

            

 注意: 在JSP的 jstl标签库中 <c:if>只是单向的,没有双向的。 那问: 如何实现双向的if语句功能?

例如:

<c:if test=”${dog.sex==true}”> 公</c:if>

<c:if test=”${dog.sex==false}”> 母</c:if>

7、<c:choose><c:when><c:otherwise> 标签的应用

        

         <c:choose>

             <c:when test="${条件表达式}"> 结果表现体  </c:when>

             <c:when test="${条件表达式}"> 结果表现体  </c:when>

             ......

             <c:otherwise> 结果表现体  </c:otherwise>

    </c:choose>

   

8、<c:forEach>标签的应用形式

         a) 形式一 

             <c:forEach begin="起始值" end="终止值" var="存放每次循环的结果变量">

                       ${表示式 }

             </c:forEach>

            

            注意: 它相当于java中的标准for循环语句  for(int i=1; i<=10; i++) { ... }

           

         b) 形式二

                    <c:forEach begin="起始值" end="终止值" var="存放每次循环的结果变量" step="增量" >

                       ${表示式 }

             </c:forEach>            

            

            注意: 它相当于java中的标准for循环语句  for(int i=1; i<=10; i+=增量) { ... }

           

         c) 形式三

                   <c:forEach items="${容器}" var="存放每次循环的值" varStatus="状态变量">

                        结果表现体

               </c:forEach> 

              

         注意: 状态变量中有一个  index 属性,表示每种状态的索引号。

    

        注意: 这种形式最常用。

        例如: 若有 List<Person>  ps = new ArrayList<Person>();

                        则对 List 的 ps 容器进行遍历如下:<br/>

                        <c:forEach items="${ps}" var="person" varStatus="id">

                                  ${id.index + 1} ---- ${person.name} --- ${person.sex ? "男":"女" } --- ${person.age }  <br/>

                        </c:forEach> 

                       

9、<fmt:formatDate> 和 <fmt:formatNumber>格式化标签的应用

         一、日期的格式化:

            1) 固有格式:

                 <fmt:formatDate value="${d1 }" type="date" dateStyle="short"/> <br/>

                 其中 type="date" 时, 有: dateStyle="short"/"long"/"full"

            2) 自定义格式

                        <fmt:formatDate value="${d1 }" pattern="yyyy-MM-dd"/> <br/>

                        <fmt:formatDate value="${d1 }" pattern="||^_^yyyy年MM月dd日^_^||"/> <br/>

         

     二、时间的格式化:

            1) 固有格式:

                  <fmt:formatDate value="${d1 }" type="time" dateStyle="short"/> <br/>

                 其中 type="time" 时, 有: dateStyle="short"/"long"/"full"

            2) 自定义格式:

                   <fmt:formatDate value="${d1 }" pattern="HH:mm:ss"/> <br/>

                   <fmt:formatDate value="${d1 }" pattern="北京时间>>>HH时mm分ss秒"/> <br/>

         

     三、格式化数值型数据

             <fmt:formatNumber value="${data }" pattern="########.##" /> <br/>

             <fmt:formatNumber value="${data }" pattern="##,###,###.##" /> <br/>

             <fmt:formatNumber value="${data }" pattern="##,###,###" /> <br/>

             <fmt:formatNumber value="${data }" pattern="##,###,###.0" /> <br/>

             <fmt:formatNumber value="${data }" pattern="00,000,000.0" /> <br/>

             <fmt:formatNumber value="${data }" pattern="$00,000,000.0" /> <br/>

             <fmt:formatNumber value="${data }" pattern="¥00,000,000.0" />

10.Jsp的EL与JSTL对两种容器进行操作:

         1)存放对象(javaBean)的容器

                   在<c:forEach>中可以直接通过EL访问属性

                   Obj.getXXX()--->${obj.属性}

   2)存放Map容器的List容器

                   在<c:forEach>中可以直接通过EL去访问属性;

                   Map.get(key)------>${map.key}

                                    

  

猜你喜欢

转载自www.cnblogs.com/xishaohui/p/8926655.html