一、EL
EL是JSP表达式语言,全称是Expression Language,提供了JSP中简化表达式的方法。
语法结构:${ }(用美元符($)定界,内容在花括号({})中。)
在使用EL表达式时需要注意一点:
当要存取的属性名称中包含一些特殊字符,如“.”或“?”等并非字母或数字的符号师就一定要使用“【】”。例如:
${user.My-Nane}就应当改成${user["My-Name"]}(“[]”可以访问集合或者数组的元素、Bean属性)
EL中的有效表达式
有效表达式可以包含文字、操作符、变量(对象引用)调用。
变量(对象引用)的调用
例如${username},它的意思是取出某一范围中名称为username的变量的值,由于没有指定是哪一个范围的username,所以他会依次从page、request、session、application范围查找。如果途中遇到username,就直接回传,没有就继续找下去,如果全部的范围都没有找到,则会返回null。
EL隐式对象
与范围有关的隐式对象(pageScope、requestScope、sessionScope、applicationScope)
与输入有关的隐式对象(param和paramValues)
cookie(用来取得使用者的cookie值,例如在cookie中设定了username属性值,则可以使用${cookie.userCountry.value}来取得它)
header和headerValues
header储存用户浏览器和服务器端用来沟通的数据
另外在很少情况下,有可能同一标头名称拥有不同的值,此时必须改为headerValues来取得这些值。
initParam(initParam用来读取设置在web.xml中的参数值。例如${initParam.repeat},等价于:(String)application.getInitParameter(“repeat”);或servletContext.getInitParameter(“repeat”);)
pageContext
pageContext用于取得其他有关用户要求或页面的详细信息
${pageContext.request.queryString} 取得请求的参数字符串
${pageContext.request.requestURL} 取得请求的URL,不包括参数字符串
${pageContext.request.contextPath} 服务的web application 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr } 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息实例:elScope.jsp页面,该页面主要用于演示EL表达式的隐式对象的使用。
JSTL简介
JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库。
JSTL由四个定制标签库组成
core标签提供了定制操作,通过限制了作用域的变量管理操作数据,以及执行页面内容的迭代和条件操作,它还提供了用来生成和操作URL的标签。
format标签库定义了用来格式化数据(尤其是数字和日期)的操作。
xml库包含一些可以用来操作通过xml表示的数据。
sql库定义了用来查询关系数据库的操作。
如果要使用JSTL,必须将jstl.jar和standard.jsr文件添加到项目中。
taglib
使用任何jsp定制标签库都必须在想要使用的这个库标签的任何页面包括taglib指令,如想要使用core库,必须添加如下taglib指令
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
核心标签库--表达式操作
属性介绍:
value属性,指定表达式进行求值
escapeXml可选属性。他控制当用
default可选属性,如果指定了default属性,那么在对value属性的表达式求值所得结果为null或空String情况下,
属性介绍:
var属性指定了限制了作用域的变量的名称。
scope属性表明了该变量驻留在那个作用域内(默认为page)
value属性指定了分配给该变量的值。
核心标签库--流程控制
body content
属性介绍:
test属性:表达式的条件,其求出结果为true/false
var属性:指定了限制了作用域的变量的名称
scope属性:指定了var变量的作用域(默认值为page)
body content
...
body content
标签数据库--迭代操作
支持两种不同样式的迭代:1,整数范围上的迭代 2,集合上迭代
body content
属性介绍:
begin和end属性要么是静态整数值,要么是可以得出整数值的表达式。它们分别指定迭代索引的初始值以及迭代索引的终止值。当在整数范围内进行迭代时,这两个属性是必须的,而其他所有属性都是可选的。
当出现step时,它也必须是整数值,他指定每次迭代后索引的增量。
var属性,那么将会创建一个带有指定名称的并限定了作用域的变量,并将每次迭代的当前索引值赋给该变量。
varstatus属性用于创建限定了作用域的变量。