• EL


      什么是EL

    JSP2.0要把html和css分离、要把html和javascript分离、要把Java代码块替换成标签。标签的好处是非Java人员都可以使用。

    JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>

    EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。

    EL表达式的格式:${…},例如:${1+2}。

    在使用EL表达式时,要求page指令的isELIgnored属性为false。这样JSP在编译成.java时,才不会忽略EL表达式。

    如果你希望某个EL表达式被JSP编译器忽略,那么可以在EL表达式之前添加“”,例如:${1+2}。

    EL运算符

    (数学和逻辑|&!)

        .运算符:调用.之前的getter方法.只要有get方法,  . 就能调

       []运算符:.能做的,它都能做;  .不能做的,它也能做.                

        empty运算符:判断一个对象是否是null或者"",如果是,返回true;

    如果对象是一个集合,即使对象本身不是null,没有元素也返回true.

     1  <body>
     2 
     3     <%  pageContext.setAttribute("p", null);   %>
     4 
     5     <!-- empty判断是否为空,为空打印true -->
     6 
     7     ${empty p }<br/>
     8 
     9     <%
    10 
    11     List list = new ArrayList();
    12 
    13     list.add("p");
    14 
    15     pageContext.setAttribute("list", list);
    16 
    17      %>
    18 
    19     ${empty list }<hr/>   
    20 
    21     ${empty cart }<br/>
    22 
    23      <!-- empty进行 3元运算 -->
    24 
    25     ${1!=1?"等于":"不等于" }<br/>
    26 
    27     ${empty list?"您没有购买任何商品":"您买了以下商品" }<br/>
    28 
    29     <%
    30 
    31     session.setAttribute("user", new Person("向阳"));
    32 
    33      %>
    34 
    35      ${empty user?"您没有登录":"欢迎访问" }
    36 
    37     <%
    38 
    39     pageContext.setAttribute("gender", "0");
    40 
    41      %>
    42 
    43     <input type="radio" name="gender" value="1" ${gender=='1'?'checked="checked"':''}/>44 
    45     <input type="radio" name="gender" value="1" ${gender=='0'?'checked="checked"':''}/>46 
    47     </body>

    运算符

    说明

    范例

    结果

    +

    ${17+5}

    22

    -

    ${17-5}

    12

    *

    ${17*5}

    85

    /或div

    ${17/5}或${17 div 5}

    3

    %或mod

    取余

    ${17%5}或${17 mod 5}

    2

    ==或eq

    等于

    ${5==5}或${5 eq 5}

    true

    !=或ne

    不等于

    ${5!=5}或${5 ne 5}

    false

    <或lt

    小于

    ${3<5}或${3 lt 5}

    true

    >或gt

    大于

    ${3>5}或${3 gt 5}

    false

    <=或le

    小于等于

    ${3<=5}或${3 le 5}

    true

    >=或ge

    大于等于

    ${3>=5}或${3 ge 5}

    false

    &&或and

    并且

    ${true&&false}或${true and false}

    false

    !或not

    ${!true}或${not true}

    false

    ||或or

    或者

    ${true||false}或${true or false}

    true

    empty

    是否为空

    ${empty “”},可以判断字符串、数据、集合的长度是否为0,为0返回true。empty还可以与not或!一起使用。${not empty “”}

    true

    EL操作操作对象的方式

    l  操作List和数组:${list[0]}、${arr[0]};

    l  操作bean的属性:${person.name}、${person[‘name’]},对应person.getName()方法;

    l  操作Map的值:${map.key}、${map[‘key’]},对应map.get(key)。

            List:按照索引取

            Map:按照key取绑定的对象。

      <!-- 获取Map中的数据 -->
    
        <%
    
        Map<String,Person> map = new HashMap<String,Person>();
    
        map.put("p1", new Person("刘艳伟"));
    
        map.put("p2", new Person("宋旭东"));
    
        map.put("p3", new Person("李梅"));
    
        pageContext.setAttribute("mm", map);
    
        %>
    
        <!-- 获取map中的数据,先获取键,再name -->
    
        ${mm.p3.name }<hr/>


    注意: *在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点                     与使用request.getParameter()方法是不同的。

          * *${EL表达式}, ${pp.address.city} == ${pp['address']["city"]} 当参数名中间有-号非法字符时,应用[]来取,否则应为有-而报错

    EL隐藏对象

        请不要与JSP内置对象混淆,一个是表示对象本身,其余表示的都是Map

            ---------------------------------------------------------------------------------------------------

            EL内置对象名称                         表示的类型                                           

            pageContext                                                          javax.servlet.jsp.PageContext       

            pageScope                                                             java.util.Map                    

            requestScope                                                        java.util.Map                     

            sessionScope                                                        java.util.Map                     

            applicationScope                                                   java.util.Map                     

            param                                                                     java.util.Map              

            paramValues                                                java.util.Map              

            header                                                                     java.util.Map              

            headerValues                                                       java.util.Map               

            cookie                                         java.util.Map      

           initParam                                     java.util.Map                       

    1        参数隐藏对象

    这些隐藏对象都是Map类型!

    l  param:param是Map<String,String>类型!param对象可以用来获取参数,与request.getParameter()方法相同。

                           

    注意,在使用EL获取参数时,如果参数不存在,返回的是空字符串,而不是null。这一点与使用request.getParameter()方法是不同的。

     

    l  paramValues:paramValues是Map<String, String[]>类型,当一个参数名,对应多个参数值时可以使用它。

     

    l  header:header是Map<String,String>类型,用来获取请求头。

     

    l  headerValues:headerValues是Map<String,String[]>类型。当一个请求头名称,对应多个值时,使用该对象,这里就不在赘述。

    l  initParam:initParam是Map<String,String>类型。它对应web.xml文件中的<context-param>参数。

     

    l  cookie:cookie是Map<String,Cookie>类型,其中key是Cookie的名字,而值是Cookie对象本身。

     

    2        域隐藏对象

    使用EL表达式最为常用的就是获取域对象中保存的数据。例如:${pageScope.xxx},表示获取在pageContext保存的数据。当然${pageScope[‘xxx’]}是相同的!

    l  pageScope:pageScope是Map<String,Object>类型,${pageScope.xxx}的功能相等与pageContext.getAttribute(“xxx”)。两者的区别在于,前者在数据不存在时返回空字符串,而后者返回null。

    l  requestScope:requestScope是Map<String, Object>类型,装载了request对象中的所有数据;

    l  sessionScope:sessionScope是Map<String, Object>类型,装载了session对象中的所有数据;

    l  applicationScope:applicationScope是Map<String, Object>类型,装载了application对象中的所有数据;

    当EL中给出的不是隐藏对象时,表示在四个域中查找数据。例如:${a},表示

    l  在${pageScope.a}中查找,如果找到就返回;

    l  在${requestScope}中查找,如果找到就返回;

    l  在${sessionScope}中查找,如果找到就返回;

    l  在${applicationScope}中查找,如果找到就返回,找不到就返回空字符串。

    3 页面上下文隐藏对象

    l  pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest,可以${pageContext.request}。

    Expression

    说明

    ${pageContext.request.queryString}

    pageContext.getRequest().getQueryString();

    ${pageContext.request.requestURL}

    pageContext.getRequest().getRequestURL();

    ${pageContext.request.contextPath}

    pageContext.getRequest().getContextPath();

    ${pageContext.request.method}

    pageContext.getRequest().getMethod();

    ${pageContext.request.protocol}

    pageContext.getRequest().getProtocol();

    ${pageContext.request.remoteUser}

    pageContext.getRequest().getRemoteUser();

    ${pageContext.request.remoteAddr}

    pageContext.getRequest().getRemoteAddr();

    ${pageContext.session.new}

    pageContext.getSession().isNew();

    ${pageContext.session.id}

    pageContext.getSession().getId();

    ${pageContext.servletContext.serverInfo}

    pageContext.getServletContext().getServerInfo();

    JSTL(core和fn)

    JSTL概述

    1 什么是JSTL

    JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!

    既然是第三方的东西,那么就需要导包。但是如果你使用的是MyEclipse,那么MyEclipse会帮你导包的。

    2 JSTL标签库结构

    3 导入标签库

    导入标签库需要使用taglib指令!

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

    JSTL核心库

    1 out和set(重点)

     out

    <c:out value=”aaa”/>

    输出aaa字符串常量

    <c:out value=”${aaa}”/>

    与${aaa}相同

    <c:out value=”${aaa}” default=”xxx”/>

    当${aaa}不存在时,输出xxx字符串

    <%

    request.setAttribute("a","<script>alert('hello');</script>");

    %>

    <c:out value="${a }"   default="xxx" escapeXml="false" />

    当escapeXml为false,不会转换“<”、“>”。这可能会受到JavaScript攻击。

    set:set标签的var、value、scope是一组,而target、property、value是一组。

    <c:set var=”a” value=”hello”/>

    在pageContext中添加name为a,value为hello的数据。

    <c:set var=”a” value=”hello” scope=”session”/>

    在session中添加name为a,value为hello的数据。

    <jsp:useBean   id="user" class="cn.itcast.domain.User"/>

    <c:set target="${user   }" property="username" value="qdmmy6"/>

    <c:set target="${user   }" property="password" value="123456"/>

    <c:out value="${user }"   />

    给user的username属性赋值qdmmy6,给user的password属性赋值123456。

    2 remov

           <%

                  pageContext.setAttribute("a",   "pageContext");

                  request.setAttribute("a",   "session");

                  session.setAttribute("a",   "session");

                  application.setAttribute("a",   "application");

           %>

           <c:remove   var="a"/>

           <c:out   value="${a }" default="none"/>

    删除所有域中name为a的数据!

    <c:remove var="a" scope=”page”/>

    删除pageContext中name为a的数据!

    3 url

      url标签会在需要URL重写时添加sessionId。

    <c:url value="/"/>

    输出上下文路径:/day08_01/

    <c:url value="/"   var="a" scope="request"/>

    把本该输出的结果赋给变量a。范围为request

    4 if和choose(重点)

      if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行。

    <c:set var="a"   value="hello"/>

    <c:if test="${not empty a }">

        <c:out value="${a }"/>

    </c:if>

    choose标签对应Java中的if/else if/else结构

    when标签的test为true时,会执行这个when的内容。

    当所有when标签的test都为false时,才会执行otherwise标签的内容

    <c:set var="score"   value="${param.score }"/>

    <c:choose>

        <c:when test="${score > 100   || score < 0}">错误的分数:${score }</c:when>

        <c:when test="${score >= 90   }">A级</c:when>

        <c:when test="${score >= 80   }">B级</c:when>

        <c:when test="${score >= 70   }">C级</c:when>

        <c:when test="${score >= 60   }">D级</c:when>

        <c:otherwise>E级</c:otherwise>

    </c:choose>

    5 forEach(重点)

      forEach当前就是循环标签了,下面例子中设置域变量i,初始值为1,结束值为100。即i的值从1遍历到100,包含100。

    <c:set var="sum" value="0" />
    <c:forEach var="i" begin="1" end="10">
        <c:set var="sum" value="${sum + i}" />
    </c:forEach>
    
    <c:out value="sum = ${sum }"/>
    <c:set var="sum" value="0" />
    <c:forEach var="i" begin="1" end="10" step ="2">
        <c:set var="sum" value="${sum + i}" />
    </c:forEach>
    <c:out value="sum = ${sum }"/>

          还可以使用forEach来遍历数据或集合,遍历数组:

    <%

    String[] names =   {"zhangSan", "liSi", "wangWu", "zhaoLiu"};

    pageContext.setAttribute("ns", names);

    %>

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

        <c:out value="name: ${item }"/><br/>

    </c:forEach>

    遍历List

    <%

        List<String> names = new   ArrayList<String>();

        names.add("zhangSan");

        names.add("liSi");

        names.add("wangWu");

        names.add("zhaoLiu");

        pageContext.setAttribute("ns", names);

    %>

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

        <c:out value="name: ${item }"/><br/>

    </c:forEach>

    遍历Map

    <%

        Map<String,String> stu = new   LinkedHashMap<String,String>();

        stu.put("number", "N_1001");

        stu.put("name", "zhangSan");

        stu.put("age", "23");

        stu.put("sex", "male");

        pageContext.setAttribute("stu", stu);

    %>

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

        <c:out value="${item.key }: ${item.value } "/><br/>

    </c:forEach>

    forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了。

    l  count:int类型,当前以遍历元素的个数;

    l  index:int类型,当前元素的下标;

    l  first:boolean类型,是否为第一个元素;

    l  last:boolean类型,是否为最后一个元素;

    l  current:Object类型,表示当前项目。

    <c:forEach var="item"   items="${ns }" varStatus="vs"> <!-- varStatus 把循环状态赋给vs -->

        <c:if test="${vs.first }">第一行:</c:if>  <!--如果是第一行,那么${vs.first}为true --> 

        <c:if test="${vs.last }">最后一行:</c:if> 

        <c:out value="${vs.count }: "/>  <!-- 返回行数,从1开始-->

        <c:out value="[${vs.index } ]: "/>    <!-- 返回行数,从0开始-->

        <c:out value="name: ${vs.current } "/><br/>  <!--当前项,与${item}相同 -->

    </c:forEach>

  • 相关阅读:
    SQL学习
    FOR XML PATH
    IOS学习网址
    weak nonatomic strong等介绍(ios)
    UVALive3045 POJ2000 ZOJ2345 Gold Coins
    UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers
    UVA713 UVALive5539 POJ1504 ZOJ2001 Adding Reversed Numbers
    UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves【BFS】
    UVA439 POJ2243 HDU1372 ZOJ1091 Knight Moves【BFS】
    UVA10905 Children's Game
  • 原文地址:https://www.cnblogs.com/lulu638/p/4257552.html
Copyright © 2020-2023  润新知