zoukankan      html  css  js  c++  java
  • JSTL和EL


    JSTL和EL


    1.EL表达式总是放在大括号里,而且前面有一个美元符前缀。
    person.name2.相似点:(1).都可以让我们在静态内蓉中插入动态信息。EL:室外温度是{emp}度
    JSP:室外温度是<%=temp%>度
    PS:web容器会以同样的方式处理二者(一旦接受到请求,容器将计算表达式,将其转换为一个字符串,然后插入到响应输出流中)
    (2).这些表达式同时还允许我们更改标准标记或自定义标记的属性。
    < div style=mystyle>HELLO</div>3.不同点:(1).所有EL表达式以“{”开始,以“}”结尾,JSP是<% %>
    (2)很细小,处理表达式内部变量的方式。
    JSP:<%! Int i=100; %>
    EL:表达式是不能在脚本中定义变量。如果上面的变量声明后,返回一个未定义的值。
    PS:我们一般采用javabean的属性或者自定义标记库和标准标记库来定义变量,但是最简单的变量访问是使用JSP本身提供的隐私对象
    4.EL表达式中使用隐式变量
    EL中的隐式变量
    类别 隐式变量名 描述
    JSP pageContext 用来访问JSP隐式对象
    作用域 pageScope 与page作用域属性的名称和值相关联的Map类
    requestScope 与requset作用域属性的名称和值相关联的Map类
    sessionScope 与session作用域属性的名称和值相关联的Map类
    applicationScope 与application作用域属性的名称和值相关联的Map类
    请求参数 Param 包含请求参数字符串的Map类
    paramValue 包含请求参数字符串数组(String[])的Map类
    请求头 Header 包含请求头自妇女换的Map类
    headerValues 包含请求头字符串数组(String [])的Map类
    Cookie Cookie 按名称存储请求附带的Cookie的Map类

    PS:并没有直接赋予我们EL中直接访问真正的page、servletRequest、HttpSession以及ServletContext的权力,他们返回的只是一个与分别page作用域,Session作用域、application作用域有关的属性名和值的Map对象。
    pageContext隐式变量相当于JSP中的javax.serlvet.jsp.PageContext对象
    例:pageContext.request.requsURL为了获得请求的HTTP方法例:{pageContext.request.method}
    JSP可以使用method方法
    例:<%=request.getMethod() %>
    (1)使用totalPrice属性处理用户的多个购买
    sessionScope.totalPricePS:通过applicationScope隐式变量去访问ServletContext里的属性,而不是通过PageContext变量例:{param.name}
    header.accept(2)最后一个隐式变量cookie,用于返回servlet的getCookies()方法的结果PS:当容器解析EL表达式变量时,列如{x}中的x,容器首先检查隐式变量。如果隐式变量中找不到x,它将一次查找page,request,session,application范围的属性,如果还没有找到x,就直接返回null
    5.EL运算符
    (1)用于访问属性和集合的EL运算符
    A.a.b:返回a的属性b的值
    B.a[b]:返回a的键或者索引为b的值
    ${header[“host”]}
    Header是一个Map。调用header.get(“host”)方法来去的并显示这个EL表达式的结果。类似的,headerValues.host则会返回一个数组
    (2)EL算术、关系、逻辑运算符
    除 /或div
    取模 %或mod
    小于 <或lt
    大于 >或gt
    小于等于 <=或le
    大于等于 >=或ge
    是否为空 empty

    6.EL函数
    (1)将函数插入到JSP页面中的过程共包含创建和更改四个文件
    1.方法类(.Java):包含需要在JSP中使用的Java方法
    2.标记库描述文件(*.tld):映射每个Java方法到xml函数名
    3. 部署描述文件(web.xml):饮食和TLD到标记库URL(注意:改变本文件不是必须的,但是推荐改变本文件)
    4.JSP页面(*.jsp):使用标记库URL和函数名调用方法
    (2)创建静态方法upper()和length()
    PS:
    1.方法必须被声明为public和static,而方法所属的类必须声明为public。这样servlet就可以直接访问该类及其方法,而不用创建一个对象。
    2.方法的参数和返回值必须在EL中是有效的,否则,web容器将不能识别方法签名
    3.类文件必须保存在/WEB-INFO/classes目录下
    (3)创建标记库描述文件(TLD)
    TLD的目标是将静态方法映射到可以再JSP中使用的函数名。EL中不允许直接调用Java方法

    1.元素function中的内容用于定义如何将Java方法映射到函数,对于每个function函数,我们需要提供3类信息
    (1)name元素定义要在JSP中使用的函数名
    (2)Function-class元素定义方法所在的类的全名
    (3)Function-signature元素定义静态方法及其参数和返回值的全数据类型
    (4)更改部署描述文件
    1.taglib元素中必须包含两个子元素
    (1)taglib-uri元素定义用于servlet和JSP要访问该标记库的URL。这个URL可以是绝对的(http://….),可以是相对的(/….)
    (2)taglib-location元素定义标记库描述文件的上下文路径。因为我们TLD是在WEB-INFO下面的myFunc目录下,所以元素值是/WEB-INF/myFunc/Functions.tld
    (5)在JSP内访问EL函数
    1.使用taglib指令访问TLD,并用于一个前缀代表该标记库
    2.使用TLD前缀和函数名创建一个EL表达式,必须使用正确参数类型
    7.JSP自定义标记库与标准标记库JSTL
    JSTL标准标记库

    功能范围 作用 URI 前缀
    核心 一般用途处理的标记 http://java.sun.com/jsp/jstl/core c
    Xml 解析、选择、转换xml数据的标记 http://java.sun.com/jsp/jstl/xml x
    数据库 访问关系型数据库的标记 http://java.sun.com/jsp/jstl/sql sql
    国际化 为国际化应用格式化数据的标记 http://java.sun.com/jsp/jstl/fmt Fmt
    函数 处理字符串和集合的标记 http://java.sun.com/jsp/jstl/function fn
    我们就可以使用前缀c来引用JSTL核心标准库中的JSTL标记

    (1)通用标记
    1.< c:catch>和< c:out>,catch标记不会自己执行这些例程,但是会将抛出的一场保存到catch标记的var属性中
    2.Out有一个必要的属性value,标记的功能就是显示value的值
    < c:out value=”${number}”/>
    (2)变量支持标记
    1.< c:set>:设置变量和对象的值
    2.< c:remove>:将一个变量从其作用域中删除
    (3)流程控制
    1.JSTL条件处理:< c:choose>和< c:if>
    (1)< c:choose>本身不包含任何属性。但是可以包含多个
    < c:when>,when标记中实现比较与测试属性分离
    2.循环:< c:forEach>和< c:forTokens>
    (4)JSTL访问URL信息
    1.核心标记库汇总最后一类是处理URL访问
    (1)< c:url>重写URL并对其参数编码
    (2)< c:import>访问web应用程序之外的内容
    (3)< c:redirect>重定向到不同的URL
    2.< c:url>
    < c:url value=”/page.html” var=”pagename”/>
    还可以用scope属性指定var访问(page,request,session,applicationx)

    <c:url value=”/page.html” var=”pagename”>

    <c:param name=”param1”value=”${2*2}”/>
    </c:url>

    < c:import>
    通过JSP的include指令范文URL,但是如果访问servlet容器外的内容,就必须使用标记

    <c:import url=”/content.html” var=”newstuff”scope=”session”>
    <c:param name=”part1” value=”val1”/>
    <c:param name=”part2” value=”val2”/>
    </c:import>

    < c:redirect>
    和httpservlet的sendRedirect()方法相同,发送一个重定向响应到客户端

    <c:redirect url=”/content.html”>
    <c:param name=”par1”value=”val1”/>
    <c:param name=”par2”value=”va2”/>
    </c:redirect>

  • 相关阅读:
    视图&索引&序列
    PL/SQL语言基础
    C#实现递归矩阵连乘(动态规划的递归自顶向下,非递归自地向上)
    JS 第五课
    请问,小丽的鞋子到底是什么颜色的?
    用10!来回顾 PL/SQL语言基础 && 标准异常名
    SELECT 查询—子查询
    备份和恢复
    JS 第六课
    Linux学习之二Linux系统的目录结构
  • 原文地址:https://www.cnblogs.com/z1234/p/6160587.html
Copyright © 2011-2022 走看看