el表达式,JSTL标签库

3 篇文章 0 订阅
0 篇文章 0 订阅

1.el表达式
   表达式语言(Expression Language,简称EL)

 EL主要作用:
      获取数据:
      EL表达式主要用于替换JSP页面中的脚本表达式,检索request、session等web域对象中的数据,访问javabean的属性、list         集合、map集合、数组等。
    执行运算:
    利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
    获取web开发常用对象
    EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
    调用Java方法
    EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法
    
     <% session.setAttribute("user", new Object()); %> 
         ${"hello" }
         ${2*2 }
         <br>
         <% session.getAttribute("user"); %>等价于
         ${sessionScope.user }
         
         //需求
        <!--  主页 ---
         登录成功后--欢迎XX,退出
         未登录---登录  注册 -->
         
        <c:if test="${ not empty sessionScope.user}">
            欢迎XX<a href="logOut.jsp">退出</a>
        </c:if> 

         <c:if test="${empty sessionScope.user}">
            <a href="login.jsp">登录</a>
            <a href="register.jsp">注册</a>
        </c:if> 
        
    (2)Param :表示一个保存了所有请求参数的Map对象  ${map[key]}  ${map.key}  等价于 request.getParameter(String name)
        paramValues  :表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
          ${map[key][index]}  ${map.key[index]}
        等价于 request.getParameterValus(String name)  
        //例子
         <%="用户名"+request.getParameter("username") %>
         <%="密码"+request.getParameter("psw") %> 
          等价于:
         用户名:${param["username"] }
               ${param.username }
         用户名:${paramValues["username"][0] }
        <br/> 
         密码:${param["psw"] }    ${param.psw }
         密码:${paramValues["psw"][0] }  ${paramValues.psw[0] }
         
    (3)运算
        ${10>9&&100<200 }
        ${10>9 and 100<200 }
        ${10 gt 9 and 100 lt 200 } 

        ${"hello" =="wolo" }
        ${"hello" eq "wolo" } 

        ${"hello"!=null }
        ${ not empty "hello" }    
    (4)获取作用域中的信息
          ${sessionScope.user } 等价于<% session.getAttribute("user"); %>
          ${requestScope.user } 等价于<% request.getAttribute("user"); %>
          ${pageScope.user } 等价于<% pageContext.getAttribute("user"); %>
          ${applicationScope.user } 等价于<% application.getAttribute("user"); %>
          可以省略域名XXXScope
          
    (5)获取内置对象的信息
         <%=request.getRemoteAddr() %>等价于
        ${pageContext.request.remoteAddr }

        <%=request.getHeader("Host") %>等价于
        ${header.host } ,${header["host"] }

        <%=session.getId() %>等价于
        ${pageContext.session.id }

        <%
        //设置cookie
        Cookie c1=new Cookie("uname","tom");
        Cookie c2=new Cookie("psw","123");
        c1.setMaxAge(60);
        c2.setMaxAge(60);
        response.addCookie(c1);
        response.addCookie(c2);
        %>

        <% 
        //获取
         Cookie[] cooks= request.getCookies();
          for(Cookie cook: cooks){
              out.print("属性名:"+cook.getName());
              out.print("属性值:"+cook.getValue());
          }
        %>
        等价于
        //el表达式获取cookie
        ${cookie.JSESSIONID.value }  ${cookie["JSESSIONID"].value }
        ${cookie.uname.value }  ${cookie.psw.value }
        
    //练习:注册页面,请求参数获取
     <form action="" >
            用户名<input type="text" name="username"  >
            密码<input type="text" name="psw" >
            性别<input type="radio" name="sex" value="男">男
            <input type="radio" name="sex" value="女">女
            爱好 <input type="checkbox" name="hobby" value="swim">游泳
             <input type="checkbox" name="hobby" value="read">看书
              <input type="checkbox" name="hobby" value="song">唱歌
               <input type="checkbox" name="hobby" value="travel">旅游
            <input type="submit" value="注册">
        </form>
        <table border="1">
          <tr><td>用户名</td>
               <td>${param.username }</td>
          </tr>
            <tr><td>密码</td>
               <td>${param.psw }</td>
          </tr>
           <tr><td>性别</td>
               <td>${param.sex }</td>
          </tr>
             <tr><td>爱好</td>
               <td>
               <c:forEach items="${paramValues.hobby}" var="str">
                    ${str }
               </c:forEach>
               </td>
          </tr>
        </table>
