Разница между Java-бином и сессией для управления сессиями в JSP - PullRequest
2 голосов
/ 23 июня 2011

Управляя сеансом пользователя в jsp, мы иногда используем сеансы, устанавливая varialble с помощью session.setAttribute (), а с другой стороны, мы можем создать объект bean-объекта java (установив область для сеанса) для хранения пользовательской информации и можем извлечь ее для другогостр.Кто-нибудь может сказать мне, в чем разница между этими двумя вещами?

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Есть ряд отличий.

Во-первых, когда вы сохраняете что-то в качестве атрибута, оно сохраняется как объект, поэтому его нужно преобразовывать в то, чем оно является на самом деле, когда вы его извлекаете, бин всегда является тем классом, которым он является.

Во-вторых, когда вы используете боб, вам не нужно беспокоиться о том, создан он или нет. Тег jsp: useBean будет обращаться к бину, если он уже был создан, и создавать его, если он не был создан, поэтому, если вы хотите вызвать функцию или использовать метод get, вам гарантированно, что он существует при использовании бина. Если вы планируете сохранить его в переменной сеанса, но попытаетесь получить к нему доступ, прежде чем сохранить его, он вернет значение null, а вызов функции вызовет некоторые проблемы.

Обычно вы используете переменную сеанса для передачи информации, в то время как вы используете бины для передачи классов, у которых есть функции, которые вы, возможно, захотите вызвать.

Так что, если вы планируете передавать относительно простые данные (например, строки), нет ничего плохого в том, чтобы добавить их в переменную сеанса. В качестве значения имеет значение null, просто будьте осторожны при сравнении (например, делайте string_var.equals ((String) session.getAttribute ("attribute_name")) not ((String) session.getAttribute ("attribute_name"))). equals (string_var ) в качестве второго может быть null.equals (), который не определен).

Если вы программируете в среде MVC, то (насколько я понимаю) вы обычно используете bean-компоненты для записи в сессионную (или другую, в зависимости от ситуации) переменную, тогда ваша страница JSP загрузит информацию из переменная сеанса. Это (среди прочего) делает веб-страницу безопасной для обновления (то есть, если вы нажмете кнопку обновления, она просто снова получит информацию из переменной сеанса вместо того, чтобы снова выполнять весь код и перезагружать информацию из переменной сеанса), что это большая проблема, когда вы добавляете информацию, увеличиваете или уменьшаете ее.

Правда, я относительно новичок в JSP, но это мое понимание ситуации.

1 голос
/ 23 июня 2011

Это просто несколько разные способы передачи одних и тех же данных.

Как вы говорите, вы можете либо:

(1)

session.setAttribute("entry", entry);

или (2)

session.setAttribute("name", entry.getName());
session.setAttribute("address", entry.getAddress());
session.setAttrubute("phone", entry.getPhone());

Тогда для (1) JSP может включать в себя:

Name: ${entry.name}<br/>
Address: ${entry.address}<br/>
Phone: ${entry.phone}<br/>

, тогда как для (2) эквивалентный JSP может быть:

Name: ${sessionScope['name']}<br/>
Address: ${sessionScope['address']}<br/>
Phone: ${sessionScope['phone']}<br/>

(или вы можете использовать <c:set> для установки некоторых локальных переменных, чтобы сделать приведенный выше код более читабельным).

По сути, оба одинаковы, но (1) использует меньше кода и их легче читать и понимать.

(Хотя я сам еще новичок в Java EE, так что я не возражаю против более опытного мнения!)

...