EL表达式与JSTL标签的基础知识小结

一、EL表达式


EL表达式语法:${表达式}

特点:
1、可与JSTL结合使用,可与javascript结合使用
2、运算符与优先级:EL会自动进行类型转换(+可将字符串数值转换为数字),除法运算中0为除数时返回无穷大Infinity
3、访问数据:EL可以访问JAVA变量,javabean属性(jsp:useBean scope="pageScope"),嵌套属性,集合对象
4、隐含对象:EL可以获得命名空间,通过PageContext对象可访问其它内置对象的内置属性,还可以直接访问JSP四大作用域的外置属性
5、EL函数:扩展函数可以与java类静态方法进行映射

禁用EL
1、元素级【禁用】:使用斜杠“\”: \${expression}
2、页面级【禁用/启用】:使用page指令:<%@ page isELIgnored="布尔值" %>
3、应用级【禁用/启用】:配置web.xml文件
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>
    </jsp-property-group>
</jsp-config>

EL保留字:
变量命名应避免出现下列关键字:
and or not             && || !
gt  lt le  ge eq ne    >  <  <=  >=  ==  !=
empty false       
instanceof div
(/ div  % mod)

EL运算符:
访问数据,算术、逻辑、关系、条件,判断空

EL隐含对象(共11个):
1、页面上下文对象pageContext:
【javax.servlet.jsp.pageContext】
不能访问application,config,pageContext这3个内置对象, 但可以访问其余6个内置对象和容器上下文ServletContext对象:
    ${pageContext.request.contextPath}         // 获取客户端相关的信息:比如客户端服务器的上下文根路径(项目根目录)
    ${pageContext.request.servletPath}         // 获取客户端相关的信息:比如客户端服务器的当前Servlet路径(当前Servlet路径)
    ${pageContext.request.serverName}          // 获取客户端相关的信息:比如客户端服务器的名称
    ${pageContext.request.serverPort}          // 获取客户端相关的信息:比如客户端服务器的端口号
    【注意:在request中设置的属性变量不能通过上述方法获取,只能通过requestScope隐含对象去获取】
    ${pageContext.response.contentType}        // 获取与响应相关的信息:比如响应的内容类型
    ${pageContext.session.maxInactiveInterval} // 获取与session相关的信息:比如session的有效时间
    ${pageContext.out.bufferSize}              // 获取与输出相关的信息:比如输出缓冲区大小
    ${pageContext.page.class}                  // 获取当前页面的类文件
    ${pageContext.exception.message}           // 获取JSP页面的异常信息:比如异常信息字符串

    ${pageContext.servletContext.contextPath}  // 获取servlet上下文对象的信息【相当于application】:比如获取当前上下文页面的路径


2、访问作用域范围的隐含对象(4个):
应用这4个隐含对象之一指定所要查找标识符的作用域后,系统将不再按照默认的顺序:pageContext,request,session,application来查找,将只能用来取得该隐含对象指定范围内的属性值。
    pageScope:       返回包含page范围内(javabean)的属性值的集合,类型为java.util.Map对象
    requestScope:    返回包含request范围内的属性值的集合,         类型为java.util.Map对象
    sessionScope:    返回包含session范围内的属性值的集合,         类型为java.util.Map对象
    applicationScope:返回包含application范围内的属性值的集合,     类型为java.util.Map对象


3、访问环境信息的隐含对象(6个):

param:访问表单提交的参数(值唯一的情形)
    <input name="career" type="text">
    取值方式:${param.username}
    【如果param指定的参数不存在,则返回 ""】

paramValues:访问表单提交的参数(值多个的情形,比如复选框)
    <input name="affect" type="checkbox" value="a">A
    <input name="affect" type="checkbox" value="b">B
    <input name="affect" type="checkbox" value="c">C
    取值方式:${paramValues.affect[0]} ${paramValues.affect[1]} ${paramValues.affect[2]}
    【如果paramValues指定的参数不存在,则返回 ""】

