Топ-100Что такое actionBeans в JSP? - CodOrbits
LogoCodOrbits

Раздел: JSP

В этом разделе вы узнаете, как использовать JavaServer Pages (JSP) для генерации HTML-контента на стороне сервера.

Все разделы
Иконка JSP

Что такое actionBeans в JSP?

Last updated: 10 мая 2025 г.

Мы рассмотрели action теги invoke и forward.

Среди часто употребляемых еще есть useBean, setProprety, getProprety.

Бин – это объект обычного класса с конструктором, полями и геттерами, сеттерами для них.

  • useBean – создать экземпляр класса (бин).
  • setProprety – задать значение полю экземпляра.
  • getProprety – получить значение поля экземпляра

Для начала создадим простой класс в папке helloservlet/WEB-INF/classes/com/someclasses на основе которого будет создаваться бин:

1package com.someclasses;
2public class User{
3    private String name;
4
5    public void setName(String name){
6        this.name=name;
7    }
8    public String getName(){
9        return name;
10    }
11}

Создадим бин, присвоим его полям значения и выведем содержимое полей этого бина:

1<html>
2    <head> 
3        <title>ActionBeans JSP</title> 
4    </head>
5    <body>
6        <!--создаем экземпляр User с именем someuser1-->
7        <jsp:useBean id="someuser1" class="com.someclasses.User"/>
8        
9        <!--задаем значение поля name экземпляра someuser1-->
10        <jsp:setProperty name="someuser1" property="name" value="Johnny"/>
11        
12        <!--получаем поле name экземпляра someuser1-->
13        <jsp:getProperty name="someuser1" property="name"/>
14        
15        <!--! Аналогично тому что сверху
16        только Java кодом. -->
17        <%
18            //User someuser1 = new User();
19            //someuser1.setName(John);
20            //someuser1.getName();
21        %>
22    </body>
23</html>

Откроем страницу:

Видим, что на странице с помощью getProperty было извлечено содержимое поля name объекта someuser1.


Зачем нужны actionBeans

Чем же useBean лучше чем просто создать экземпляр класса и задавать и получать значения через геттер сеттер?

Есть ряд преимуществ.

Основным моментом является то, что можно задавать область видимости бина.

Страница, на которой создается бин в области видимости контекста:

1<html>
2<head> <title>ActionBeans JSP</title> </head>
3<body>
4<!--
5    application значит экземпляр User с именем someuser2
6    будет доступен и в других jsp страницах
7-->
8<jsp:useBean id="someuser2" class="com.someclasses.User" scope="application"/>
9<!--
10    вот так, кстати, можно передавать код в бины
11-->
12<jsp:setProperty name="someuser2" property="name" value='<%= "Johnny".toUpperCase() %>‘/>
13<!--
14    теперь, создав идентичный бин на другой jsp странице
15    и вызвав getProperty, получим то, что мы задали на
16    этой странице
17-->
18<jsp:getProperty name="someuser2" property="name"/>
19<a href="actionBeanJSP1.jsp">second jsp page</a>
20</body>
21</html>

Код второй страницы, на которой извлекается бин созданный на первой странице:

1<html>
2<head> <title>ActionBeans JSP</title> </head>
3<body>
4    <!-- Определяем такой же бин,
5         как на прошлой странице -->
6    <jsp:useBean id="someuser2" class="com.someclasses.User" scope="application"/>
7    
8    <!-- Можем вывести значение поля бина,
9         созданного на прошлой странице -->
10    <jsp:getProperty name="someuser2" property="name"/>
11    
12    <!-- То есть этот бин — это тот же бин,
13         что мы создали на прошлой странице -->
14</body>
15</html>

Перейдем на первую страницу и нажмем на ссылку для перехода на вторую:

На второй странице, как видим, то же самое значение поля бина созданного на первой странице.

Как видим, из неявного объекта сессии успешно был извлечен аттрибут, который был положен в сессию на первой странице.


Инициализация бина

Можно инициализировать бин при его создании.

То есть определить его поля сразу при создании.

Благодаря этому инициализация бина происходит только один раз.

То есть если бин с таким id уже был инициализирован на какой-то странице, где-то в приложении, то на другой странице приложения инициализация бина с таким id проходить уже не будет.

На первой странице инициализируем бин:

1<html>
2<head> <title>ActionBeans JSP</title> </head>
3<body>
4<!--Можно инициализировать бин при его создании создавая бин вот таким образом.-->
5<jsp:useBean id="someuser3" class="com.someclasses.User" scope="session">
6    <jsp:setProperty name="someuser3" property="name" value="Jonny"/>
7</jsp:useBean>
8<jsp:getProperty name="someuser3" property="name"/>
9</body>
10</html>

На второй странице попробуем инициализировать бин с таким же id но с другим именем еще раз. Теперь не Johnny а Mike:

1<html>
2<head> <title>ActionBeans JSP</title> </head>
3<body>
4<!-- Попробуем инициализировать бин еще раз с другим именем.
5Теперь не Johnny а Mike -->
6<jsp:useBean id="someuser3" class="com.someclasses.User" scope="session">
7    <jsp:setProperty name="someuser3" property="name" value="Mike"/>
8</jsp:useBean>
9<jsp:getProperty name="someuser3" property="name"/>
10</body>
11</html>

Перейдем на первую страницу видим, что поле name бина инициализировалось значением Johnny.

При переходе на вторую страницу и видим Johnny, а не Mike. То есть инициализация второй раз не проходит.

И работать это всё будет в пределах скоупа, который мы задали.

У нас указана область видимости session. То есть когда сессия закончит свое существование, этот бин опять можно будет инициализировать.


Тип данных бина

Создаваемому бину можно указать тип данных. Смотри пример.

Пример программы:

1<html>
2<head> <title>ActionBeans JSP</title> </head>
3<body>
4
5<jsp:useBean id="threadclass" class="com.someclasses.ThreadClass" type="java.lang.Thread"/>
6<!--Верхняя строчка идентична нижней. ThreadClass наследует Thread.
7То есть в type - класс (или интерфейс) создаваемого экземпляра,
8а в class - класс который наследует этот класс (или интерфейс),
9указанный в type.-->
10<%//Thread threadclass = new ThreadClass();%>
11
12</body>
13</html>

Следующие уроки

Паттерн MVC в веб-разработке на Java

16
мин.

Similar Articles Icon
Divider

Expression Language (EL) in JSP

16
мин.

Similar Articles Icon
Divider

Работа с JSP Standard Tag Library (JSTL)

20
мин.

Similar Articles Icon