2.JSTL标签库
    1)导包,webContent下 wib-INF下的lib中,add to build path
        jstl.jar
        standard.jar    
    2)在jsp引入标签库 
       <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>    
    
    core核心库中
      (1)通用标签
          <c:out>    输出  out.print()   <%=  %>
          <c:set>   设置各种范围域的属性  setAttribute(String name,object value)
          <c:remove> 删除各种范围域的属性  removeAttribute(String name)
          <c:catch>  异常处理
          
          <c:set> 中scope="{page|request|session|application}"
        //例子
        <% session.setAttribute("userName", "张三"); %> 等价于
        <c:set  var="userName" value="张三" scope="session"></c:set>

         您好!<c:out value="${userName}" default="游客"/>
         
         <c:remove var="userName" scope="session" />
         
        //例子二:     
        <jsp:useBean id="user" class="com.edu.User" ></jsp:useBean>"
        <c:set property="name"  value="李四"  target="${user }"></c:set> 

        <c:out value="${user }"></c:out>
        
        
        <c:set>属性
            property:要修改的属性 javaBean的成员属性
            value:存储的值
            var:  存储的名 key  setAttribute(key,value)
            target :要修改的对象
            scope: var的作用域 page|request|session|application
            
        //c:catch使用    
        <c:catch var="errormsg">
               <%=10/1 %>
          </c:catch>
          
          <c:if test="${empty errormsg }">
               没有异常
          </c:if>
          <c:if test="${ not empty errormsg }">
               ${errormsg.message }
          </c:if>
          
    (2)判断:条件标签
       单分支 <c:if>标签
      多分支<c:choose>标签
             <c:when>标签
             <c:otherwise>标签
             
             <c:choose>
                <c:when test="${empty sessionScope.userName}">
                    欢迎您:${sessionScope.userName }
                </c:when>
                <c:otherwise>
                    欢迎您:游客
                </c:otherwise>
            </c:choose>

        
         //  60分以下 不及格  60-70 及格   70-80 良好  80-90 优秀   其他 分数不正确
             <c:set var="score" value="56" scope="request" ></c:set>
             
            <c:choose>
                <c:when test="${score<60 }"> 不及格   </c:when>
                <c:when test="${score<70 }"> 及格   </c:when>
                <c:when test="${score<80 }"> 良好   </c:when>
                <c:when test="${score<90 }"> 优秀   </c:when>
                <c:otherwise>其他 分数不正确</c:otherwise>

            </c:choose>
    (3)迭代
    <c:forEach>
        var用于指定将当前迭代到的元素保存到page域中的属性名称;
        items指定将要迭代的集合对象;
        varStatus表示当前被迭代到的对象的状态信息,包括四个属性:index(表示当前迭代成员的索引值)、count(表示当前已迭代成员的数量)、first(表示当前迭代到的成员是否为第一个)、last(表示当前迭代到的成员是否为最后一个);
        begin表示遍历的起始索引,值为整数;
        end表示遍历的结束索引,值为整数;
        step表示迭代的步长,值为整数。
    
          
        //1-100所有数
        <c:forEach begin="1" end="100" var="i">
             
        </c:forEach>
        //1-100 所有偶数
        <c:forEach begin="2" end="100" var="i" step="2">
         ${i }
         
        //遍历集合
        <%  List<String> list=new ArrayList();
            list.add(0, "hello");
            list.add(1, "world");
            list.add(2, "harbin");
            request.setAttribute("strList", list);
        %>

        <c:forEach items="${strList }" var="aa">
           ${aa }
        </c:forEach>
        
        //遍历map
        <%  Map<Integer,String> map=new HashMap();
      map.put(1,"hello");
      map.put(2,"杨慧兰");
      map.put(5,"嘻嘻嘻");
      request.setAttribute("strMap", map);
        

            <c:forEach items="${strMap }" var="aa" varStatus="mm">
                ${aa.key }:
                ${aa.value }
                索引:
                 ${mm.index }
            </c:forEach>
            
       <c:forTokens>   按照某字符分割字符串,然后遍历
     // 遍历字符串
           <c:set var="s1" value="2019-7-25" scope="request"></c:set>

            <c:forTokens items="${s1 }" delims="-" var="str">
               <div style="border:1px solid ;margin:5px"> ${str }</div>
            </c:forTokens>
            
    (3)URL相关标签

        <c:url>定义地址,并存放在域中
           <c:url var="turl" value="login.jsp"></c:url>
           <a href="${turl }">跳转到登录页</a>
         
         <c:redirect>重定向
            <c:url var="turl" value="login.jsp" ></c:url>
            <c:redirect url="${turl }"></c:redirect>