header:获取HTTP请求的一个具体header的值(值唯一的情形)
headerValues:获取HTTP请求的一个具体header的值(值多个的情形)
    获取方式:${header.connection} ${header["user-agent"]

initParam:获取web应用(ServletContext)的初始化参数值
    <context-param>
        <param-name>author</param-name>
        <param-value>hello</param-value>
    </context-param>
    获取方式:${initParam.author}

cookie:获取设置的cookie对象和该cookie对象的值
    Cookie ck = new Cookie("shape","circle");
    response.addCookie(ck);
    获取cookie对象:${cookie.shape}
    获取cookie名:${cookie.shape.name}
    获取cookie值:${cookie.shape.value}


EL函数:有问题???




二、JSTL标签


导入方法:
第1种方法:手动复制jstl.jar和standard.jar到WEB-INF/lib目录下即可
第2种方法:[测试无效,报错]将两个jar包放任意位置,然后通过eclipse->Build path->Libraries->Add Library导入

JSTL标准标签库(5部分组成):

★核心标签库★:<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>

表达式标签:  
<c:out> 将表达式值输出到jsp页面中,相当于<%=表达式%>
<c:set> 在指定范围中定义变量,或为指定对象设置属性值
<c:remove> 在指定范围中移除指定变量
<c:catch> 捕获程序中异常,相当于try...catch语句

URL标签:     
<c:import> 导入(站内或其它网站)静态和动态文件到web页面
<c:url> 按url重写规则构造一个URL
<c:redirect> 将客户端request请求重定向到其它url服务端
    <c:param> 为其它标签提供参数信息,通常与其它标签结合使用

流程控制标签:
<c:if> 根据不同条件处理不同业务,类似于if语句,但没有else
<c:choose> 根据不同条件完成不同业务逻辑,类似于switch语句
<c:when>
<c:otherwise>

循环标签:    
<c:forEach> 根据循环条件,遍历数组和集合类中的数据
<c:forTokens> 迭代字符串中指定分隔符分隔的各成员

格式标签库:<%@ taglib prefix="fmt" url="http://java.sun.com/jsp/jstl/fmt" %>
SQL标签库:<%@ taglib prefix="sql" url="http://java.sun.com/jsp/jstl/sql" %>
XML标签库:<%@ taglib prefix="xml" url="http://java.sun.com/jsp/jstl/xml" %>
函数标签库:<%@ taglib prefix="fn" url="http://java.sun.com/jsp/jstl/functions" %>





★所有value属性值字符串中都可以使用EL表达式★:
【注意:即使在title中也不允许简单使用标签<c:set>描述语,而应该用转义符&lt;c:set&gt;,否则报错】
<c:out value="${null}" escapeXml="true" default="0"></c:out>

<c:set var="username" value="zhangs" [scope="范围"] />
<c:set var="username" [scope="page|request|session|application"]>标签体</c:set>

<c:set target="obj" property="propName" value="red" />
<c:set target="obj" property="propName">标签体</c:set>

<c:remove var="username" [scope="范围"] />
【注意:若不指定范围,将遍历4个作用域删除所有找到的变量】

<c:catch var="err"> 可能存在jstl异常和运行时异常的代码 </c:catch>


★标签体可包含参数标签★:<c:param name="xxx" value="xxx"/>
【注意:如果指定了var属性,将不再输出,而是将资源保存在该变量中备用】
【注意:context属性必须以'/'开头,用于访问同一服务器的其它web工程,若指定该属性,则url也必须以'/'开头】
<c:import url="xxx" [context="context"] [charEncoding="xxx"] [var="xxx"] [scope="xxx"]>标签体</c:import>
<c:import url="xxx" [context="context"] [charEncoding="xxx"] varReader="xxx">标签体</c:import>
注意:import可导入站内和站外资源
【注意:import导入拷贝的文件时,记得刷新下项目目录,否则报错】

<c:url value="xxx" [var="xxx"] [scope="xxx"] [context="xxx"] >标签体</c:url>

<c:redirect url="xxx" [context="xxx"]>标签体</c:redirect>


<c:if test="xxx" [var="xxx"] [scope="xxx"]>标签体</c:if>
相当于:var result = testValue ;if(result){ ... }

<c:choose>
    <c:when test="xxx">标签体</c:when>
    [<c:otherwise>标签体</c:otherwise>]
</c:choose>
其中:<c:when>标签至少有一个,<c:otherwise>标签最多一个,且必须放最后


<c:forEach items="xxx" [begin="xxx"] [end="xxx"] [step="xxx"] [var="xxx"] [varStatus="xxx"]>标签体</c:forEach>
其中:begin,end都是下标从0开始的原始索引
<c:forEach              begin="xxx"   end="xxx"  [step="xxx"] [var="xxx"] [varStatus="xxx"]>标签体</c:forEach>
若没有items属性,则var指定的变量为数字索引,从begin开始,end结束,step为步长
    forEach标签的varStatus有4个属性:
        index:当前索引值(从0开始的原始索引)
        count:当前计数值(从1开始的自然序列)
        first:当前是否第1次循环,
        last: 当前是否最后1次循环

<c:forTokens items="xxx" delims="xxx" [begin="xxx"] [end="xxx"] [step="xxx"] [var="xxx"] [varStatus="xxx"]>标签体</c:forTokens>
用指定的分隔符(可以有多个)将字符串分割开,根据分割的数量确定循环的次数






























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章