el表达式和jsp作用域的问题

来源:百度知道 编辑:UC知道 时间:2024/09/18 13:50:47
<c:forEach var="headerName" items="${pageContext.request.headerNames}">
${headerName}:
<%=request.getHeader((String)pageContext.getAttribute("headerName"))%> <br>
</c:forEach>
以上语句不是很明白。尤其是pageContext.getAttribute("headerName"),我理解的意思是根据 “headerName"取得相应的对象。再把这个对象作为头信息的名字传入getHeader()方法得到头信息的值。但我不明白为什么要兜个圈子,不直接用var="headerName"这个迭代出来的头信息名字作为参数传入?
此外,pageContext.getAttribute("headerName")是否可以用request.getAttribute("headerName")代替?
我查了API,这个pageContext.getAttribute(java.lang.String name)返回page范围内对应的值,或者自己选择范围可以调用getAttribute(java.lang.String name int scope),但是JSP内置对象page并没有page.getAttribute()方法?有谁可以解释一下吗?非常感谢!

1.EL表达式语法:以${开头,以}结束,中间为合法的表达式,具体语法格式如下:
${expression}
参数说明:
Expression:指定要输出的内容,可以是字符串,也可以是由EL运算符组成的表达式。
2.JSP有四种作用域:作用域范围从小到大顺序: pageContext---request---session---application

我给你解释一下把EL寻找要在存储在四个作用于(pagecontext, request,session,application)pagecontext只限于本页面(只在本页面查找),而request只有当servlet或者action(struts中的)用request.setAttrubute("")保存之后用forward方式跳转过来才能获取到而session,和application作用就更大了只要保存的话基本都找的到
你只要理解这个就行了

他把变量 headerName 的值放在了application里面,这样可以保证统一性,改的时候只更改一个,便于管理和维护