Gymterview
junior

Какая разница между c:set и jsp:useBean

Оба тега создают объекты и помещают их в заданную область видимости, но <c:set> более гибкий: он может устанавливать произвольные значения, а <jsp:useBean> только создаёт экземпляр конкретного Java-класса.

Критерий <c:set> <jsp:useBean>
Создание объекта Любое значение (строка, выражение, EL) Только экземпляр Java-класса
Установка значения Может извлечь из параметров, сессии, EL Создаёт пустой объект
Установка свойств Через вложенный <c:set> Через <jsp:setProperty>
Гибкость Высокая — работает с любыми типами Ограниченная — только JavaBeans
Пример
<!-- c:set — установка произвольного значения -->
<c:set var="userName" value="${param.name}" scope="request" />

<!-- jsp:useBean — создание экземпляра класса -->
<jsp:useBean id="user" class="com.example.User" scope="session" />
<jsp:setProperty name="user" property="name" value="John" />

<c:set> из JSTL является предпочтительным подходом, так как он более лаконичен и поддерживает EL-выражения.

На собеседовании: ключевое различие — <c:set> работает со значениями, <jsp:useBean> — с классами. На практике <c:set> используется чаще.