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>描述语,而应该用转义符<c:set>,否则报错】
<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>
用指定的分隔符(可以有多个)将字符串分割开,根据分割的数量确定循环的次数
- jsp 标签库使用小结 JSTL EL表达式 JSP的标签分类
- Web小结---Servlet,JSP,过滤器和监听器,四个作用域和九个内置对象,EL表达式语言,自定义标签,JSTL,国际化与汉字的编码
- Web小结---Servlet,JSP,过滤器和监听器,四个作用域和九个内置对象,EL表达式语言,自定义标签,JSTL,国际化与汉字的编码
- JSP基础:六、EL表达式、JSTL标签和乱码解决
- Web小结---Servlet,JSP,过滤器和监听器,四个作用域和九个内置对象,EL表达式语言,自定义标签,JSTL,国际化与汉字的编码
- awk基础知识小结(1)
- C/C++基础知识:typedef用法小结
- C/C++基础知识:typedef用法小结
- jsp脚本、jsp标准动作、EL表达式、JSTL标签
- el表达式和jstl标签
- 常用jstl标签小结
- [黑马程序员] _C#基础知识小结
- CSS中A标签断字不换行问题(基础知识)
- EL表达式与JSTL标签库示例
- Java基础知识小结之一
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
- oracle基础知识小结
- JSP中JSTL提供的函数标签EL表达式操作字符串的方法
- el表达式保留两位小数、使用jstl fmt formatNumber标签保留两位小数
- jstl标签和EL表达式