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>

  • 相关阅读:
    POJ 1887 Testing the CATCHER
    HDU 3374 String Problem
    HDU 2609 How many
    POJ 1509 Glass Beads
    POJ 1458 Common Subsequence
    POJ 1159 Palindrome
    POJ 1056 IMMEDIATE DECODABILITY
    POJ 3080 Blue Jeans
    POJ 1200 Crazy Search
    软件体系结构的艺术阅读笔记1
  • 原文地址:https://www.cnblogs.com/z1234/p/6160587.html
Copyright © 2011-2022 走看看