jsp---EL和JSTL

Posted T,X

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp---EL和JSTL相关的知识,希望对你有一定的参考价值。

 

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

EL:表达式语言

1.  基本用法

${表达式}

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

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

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

 

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

(1) 在 &{ 前加 \\

  不解析为EL表达式

(2)page指令

<%@ page isELIgnored="true"%>

  禁用整个JSP页面的EL

(3)配置文件

  web.xml文件

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>
    </jsp-property-group>
</jsp-config>

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

    

 

3.

(1)EL关键字

  

 

 

 

(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)<c:out>

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

  两种格式:

    ①

<c:out value="表达式" escapeXml="true|false" default="默认值"/>

    ②

<c:out value="表达式" escapeXml="true|false">
    默认值
</c:out>

  

  value里面可使用EL表达式

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

     

 

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

  例:

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

 

 

(2)<c:set>

  在指定范围内(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>

  移除指定范围内的变量

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

 

(4)<c:catch>

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

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

 

  3.2 URL标签

(1)<c:import>

  导入静态或动态文件到web页面,类似<jsp:include>

  可导入其它网站的资源,而<jsp:include page="uri"> 只能导入本应用内的资源

  ①

<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类型存储被包含文件的内容    

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

(2)<c:redirect>

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

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

  

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

 

(3)<c:url>

  生成一个URL路径字符串,可赋予HTML的 <a> 标记实现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)<c:param>

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

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

 

  3.3 流程控制标签

(1)<c:if>

  条件表达式结果保存在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)<c:choose>

  判断第一个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)<c:when>

(4)<c:otherwise>

 

  3.4 循环标签

(1)<c:forEach>

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

  ①

//集合成员迭代
<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}&nbsp;:${val}<br/>
</c:forEach>

 

 

(2)<c:forTokens>

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

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

 

以上是关于jsp---EL和JSTL的主要内容,如果未能解决你的问题,请参考以下文章

JavaEE之动态页面技术(JSP/EL/JSTL)

动态页面技术(JSP/EL/JSTL)

JSP,EL,JSTL

JavaWeb学习之动态页面技术(JSP/EL/JSTL)

jsp---EL和JSTL

jsp---EL和JSTL