Ради согласованности, вероятно, лучше придерживаться одного поколения технологий JSP. Тем не менее, не позволяйте идеализму стоять на пути прагматизма.
Сценарии + выражения (рецепт для кода спагетти):
<%
com.webProject3.beans.User requestedUser = new com.webProject3.beans.User();
requestedUser.setFirstName("Peter");
%>
<%=requestedUser.getFirstName()%>
Стандартные действия:
<jsp:useBean id="user" class="com.webProject3.beans.User">
<jsp:setProperty name="user" property="firstName" value="Peter" />
</jsp:useBean>
<jsp:getProperty name="user" property="firstName" />
JSTL (пользовательские теги) с использованием стандартного действия для создания экземпляра компонента:
<jsp:useBean id="name" class="com.webProject3.beans.User">
<c:set target="${name}" property="firstName" value="Peter" />
</jsp:useBean>
<c:out value="${name.firstName}" escapeXml="false" />
Если компоненты создаются в сервлете контроллера, а не в JSP, стандартные действия также часто могут быть исключены из кода JSTL.
Введение пользовательских тегов проложило путь для других платформ, поэтому часто JSTL также не используется.
Чтобы понять точную причину вашей ошибки, посмотрите, можете ли вы найти сгенерированный код сервлета (если есть). В Tomcat это заканчивается рабочим каталогом с именем вроде org / apache / jsp / foo_jsp.java