JSTL:javaServer pages Standard Tag Library,是一个不断完善的开源的jsp标签库。JSTL包含两部分内容:标签库和EL表达式语言。
1.EL表达式语言的主要结构如 ${sessionSoap.user.sex},所有EL表达式都是以${开头,以}结尾。这个表达式的意思是从session中取出user,然后取出user的sex属性的值。转换成java代码如下:
User user = (User)session.getAttribute("user");
String sex = user.getSex();
EL表达式用.和[]来导航数据。表达式${sessionSoap.user.sex}也可以写成${sessionSoap.user["sex"]},当然而这也可以混用,如${sessionSoap.users[0].sex}意思可以转换成java代码如下:
User[] users = (User[])session.getAttribute("users");
User user = users[0];
String sex = user.getSex();
当然,而这在不同情况下也会有差异:
(1)当要存取的属性名称中包含一些特殊字符,如.或者-等时,一定要用[],例如${user.x_y},这种情况要替换为${user["x_y"]}
(2)如果要动态取值时,就要用[],.无法做到动态取值,如${sessionScope.user[str]},当str是"name"时,相当于
${sessionScope.user.name},而当str是"sex"时,相当于${sessionScope.user.sex}
2.EL的存取值
假如表达式是${userName},此表达式的意思是从某一范围内取出变量名为userName的值。它的取值顺序是:page--request---session---application。即首先从pageScope中取值,如果取出则返回,如果未取出则去requestScope中去取,依次类推,如果在application中仍未取出值,则返回null,EL表达式对null做了优化,页面不会显示null,而是现实空白。
当然,也可以从指定范围内取出变量,如:
${pageScope.userName},${requestScope.userName},
${sessionScope.userName},${applicatonScope.userName}
3.EL的类型转化
EL除了提供方便存取变量的语法之外,它还有另外一个功能:类型转换。
${user.age+18},如果EL获取的user.age的值为2的话,则表达式的结果为20。这就是EL表达式自动类型转换的好处。但是在jsp1.2中不能这么做,获得值一定为String类型,要把String转换为Integer,然后再进行数据相加。
4.EL表达式的隐含对象共有11个:
PageContext PageScope RequestScope sessionScope applicationScope param paramValues header headerValues cookie initParam
值得注意的有以下两点:1).如果输出场量,如"userName",则不能使用${userName},而应当用""包进来,即${"userName"} 2).PageScope RequestScope sessionScope applicationScope在EL中只能取属性值,而page,request,session,application在jsp中还可以取出其他的信息。如请求头等等。
注意:EL表达式只能通过内置对象取值,也就是只读操作,如果修改某一值需要在后台代码中操作。。
常用的pageContext:
pageContext
我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分
${pageContext.request.queryString}
取得请求的参数字符串
${pageContext.request.requestURL}
取得请求的URL,但不包括请求之参数字符串,即servlet的HTTP地址。
${pageContext.request.contextPath}
服务的webapplication的名称
${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}
取得主机端的服务信息
原文地址:
http://blog.163.com/zsq303288862@126/blog/static/9374596120123174410927/