Scope implicit objects can save you
If all you need is to print the name of a person, and you really don’t care what scope the person is in (or, you do care, but you know there’s only one person out of all four scopes), you just use:
${person.name}
Or, if you’re worried about a potential naming conflict, you can be explicit about which person you want:
${requestScope.person.name}But is there another reason you might have to preface the attribute with the implicit scope object? Other than to control...scoping?
Think about this scenario: if you have a name that’s not in quotes in brackets [ ], that means it MUST adhere to Java naming rules, right? Here, we’re OK, because person is a perfectly legal Java variable name. But that’s because somewhere, someone said,
request.setAttribute("person", p);But an attribute name is a String!
Strings don’t follow Java variable name rules!
That means someone could say:
request.setAttribute("foo.person", p);And then you’d be in trouble, because THIS won’t work:

But you’ll be so thankful for scope objects, because using a scope object lets you switch to the [ ] operator, that can take String names that don’t conform to Java naming rules.

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access