EL表达式-JSTL标签库

EL语言:
    四大作用域对象的别名:
       EL别名                                   JSP
    requestScope                 request
    sessionScope                 session
    applicationScope             application
    pageScope                    page(当前JSP),不是当前作用域pageContext

EL语言的公式:
${作用域别名.关键字}:
    tomcat编辑jsp页面时,根据el表达式,调用响应的java代码,从指定作用域中,读取与当前关键字对应的内容,
    并将这个内容进行响应的数据类型转换,并输出到jsp页面上
${关键字}:
        按以下顺序寻找
        1.pageContext寻找对应的关键字
        2.request寻找对应的关键字
        3.session寻找对应的关键字
        4.application寻找对应的关键字
        5.null
从作用域获得自定义数据类型对象:
        ${作用域别名.关键字.属性名}
        ${作用域别名.关键字["属性名"]}

关系运算符号:
        EL表达式             Java语言
           eq                          ==
           lt                             <
           gt                            >
           le                           <=
           ge                          >=

通过EL中包含的内置对象,通知tomcat调用当前JSP页面中九大内置对象。
    1.param:通知tomcat获得request作用域中的请求参数
        Java:<%=request.getParameter("请求参数名")%>
        EL:${param.请求参数名}

    2. pageContext------->JSP中的pageContext
        <!-- 获得当前工程在服务器端的请求路径 -->
        <%=request.getContextPath()%>
        ${pageContext.request.contextPath}


JSTL:jsp strand tag lib [jsp 标准标签库]
    JSTL分类:1. 核心标签库------------------core
                       2. 数据格式转换标签库
                       3. 数据库操作标签库
                       4. xml数据操作标签库

    1.导入核心标签库配置文件(.tld)
        <%@ taglib uri="标签库配置文件"  prefix="标签的前缀名"%>
        <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    2.<c:set>:负责向四大作用域的数据设置和修改
      <c:set scope="作用域名称" var="关键字" value="值"/>
      eg:<c:set scope="session" var="age" value="19"></c:set>
      
      <c:out>:从四大作用域,读取数据
      <c:out value="EL表达式">
      eg:<c:out value="${sessionScope.age}"></c:out>

      <c:remove>:从四大作用域中,移除数据
      作用域.removeAttribute(key)
      <c:remove scope="作用域" var="关键字">
      eg:<c:remove scope="session" var="age"/>

      <c:catch>:负责进行异常扑捉.
      <c:catch var="关键字">
        <% int a = 5/0;%>
      </c:catch>
      异常产生时,catch标签将异常信息与关键字关联,形成一个键值对:关键字-------java.lang.NullPointerExceptino
      catch标签,将键值对保存到当前页作用域中。
      EL从当前页作用域中,读取异常信息:${pageScope.关键字}

      <c:if>:用于进行if判断,相当于if(){}
      根据EL表达式的判断结果,决定是否运行<if>内部的内容
      <c:if test="EL表达式">
        内容
      </c:if>

      <c:choose>-------------------------------多分支选择结果
      <c:when test="EL表达式">内容</c:when>----if
      <c:when test="EL表达式">内容</c:when>----if
      <c:otherwise>----------------------------else
          内容
      </c:choose> 

      <c:forEach>:循环操作:
        1.指定循环次数,进行循环
               <c:forEach var="循环变量名称" begin="循环变量初始值" end="循环次数" step="每次循环后,循环变量自增的值">
               eg:<c:forEach var="num" begin="1" end="5" step="1" >------从1开始循环五次每次自增1
                   **** 循环变量,被forEach标签保存到当前页作用域中
                   ${pageScope.循环变量名称}
               </c:forEach>
        2.循环遍历集合(*******)
               List: 
               <c:forEach items="EL表达式获得集合对象(List)" var="关键字1" varStatus="关键字2">
                   ${关键字1.属性}
                   varStatus="关键字2":包含循环基本信息,比如本次循环是第几次循环
                   ${关键字2.count}: 当前循环次数
               </c:forEach>

               Map{key:value;key1:value1} 
               <c:forEach items="EL表达式获得集合对象(Map)" var="关键字">
                   var="关键字":指向的map中一个键值对
                   读取当前键值对中关键字:${关键字.key}
                   读取当前键值对中value:${关键字.value}
               </c:forEach>


自定义标签开发:
    一个JSTL标签,就是一个java类
    1.开发一个标签实现类需要继承javax.servlet.jsp.tagext.TagSupport
        public class TextTag extends TagSupport {
            @Override
            /**
            * 当tomcat调用一个标签类时,一定要调用标签类中doStartTag()
            */
            public int doStartTag() throws JspException {
                /**  
                *  TagSupport提供pageContext属性,
                *  这个属性的赋值,是由tomcat负责赋值。
                *  pageContext指向当前标签类所在的jsp文件中的pageContext
                */
                JspWriter out= super.pageContext.getOut();
                try {
                    out.print("<input type='text' value='自定义文本框'/>");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return super.doStartTag();
            }
        }
        public class SelectTag extends TagSupport {
            private String num; // 接收用户输入的option的个数
            public String getNum() {
                return num;
            }
            public void setNum(String num) {
                this.num = num;
            }
            @Override
            public int doStartTag() throws JspException {
                JspWriter out=    super.pageContext.getOut();
                try{
                    out.print("<select>");
                    for(int i=1;i<=Integer.valueOf(num);i++){
                        out.print("<option >");
                        out.print(i);
                        out.print("</option>");
                    }
                    out.print("</select>");
                }catch(Exception ex){}
                return super.doStartTag();
            }
        }

    2.开发一个标签库配置文件 (xxx.tld)
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
                                "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
        <taglib>
            <tlib-version>1.0</tlib-version>
            <jsp-version>2.0</jsp-version>
            <short-name>自定义名称</short-name>
            <uri>静态资源路径/http://com.bjpowernode/669/tag</uri>

            <!-- 配置标签类的别名,用于在JSP页面使用 -->
            <tag>
                <name>textTag</name>
                <tag-class>com.bjpowernode.tag.TextTag</tag-class>
            </tag>

            <tag>
                <name>selectTag</name>
                <tag-class>com.bjpowernode.tag.SelectTag</tag-class>
                <!-- 配置当前标签类,在jsp中使用属性 -->
                <attribute>
                    <name>num</name>
                    <required>true</required>
                </attribute>
            </tag>
        </taglib>
    3.在JSP中应用
        <%@ taglib uri="http://com.bjpowernode/669/tag" prefix="yz"%>
        <html>
            <yz:textTag></yz:textTag><br/>
            <yz:selectTag num="5"></yz:selectTag>
        </html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章