我们在web项目中会遇到很多的路径分配问题,尤其是部署项目时,相对路径会较为不方便,有时我们需要获取应用属性名,部署绝对路径,以下EL表达式便可以获取:
${pageContext.request.contextPath}
作用:取出部署的应用程序名
表达式的分析:
adminCode -> request.getAttribute("adminCode")
cost.name - > request.getAttribute("cost").getName()
默认情况下EL为调用getAttribute(),获得对象后再访问bean属性(get方法)。
因此若EL为contextPath则等价于request.getAttribute("contextPath")。那么就需要先获取request,然后访问它的属性(contextPath)
-> request.getContextPath();
但request是隐含对象,EL表达式中不能直接使用${requset.contextPath } 这种方式获取,因为这个表达式会被拆成两步:
1. 先获取request -> request.getAttribute("request");
2. 再获取contextPath -> request.getAttribute("request").getContextPath();
此时很明显第一步很奇怪,EL表达式中没有这种表达式(自己获取自己),所以要将这个request当做普通bean来获取,这样另一个隐含对象pageContext提供方法可以获取
request对象,所以使用
${pageContext.request.contextPath }
该表达式可以分成以下两步:
1. 先获取request: pageContext.request -> pageContext.getRequest();
2. 再获取contextPath:pageContext.request.contextPath -> pageContext.getRequest().getContextPath()
要想访问4个隐含对象的bean属性(get方法),那么都需要把他们当做普通的bean获取到并调用。