JSP-作用域属性名称与EL隐式对象相同

JSP-作用域属性名称与EL隐式对象相同,jsp,el,Jsp,El,你能解释一下我的行为吗?我正在servlet中设置一个请求属性,并在JSP中读取它 1) 调度程序servlet代码: request.setAttribute("someName", someObject); 当然,我可以在JSP中将其理解为${someName} 2) 但是如果我将属性名设置为与某个EL隐式对象名相同,比如 request.setAttribute("requestScope", someObject); 然后我必须把它读为${requestScope.requestSc

你能解释一下我的行为吗?我正在servlet中设置一个请求属性,并在JSP中读取它

1) 调度程序servlet代码:

request.setAttribute("someName", someObject);
当然,我可以在JSP中将其理解为
${someName}

2) 但是如果我将属性名设置为与某个EL隐式对象名相同,比如

request.setAttribute("requestScope", someObject);
然后我必须把它读为
${requestScope.requestScope}


为什么容器能够直接映射案例#1中的属性,但如果属性名称本身是EL隐式对象名称,我们需要嵌套引用,如
${requestScope.requestScope}

EL将首先检查给定变量名称是否为保留(隐式)名称之一变量名,然后按照规范使用它。如果没有,就像在
${someName}
中一样,EL将在页面、请求、会话和应用程序范围中自动搜索恰好具有该名称的属性

您似乎期望这反过来起作用,即首先是属性,然后是隐式对象。事实并非如此。否则将完全中断隐式EL对象的工作