关于在JSP页面中为何必定要用${pageContext.request.contextPath}来获取项目路径,而不能用${request.contextPath}?

这里的疑问在于pageContext和request都是JSP中的内置对象之一,为何不直接用${request.contextPath}来获取项目路径?html

出现这种疑问,实际上是将JSP的内置对象和EL表达式的内置对象混淆了。java

JSP的9大内置对象:web

application:是servletContext的实例,表明JSP所属的web项目自己服务器

config:是servletConfig的实例,表明当前JSP的配置信息cookie

exception:是java.lang.Throwable的实例,该对象只有在JSP页面中设置了isErrorPage为true时,才能使用session

out:jspWriter的实例,表明JSP页面的输出流app

page:表明该页面自己,没有太大用处
jsp

pageContext:页面上下文对象htm

request:是httpservletrequest的实例,表明一次请求对象

response:是httpservletresponse的实例,表明服务器的响应

session:是Httpsession的实例,表明一次会话

EL表达式的11个内置对象:(EL表达式的格式${表达式},它是一种简单的数据访问方式,是为了在JSP页面中不使用Java脚本语言而引进的)

pageContext:表明该页面的pageContext对象,和JSP的pageContext对象相同

pageScope:用于获取page范围内的属性值

requestScope:用于获取request范围内的属性值

responseScope:用于获取response范围内的属性值

sessionScope:用于获取session范围内的属性值

applicationScope:用于获取application范围内的属性值

param和paramValues:用于获取请求的参数值

header和headerValues:用于获取请求头信息

cookie:用于获取cookie中的值

initParam:用于获取web应用的初始化信息

经过以上比较,不难发现EL表达式中只有pageContext对象,而没有request对象,request对象是JSP的内置对象。那么在EL表达式中获取request对象,只能经过${pageContext.request}获取,同理,response和session对象也得这样得到。因此在获取项目绝对路径时,只能经过${pageContext.request.contextPath}来获取,对应于Java脚本语言中的<%=request.getContextPath()%>的方式

相关文章
相关标签/搜索