jsp---EL和JSTL

 

----------------------------------------------------------------------------

EL:表达式语言

1.  基本用法

${表达式}

  表达式为字符串或EL运算符组成的表达式

  tips:要输出 ${ 这个字符串

    ${\${}  或 ${'${'}

 

2. 兼容低版本--禁用EL

(1) 在 &{ 前加 \

  不解析为EL表达式

(2)page指令

<%@ page isELIgnored="true"%>

  禁用整个JSP页面的EL

(3)配置文件

  web.xml文件


    
        *.jsp
        true
    

  禁用整个web应用中所有jsp页面中的EL

    

 

3.

(1)EL关键字

  jsp---EL和JSTL_第1张图片

 

 

 

(2)运算符优先级

  jsp---EL和JSTL_第2张图片

 

  empty运算符:判断有域中键对应的值是否为空、长度是否为0

 

4. 获取数据

  只能从域对象中获取值

(1)值为字符串

  ①格式: ${域名称.键名} 

    域:pageScope 从pageContext对象获取

      requestScope  从request

      sessionScope  从session

      applicationScope  从application(ServletContext)

   ②格式: ${键名}

    一次从最小的域中找该键值对,直到找到为止【pageScope-->requestScope-->sessionScope-->applicationScope】

 

(2)值为对象

  ①自定义的符合JavaBean的类,用 域.键.成员变量名

  ②值为List集合   ${域名称.键名[索引]}  索引为数值,从0开始

  ③值为Map集合  ${域名称.键名.Map中的键名}

                                  ${域名称.键名["Map中的键名"]}

 

 

4. EL的隐含对象

  4.1  pageContext 页面上下文对象

  可获取JSP的内置对象,包括request、response、out、session、exception、page,不能获取application、config、pageContext对象

  不能获取servletContext

 

 

6. 定义使用EL函数

 

 

 

 

 

 

----------------------------------------------------------------------------------------------------------------

JSTL标签

 

1. 5个标签库

  核心标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

  格式标签库:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

  SQL标签库:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>

  XML标签库:

<%@ taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml"%>

  函数标签库:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

 

2. 配置

 

3. 核心标签库

  3.1 表达式标签

(1)

  作用:将表达式的值输出到JSP页面,类似<%=表达式%>  ${表达式}

  两种格式:

    ①

default="默认值"/>

    ②


    默认值

  

  value里面可使用EL表达式

  escapeXml:是否将特殊字符进行转换(转换从字符输出,而不是对应的标签含义) 如要输出< ,就要将其转换成 < 

     

 

     即true:输出字面字符串  false:按其HTML含义解析输出

  例:

<c:out value="
"
escapeXml="true" default=""/> <%-- 输出 <hr> 这个字面字符串--%> <c:out value="
"
escapeXml="false" default=""/> <%-- 输出 水平分割线--%>

 

 

(2)

  在指定范围内(page、request、session、application)定义保存某个值的变量,或者为指定对象设置值

  ①定义变量

<c:set var="name" value="value" scope="范围"/>

  

<c:set var="name" scope="page|request|session|application">c:set>

  ②为对象属性设置值(为target指定的目标的属性propName设置值为value)

<c:set value="value" target="object" property="propName"/> 

 

<c:set target="object" property="propName">c:set>

 

(3)

  移除指定范围内的变量

<c:remove var="name" scope="范围"/>

 

(4)

  捕获异常   var可指定存储异常信息的变量

<c:catch var="exception">
    //可能存在异常的代码
c:catch>

 

  3.2 URL标签

(1)

  导入静态或动态文件到web页面,类似

  可导入其它网站的资源,而 只能导入本应用内的资源

  ①

<c:import url="url" context="context" var="name" scope="范围" charEncoding="encoding">
    标签体
c:import>

  ②

<c:import url="url" varReader="name" context="context" charEncoding="encoding">
    标签体
c:import>

  context:访问同一个服务器其它web应用,以 "/" 开头,指定了此属性则url也必须以 "/" 开头

  var:变量名,String类型,存储获取的资源

  scope:指定变量的范围,默认page

  varReader:指定变量名,以Reader类型存储被包含文件的内容    

  标签体:可通过  为导入的文件传递参数

(2)

  将客户端发出的request请求重定向到其它URL服务端,可修改request中的属性进行修改然后传递

<c:redirect url="url" context="/context"/>

  

<c:redirect url="url" context="/context">
    <c:param/>
    <c:param/
>

 

(3)

  生成一个URL路径字符串,可赋予HTML的  标记实现URL的连接,或用这个URL实现网页转发、重定向  

<c:url value="url" var="name" scope="范围" context="context"/>

 

<c:url value="url" var="name" scope="范围" context="context">
    <c:param/>
    <c:param/>
c:url>

 

(4)

  与import、redirect、url标签组合传递参数

<c:param name="paramName" value="paramValue"/>

 

  3.3 流程控制标签

(1)

  条件表达式结果保存在var指定的变量中:

<c:if test="condition" var="name" scope="page|request|session|application">

 

  结果保存在var指定的变量,且根据条件结果执行标签体(HTML标记、java代码、其它jsp标签):

<c:/if test="condition" var="name" scope="page|request|session|application">
    标签体
c:if>

 

(2)

  判断第一个when标签条件,为true则执行该标签体;否则判断下一个;如果都不满足,则执行 otherwise 标签体

<c:choose>
    <c:when test="condition">
        标签体
    c:when>
        <c:when test="condition">
        标签体
    c:when>
        <c:when test="condition">
        标签体
    c:when>
    <c:otherwise>
        标签体
    c:otherwise>
c:choose>

  

(3)

(4)

 

  3.4 循环标签

(1)

   根据循环条件遍历数组、集合中数据

  ①

//集合成员迭代
<c:forEach items="data" var="name" begin="start" end="finish" step="step" varStatus="statusName">
    标签体
c:forEach>

  items为必选属性,一般使用EL指定,其它可选

  ②

//数字索引迭代
<c:forEach begin="start" end="finish" var="name"  step="step" varStatus="statusName">
    标签体
c:forEach>

  begin、end为必选属性,其它可选

 

  items:被遍历对象

  var:items指定的对象的成员

  begin、end:起始、终止位置 可用EL

  step:循环步长 可用EL

  varStatus:指定循环的状态变量

    

 

   标签体:JSP页面任何元素

  

  例:遍历一个List里的第1、2个元素,并输出索引

<%
    List<String> list = new ArrayList<String>();
    list.add("str1");
    list.add("str2");
    list.add("str3");
    list.add("str4");
    request.setAttribute("list",list);
%>

<%--遍历第1、2个元素--%>
<c:forEach items="${requestScope.list}" var="val" varStatus="status" begin="1" end="2">
    ${status.index} :${val}<br/>
c:forEach>

 

 

(2)

   用指定的分隔符将一个字符串分割开,根据分割的数量确定循环次数

<c:forTokens items="String" delims="char" var="name" begin="start" end="end" step="step" varStatus="statusName">
    标签体
c:forTokens>

 

你可能感兴趣的:(jsp---EL和JSTL)