There is more than implicit objects. In EL, you can access scoped variables via their name. When you do so, the variable will be searched in all scopes (page, request, session and application), and returned when found. (actually, the container will call PageContext.findAttribute) In your example, ${vals} will look for a variable called "vals" in the page scope, request scope, session scope and application scope. There is a "vals" attribute in the request scope, the one which has been set in a scriptlet, so ${vals} will return it. Therefore, ${vals} represents an array of
String. Note that because "vals" is in the request, you could also access it via ${requestScope.vals}.