(转)jstl表达式学习

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/

猜你喜欢

转载自i-conquer.iteye.com/blog/2105447
今日推荐