表达式基础
1:表达式语言入门
${“”} 注意 1:如果是字符串,要加上引号,不然没有结果。
${ } 2:如果是数字 没有必要加上。
3:使用 . 还是用 [ ] 访问表单数据 ?下面是原则 。
EL 提供.和[]两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符(当要访问的对象中含有非数字和字母的特殊符号时候 比如 “.” “-” 、“?”等 。),如.或?等并非字母或数字的符号,就一定要使用 []。例如:
${user.My-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:
${sessionScope.user[data]}中data 是一个变量
Eg:
<body>
<%
request.setAttribute("user", "xiao zhang");
request.setAttribute("pwd", "xiao");
String isNull=null;
%>
<h1>Hello EL!</h1>
<p>${"这是我的第一个表达式语言-----PS输出的内容是字符串"}</p>
<p>输出数字${49000}</p>
<hr>
<form method="post" action="helloEL.jsp">
<input type="text" name="attribute1">
<input type="text" name="attribute2">
<input type="submit" value="提交在下面看结果">
</form>
<hr> 下面是 用表达式语言 冲表单中获取的数据:
<p>表单属性1:${param.attribute1}</p>
<p>表单属性2:${param.attribute2}</p>
<hr>用empty判断对象是否是空
${empty isNull}
</body>
结果:
表达式语言EL 运行原理和基本语法
EL的隐含对象
对象
类 型 说 明
(1)PageContext | javax.servlet.ServletContext |表示此JSP
解说:PageContext 隐含对象,表示jsp页面的上下文信息,他提供了访问以下对象的方法:
A:ServletContext 对象:ServletContext上下文信息。
B:session对象 :客户端session对象
C:Request对象:请求对象。
D:Response 对象:对客户端响应对象。
———————————————————————————–
PageScope | java.util.Map类型
————————————————————————————-
RequestScope | java.util.Map |取得Request范围的属性名称所对应的值
————————————————————————————-
sessionScope | java.util.Map |取得Session范围的属性名称所对应的值
————————————————————————————-
applicationScope | java.util.Map |取得Application范围的属称所对应的值
————————————————————————————-
param | java.util.Map |如同ServletRequest.getParameter(String name)返回String类型的值
—————————————————————————————-
paramValues | java.util.Map |如同ServletRequest.getParameterValues | (String name)。返回String []类型的值
—————————————————————————————–
header | java.util.Map |如同ServletRequest.getHeader(String name) 返回String类型的值
——————————————————————————————
headerValues | java.util.Map |如同ServletRequest.getHeaders(String name) 。返回String []类型的值
——————————————————————————————
cookie | java.util.Map |如同HttpServletRequest.getCookies( )
——————————————————————————————
initParam | java.util.Map |如同ServletContext.getInitParameter(String name)。返回String类型的值
——————————————————————————————-
cookie对象
所谓的cookie是一个小小的文本文件,它是以key、value的方式将Session Tracking的内容记录在这个文本文件内,
这个文本文件通常存在于浏览器的暂存区内。JSTL并没有提供设定cookie的动作,
因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。如果我们在cookie中设定一个名
称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。
header和headerValues(请求报头对象)
header储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,
例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。如果要取得用户浏览器的版本,
即${header["User-Agent"]}。另外在很少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues来取得这些值。
注意:因为User-Agent中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成${header.User-Agent}。
initParam
就像其他属性一样,我们可以自行设定web应用的环境参数(Context),当我们想取得这些参数时,
可以使用initParam隐含对象去取得它,例如:当我们在web.xml中设定如下:
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<web-app xmlns=”http://java.sun.com/xml/ns/j2ee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd”
version=”2.4″>
<context-param>
<param-name>userid</param-name>
<param-value>mike</param-value>
</context-param>
</web-app>
那么我们就可以直接使用 ${initParam.userid}来取得名称为userid,其值为mike的参数。
下面是之前的做法:String userid = (String)application.getInitParameter(”userid”);
pageContext对象
我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下面列出了几个比较常用的部分。
Expression 说 明
${pageContext.request} |取得请求对象
${pageContext.session} |取得session对象
${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是否为新的,所谓新的session,表示刚由server产生而client尚未使用
${pageContext.session.id} |取得session的ID
${pageContext.servletContext.serverInfo}|取得主机端的服务信息
eg:
代码
<body>
<h1>Hello EL2</h1>
<hr>pageContext的一些属性
<p>得到pageContext.request.serverPort:${pageContext.request.serverPort}</p>
<p>得pageContext.request.serverName:${pageContext.request.serverName}</p>
<p>得到pageContext.request.remotePort:${pageContext.request.remotePort}</p>
<p>得到pageContext.request.remoteHost:${pageContext.request.remoteHost}</p>
<p>得到pageContext.request.localPort:${pageContext.request.localPort}</p>
<p>得到pageContext.request.remoteAddr:${pageContext.request.remoteAddr}</p>
<p>得到pageContext.request.localName:${pageContext.request.localName}</p>
<p>得到pageContext.request.contentType:${pageContext.request.contentType}</p>
<p>得到pageContext.request.parameterNames:${pageContext.request.parameterNames}</p>
<p>得到pageContext.request.protocol:${pageContext.request.protocol}</p>
<p>得到pageContext.request.secure:${pageContext.request.secure}</p>
<p>得到pageContext.response.contentType:${pageContext.response.contentType}</p>
<p>得到pageContext.response.committed:${pageContext.response.committed}</p>
<p>得到pageContext.response.bufferSize:${pageContext.response.bufferSize}</p>
<p>得到pageContext.session.id:${pageContext.session.id}</p>
<p>得到pageContext.session.new:${pageContext.session.new}</p>
<hr>header的一些属性
<p>得到header:${header}</p>
<hr>headerValues的一些属性
<p>得到headerValues:${headerValues}</p>
<hr>cookie的一些属性
<p>得到cookie["user"]:${cookie["user"]}</p>
<hr>pageScope的一些属性
<p>得到pageScope:${pageScope}</p>
<hr>sessionScope的一些属性
<p>得到sessionScope:${sessionScope}</p>
<p></p>
</body>
运行结果:
Hello EL2
pageContext的一些属性
得到pageContext.request.serverPort:8080
得pageContext.request.serverName:localhost
得到pageContext.request.remotePort:53281
得到pageContext.request.remoteHost:0:0:0:0:0:0:0:1
得到pageContext.request.localPort:8080
得到pageContext.request.remoteAddr:0:0:0:0:0:0:0:1
得到pageContext.request.localName:0.0.0.0
得到pageContext.request.contentType:
得到pageContext.request.parameterNames:java.util.Hashtable$EmptyEnumerator@b51404
得到pageContext.request.protocol:HTTP/1.1
得到pageContext.request.secure:false
得到pageContext.response.contentType:text/html;charset=UTF-8
得到pageContext.response.committed:false
得到pageContext.response.bufferSize:8192
得到pageContext.session.id:68104F3410536B7ABBB25F6010007B58
得到pageContext.session.new:false
header的一些属性
得到header:org.apache.commons.el.ImplicitObjects$7@17cf6b6
headerValues的一些属性
得到headerValues:org.apache.commons.el.ImplicitObjects$8@1295fe8
cookie的一些属性
得到cookie["user"]:
pageScope的一些属性
得到pageScope:org.apache.commons.el.ImplicitObjects$1@157b46f
sessionScope的一些属性
得到sessionScope:org.apache.commons.el.ImplicitObjects$3@1071c84
关于变量的作用范围
Jsp的变量范围有 :pageScope requestScope responseScope sessionScope applicatiionScope
当${userId}假设 各个作用范围都有一个userId属性,如何查找?系统 查找时候,会按照范围从小到大的顺序,也就是上面的从左到右的方式查找。一旦查找到就立即结束返回。
如果行访问大范围的一个userId 就要加上范围限定符:比如requestScop.userId