3.I18N标签库   国际化

    <%@taglib prefix="fmt" uri=" http://java.sun.com/jsp/jstl/fmt"%>
    <fmt:formatDate>
    value指定要格式化的日期或时间;
    type指定是要输出日期部分还是时间部分,或者两者都输出;
    dateStyle指定日期部分的输出格式,该属性仅在type属性取值为date或both时才有效;
    timeStyle指定时间部分的输出格式,该属性仅在type属性取值为time或both时才有效;
    pattern指定一个自定义的日期和时间输出格式;
    timeZone指定当期采用的时区;
    var指定格式化结果保存到某个范围域中某个属性的名称;
    scope指定格式化结果所保存的范围域。

    <fmt:setLocale value="zh_CN" />
    <fmt:formatDate value="<%=new Date()%>"/>
    <fmt:formatDate value="<%=new Date()%>" pattern="yyyy-MM-dd HH:mm:ss" />
    <fmt:formatDate value="<%=new Date()%>" type="both" dateStyle="full"/>
    <fmt:formatDate value="<%=new Date()%>" type="both" timeStyle="full"/>
    
4.自定义标签库(了解)
   创建"Hello"标签
    
    <ex:Hello />
    要创建自定义的JSP标签,你首先必须创建处理标签的Java类。所以,让我们创建一个HelloTag类,如下所示:

    package com.runoob;

    import javax.servlet.jsp.tagext.*;
    import javax.servlet.jsp.*;
    import java.io.*;

    public class HelloTag extends SimpleTagSupport {

      public void doTag() throws JspException, IOException {
        JspWriter out = getJspContext().getOut();
        out.println("Hello Custom Tag!");
      }
    }
    以下代码重写了doTag()方法,方法中使用了getJspContext()方法来获取当前的JspContext对象,并将"Hello Custom Tag!"传递给JspWriter对象。

    编译以上类,并将其复制到环境变量CLASSPATH目录中。最后创建如下标签库:<Tomcat安装目录>webapps\ROOT\WEB-INF\custom.tld。

    <taglib>
      <tlib-version>1.0</tlib-version>
      <jsp-version>2.0</jsp-version>
      <short-name>Example TLD</short-name>
      <tag>
        <name>Hello</name>
        <tag-class>com.runoob.HelloTag</tag-class>
        <body-content>empty</body-content>
      </tag>
    </taglib>
    接下来,我们就可以在JSP文件中使用Hello标签:

    <%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
    <html>
      <head>
        <title>A sample custom tag</title>
      </head>
      <body>
        <ex:Hello/>
      </body>
    </html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值