<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.   

    这个是作用域的问题,把JSP的四大作用域看下吧@
      

  2.   

    感觉上
    <%=request.getHeader((String)pageContext.getAttribute("headerName"))%>
    取得的页面传参。就是上一个页面里name="headerName"所对的值
    <c:forEach var="headerName" items="${pageContext.request.headerNames}"> 
    这个是request里的headerNames此外,pageContext.getAttribute("headerName")是否可以用request.getAttribute("headerName")代替? 
    这个要看具体情况,两个是不同的。作用域不一样,所以做好不要混用。
      

  3.   

    pageContext.getAttribute("headerName")是否可以用request.getAttribute("headerName")代替? 
     这个需要明白 page、session、request的作用域才行!
      

  4.   

    page 当前页面范围,application 应用范围,session 会话范围,request 一个请求范围。