That is expexcted behaviour.You can't iterate over User
referenece as this is not collection like List,Set,Map
There is no need of inner loop. You can use below code
<c:forEach var="entry" items="${userMap}" varStatus="status">
<tr>
<td> ${entry.key} </td> <!-- key alone will get displayed if I comment the 'entry.values' iteration forEach loop-->
<td> ${entry.value.userId} </td>
<td> ${entry.value.userName} </td>
<td> ${entry.value.age} </td>
</tr>
</c:forEach>