zoukankan      html  css  js  c++  java
  • EL表达式和标签

    1、什么是EL
    expression language 表达式语言

    特点:
    语言简单,使用方便 。${表达式}。
    提供自动类型转换的功能
    如果返回结果为null时
    String -- ””
    Number -- 0
    Character -- (char)0
    Boolean -- false

    <%
    String count = request.getParameter("count");
    if (count != null) {
    out.println(Integer.valueOf(count) + 20);
    }
    %>

    从查询字符串获取参数值,是String类型,如果是做算术运算,则必须开发者完成类型转换,再进行算术运算

    ${param.count + 20 }
    1)从request获取查询字符串的值
    2)自动类型转换
    3)完成算术运算

    param.count表示从request中获取查询字符串或从表单中获取表单数据,
    parameValues表示多选框或多选下拉菜单中获取值
    如果没有指定该参数名称,则获取到null, 且输出的时候为空字符串
    如果获取到null,则做算术运算自动转化为0

    用来处理来源于page,request, session, application中的一些attribute,查询字符串,表单数据

    EL表达式的.运算符,是指attribute中的key值所指定的对象的属性的引用
    如:
    request.setAttribute("user", userBean);
    ${user.id } => ${requestScope.user.id }
    ${user.name } => ${requestScope.user.name }

    ${sessionScope.users[0].id }表示输出session对象中的users数组的第0个user对象的id属性

    pageScope(pageScope里的attribute是来源于pageContext对象)
    requestScope
    sessionScope
    applicationScope

    如果没有指定来源于哪个作用域,则EL表达式语言从pageScope->requestScope->sessionScope->applicationScope依次
    查找是否存在该指定的attribute

    可以明确地指定EL表达式从哪个作用范围获取数据

    2、el表达式中常用的符号
    && (and) 
    || (or)
    ! (not)
    == eq (equal)
    != ne (not equal)
    >= ge (greater and equal)
    <= le (lower and equal)
    > gt (greater than)
    < lt (lower than)
    / div (divide)
    % (mod)
    判断是否为空 empty

    3、JSTL标准标签库
    JavaServer Pages Standard Tag Library

    1)STL由JCP(java community process)制定的标准规范,它主要提供给JavaWeb开发人员一个标准通用的标签函数库。

    2)Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入java程序(Scritping)的做法,
    以提高程序的阅读性、维护性和方便性

    功能如下:
    基本输入输出、流程控制、循环、XML文件解析、数据库查询及国际化应用等

    主要包含5类标签:
    1)核心标签库
    2)I18N标签库(国际化标签库)
    3)SQL标签库
    4)XML标签库
    5)函数标签库

    4、如何使用JSTL标准标签
    1)下载jstl-1.2.jar库文件
    2)在自己的应用中的WEB-INF目录的lib目录下存放下载好的jar文件
    3)在需要使用标签库的jsp中用<%@ taglib %>指定声明使用的标签库

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> jstl的核心标签库
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> jstl的格式化标签库
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> jstl的数据库标签库
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> jstl的函数标签库
    <%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> jstl的xml文件标签库


    uri:统一资源标识符 通过一个uri地址找到相应的标签

    每一个标准标签库都有相对应的tld描述文件(jstl-1.2.jar包的META-INF),在描述文件中指定了其uri和short-name

    5、核心标签库
    1)表达式操作

    <c:out value=""></c:out>  // 输出value属性指定的值
    <c:set target="<%=user%>" property="name" value="value" />  //表示给页面中的user对象设置name属性的值 为value
    <c:set var="name" value="value" scope="page|request|session|application"/>  //表示给pageContext, request, session, application对象中添加一个名称为name的attribute,值为value
    <c:remove var="name" scope="page|request|session|application" />  //表示从四个对象中移除名字为name的属性
    <c:catch var="name">   //异常代码
    </c:catch>  //表示捕捉到的异常信息放在pageContext的name所指定的attribute,可以使用${pageScope.name }输出该异常信息

    2)流程控制
    <c:if test="${'abc' eq 'abc' }" var="result" scope="request">
    "abc".equals("abc");
    </c:if>
    表示对test内的表达式进行判断,所判断的结果放在scope指定的对象中的attribute中,该attribute的名字由var指定
    <c:out value="${requestScope.result }" />

    <c:choose>
    <c:when test="${12 > 15 }">
    12 &gt; 15
    </c:when>
    <c:when test="${12 < 10 }">
    12 &gt; 10;
    </c:when>
    <c:otherwise>
    other
    </c:otherwise>
    </c:choose>
    表示条件分支判断类似于if() else if() else if() else

    3)迭代操作
    <c:forEach var="u" items="<%=users %>" begin="0" end="5" varStatus="s" step="1">
    id: ${u.id }
    name: ${u.name }<br />
    </c:forEach>
    items是数组或列表等可以有循环操作的对象
    var每次循环所接收的对象
    begin从哪个索引开始循环,默认为0开始
    end到哪个索引结束(如果大于最大索引,也不会报错)
    varStatus表示一个对象来接收index属性,s.index可以输出循环的序号
    step表示步长,增量表达式部分如何递增

    <c:forTokens items="<%=str %>" delims="," var="s">
    <c:out value="${s }"/>
    <br />
    </c:forTokens>
    表示对items指定的字符串根据delims进行分割

    4)URL操作
    <c:import url="index.jsp"></c:import>
    导入url指定的页面

    <c:url value="/index.jsp"/>
    获取由value指定的页面的包括contextPath的完整路径
    String path = request.getContextPath();
    <%=path %>/index.jsp

    6、自定义标签
    public int doStartTag():
    在JSP引擎处理开始标签 (例如:<jsp:usebean> )时,将自动调用该方法。
    如该方法返回SKIP_BODY,则JSP引擎将不再处理标记体内容
    如果返回EVAL_BODY_INCLUDE,则将处理标记体内容

    public int doEndTag():
    JSP引擎处理结束标签 (例如 :</jsp:usebean> ) 时,将自动调用该方法。
    如果该方法返回SKIP_PAGE,JSP引擎将不再处理剩余的JSP页面代码;
    如果返回EVAL_PAGE,则JSP引擎将继续处理剩余的JSP页面代码


    1)不带属性的自定义标签
    a.自定义类继承自javax.servlet.jsp.tagext.TagSupport
    b.实现public int doStartTag() throws JspException方法和
    public int doEndTag() throws JspException方法
    c.编写tld描述文件,放在WEB-INF目录下,文件名以.tld结尾

    <taglib>
    <description>MyTaglib</description>  //对整个taglib的描述信息
    <display-name>MyTaglib</display-name> //整个taglib的名字
    <tlib-version>1.1</tlib-version>  //版本号
    <short-name>mytaglib</short-name>  //prefix
    <uri>http://gs.com/mytaglib</uri>  //uri标记描述开始
    <tag>
    <description>  //标签的说明
    //print date with specified format
    </description>
    <name>date</name> //标签的名称,用在JSP页面中引用该标签
    <tag-class>com.gs.taglib.MyTaglib</tag-class> 包含自定义标签的class文件
    <body-content>JSP</body-content> //在JSP页面中进行处理
    </tag>
    </taglib>

    d.web.xml文件中声明自定义的标签库

    <jsp-config>
    <taglib>
    <taglib-uri>tld描述文件中的uri</taglib-uri>
    <taglib-location>/mytaglib.tld</taglib-location> 指示tld描述文件的位置
    </taglib>
    </jsp-config>

    e.在JSP页面中使用<%@ taglib uri="tld描述文件中的uri" prefix="my" %>声明使用自定义的标签库
    f.<my:date></my:date>调用指定标签
    2)带属性的自定义标签
    a.在自定义标签类中添加与属性名称一样的属性,并且提供getter和setter方法,类中可以直接使用此属性名称
    b.在tld描述文件的<body-content>JSP</body-content>后面添加与属性对应的<attribute></attribute>

    <attribute>
    <name>与类中和jsp标签中指定的属性名称一致</name>
    <required>true|false</required> //表示在JSP页面的标签中是否一定需要提供该属性
    <rtexprvalue>true|false|yes|no</rtexprvalue>// 表示该属性名称能否被用在表达式语句中
    </attribut>

    c.jsp页面中使用标签可以加上相应的属性

                                                                --很抱歉写的有点乱

  • 相关阅读:
    poj1877
    poj2163
    API hook 单步调试
    用VC++编写勾子程序(转)
    不使用DLL创建全局系统钩子
    接触DLL编写并实现线程注入和全局钩子
    根据RGB计算亮度
    !!!光线对视频识别技术的影响
    消息钩子函数入门篇
    “蓝脑”计划:人造大脑的可能性 文化·探索 CCTV_com
  • 原文地址:https://www.cnblogs.com/A0926/p/5443869.html
Copyright © 2011-2022 走看看