ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Web-прилоТСния

ΠžΡ‚Ρ‡Ρ‘Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ контроля (ΠΈΠ»ΠΈ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимостСй). ΠšΠ»Π°ΡΡΡ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ своих зависимостСй, ΠΎΠ½ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ (Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ setter ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ любой сСрвис). Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ? Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ класс зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. НапримСр, наш ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сСрвис выполняСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΠΏΠΎΡ‡Ρ‚Ρ‹. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ наш сСрвис зависит ΠΎΡ‚ ΡΠ΅Ρ€Π²ΠΈΡΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹. Π’ IoC ΡΡƒΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΠΌ сСрвис ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Web-прилоТСния (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ прСдприятия
  • 1.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСм с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ WEB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ
  • 2. ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ тСорСтичСскиоС обоснованиС примСняСмых для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ
  • 2.1 WEB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Spring framework
  • 2.1.1 АрхитСктура Spring
  • 2.1.2 IoC — инвСрсия контроля
  • 2.2 Struts
  • 2.3 Hibernate
  • 3. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ рСализация поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок использованной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Π°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° являСтся составной Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ процСсса ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… спСциалистов. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ происходит Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚изация Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² тСорСтичСского обучСния, ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ студСнтами умСния ΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ² практичСской Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Основной Ρ†Π΅Π»ΡŒΡŽ производствСнной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ являСтся систСматизация ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°Π½ΠΈΠΉ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ обучСния.

К Π·Π°Π΄Π°Ρ‡Π°ΠΌ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ отнСсти Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ тСорСтичСских Π·Π½Π°Π½ΠΈΠΉ, Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΡƒΠΌΠ΅Π½ΠΈΠΉ ΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ² Π² Ρ…ΠΎΠ΄Π΅ выполнСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

ΠœΠ΅ΡΡ‚ΠΎ прохоТдСния производствСнной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ — ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅Π±-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Компания ИООО «Π­ΠŸΠΠœ БистСмз» .

Π‘Ρ‹Π»ΠΈ поставлСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

Β· ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ структуру прСдприятия ΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ,

Β· ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ бСзопасности ΠΈ ΠΎΡ…Ρ€Π°Π½Ρ‹ Ρ‚Ρ€ΡƒΠ΄Π°,

Β· ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с WEB-тСхнологиями,

Β· Π·Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, построив WEB-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Oracle Database ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Spring, Struts.

Β· ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ для написания Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°.

ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ².

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π» посвящён описанию структуры ΠΈ Π·Π°Π΄Π°Ρ‡ прСдприятия.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠ΅ тСорСтичСскиС свСдСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для понимания ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» прСдставляСт собой ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Ρ…ΠΎΠ΄Π° практичСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ поставлСнной производствСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

1. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ прСдприятия

Компания-Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚ ΠŸΠ°Ρ€ΠΊΠ° высоких Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ «Π­ΠŸΠΠœ БистСмз» (EPAM Systems) являСтся Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡˆΠ½ΠΈΠΉ дСнь ΠΊΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΠΌ поставщиком услуг Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ (Π·Π°ΠΊΠ°Π·Π½ΠΎΠ³ΠΎ) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ Π’осточной Π•Π²Ρ€ΠΎΠΏΠ΅. Бозданная Π² 1993 Π³ΠΎΠ΄Ρƒ, Компания ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π² 11 странах ΠΌΠΈΡ€Π°, Π±ΠΎΠ»Π΅Π΅ 7300 высококвалифицированных спСциалистов Π² ΡˆΡ‚Π°Ρ‚Π΅, ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ расти. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² тысячи слоТных ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для своих Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΌΡƒ ΠΌΠΈΡ€Ρƒ, EPAM Systems Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎ остаётся ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΌ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ Π² Ρ‚Π°ΠΊΠΈΡ… областях ΠΊΠ°ΠΊ: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, тСстированиС, сопровоТдСниС ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π·Π°ΠΊΠ°Π·Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ; интСграция ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π±Π°Π·Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² SAP, Oracle, IBM, Microsoft; миграция ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ; созданиС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ), Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠ² тСстирования ΠΈ ΠΊΠΎΠ½Ρ‚роля качСства ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

1.1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° систСм с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ WEB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ

Π’ Π½Π°ΡˆΠ΅ врСмя тяТСло ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Тизнь Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСктронных устройств ΠΈ ΠΏΡ€ΠΈΡΠΏΠΎΡΠΎΠ±Π»Π΅Π½ΠΈΠΉ. Они Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π½Π°ΠΌ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ дСйствий. WEB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ рСсурс нСсколькими людьми ΠΈΠ»ΠΈ систСмами. WEB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ рСсурс для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ, ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ доступа ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

На Π±Π°Π·Π΅ WEB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ систСму, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΠΎΠΉ бизнСс-ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠ΅ΠΉ.

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ web тСхнология ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ

2. ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ тСорСтичСскиоС обоснованиС примСняСмых для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ

Для создания WEB-прилоТСния, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° MVC (model, view, controller), Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

Β· для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ — Hibernate

Β· Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² — Spring

Β· Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ прСдставлСния — Struts

2.1 WEB-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Spring framework

Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ — ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ выступаСт Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, Π° ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ — Π²Π΅Π±-сСрвСр. Π›ΠΎΠ³ΠΈΠΊΠ° Π²Π΅Π±-прилоТСния распрСдСлСна ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСром ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… осущСствляСтся, прСимущСствСнно, Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅, ΠΎΠ±ΠΌΠ΅Π½ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ происходит ΠΏΠΎ ΡΠ΅Ρ‚ΠΈ. Одним ΠΈΠ· ΠΏΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π² Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Π·Π°Π²ΠΈΡΡΡ‚ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, поэтому Π²Π΅Π±-прилоТСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ сСрвисами.

Spring — это лСгковСсный ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… (J2EE) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π½Π°Ρ†Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ простых JavaBean ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Β· ЛСгковСсный. 2.5 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠΎΠ² Spring-Π°, Ρ‚. Π΅. Π΅ΡΡ‚ΡŒ ΠΌΡ‹ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ наслСдования ΠΎΡ‚ Spring ΠΈ Π½ΠΈΠΊΠ°ΠΊ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌ, максимум ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрфСйс. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΡƒ, Π° Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСрвисами ΠΌΡ‹ ΠΏΡ€ΠΎΡΡ‚ΠΎ обращаСмся ΠΊ Spring, вызывая Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ² дСлаСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ‚ΠΎΠΆΠ΅ интСрфСйсы, Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Ρƒ ΡΡ‚ΠΈΡ… интСрфСйсов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ разная, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Spring ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСсколько Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, различная рСализация доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ Ρ‚. Π΄. Π’Π°ΠΊΠΆΠ΅ Spring ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… прилоТСниях.

Β· Π˜Π½Π²Π΅Ρ€ΡΠΈΡ контроля (ΠΈΠ»ΠΈ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимостСй). ΠšΠ»Π°ΡΡΡ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ своих зависимостСй, ΠΎΠ½ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ (Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ setter ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ любой сСрвис). Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ? Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ класс зависит ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. НапримСр, наш ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сСрвис выполняСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΠΏΠΎΡ‡Ρ‚Ρ‹. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ наш сСрвис зависит ΠΎΡ‚ ΡΠ΅Ρ€Π²ΠΈΡΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹. Π’ IoC ΡΡƒΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π΅ΠΌ сСрвис ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΠΎΡ‡Ρ‚Ρ‹ (new MailService ΠΈ Π΄Π°Π»Π΅Π΅ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), Π° ΠΌΡ‹ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ. По ΡΡƒΡ‚ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π° Π²Ρ…ΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· setter ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Service ΠΈ Π΄Π°Π»ΡŒΡˆΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ с Π½ΠΈΠΌ всё Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ здСсь Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ любой MailService.

Β· АспСктно-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ AspectJ. Π’ Spring Π΅ΡΡ‚ΡŒ своя рСализация АОП, Π½ΠΎ Π²ΡΠ΅ ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AspectJ. Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Ρ‚ΠΎ ΠΠžΠŸ — это Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сквозной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. НапримСр, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая занимаСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ эта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ выносится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΎΠΆΠ΅ выносится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠŸΠΎΡ‚ΠΎΠΌ опрСдСляСм, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈ Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ΠΎ Π΅ΡΡ‚ΡŒ это позволяСт Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ связано со ΡΠΊΠ²ΠΎΠ·Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

Β· Spring — это ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Spring Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΡΠ΅Π±Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΎΠ½ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ ΠΈΡ… ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ. По ΡΡƒΡ‚ΠΈ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new (Ρ‡Π΅Ρ€Π΅Π· Spring Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ конструктор, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ new). Если Π½Π°ΠΌ понадобился ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Spring ΠΈ ΠΎΠ½ Π΅Π³ΠΎ Π²Ρ‹Π΄Π°Π΅Ρ‚. Как ΠΎΠ½ Π΅Π³ΠΎ Π²Ρ‹Π΄Π°Π΅Ρ‚ — это всС ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ. НапримСр, Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· new, Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ Singleton, Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΡƒΠ»Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². IoC Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ находятся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Β· Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ. Π—Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ слоТныС прилоТСния ΠΈΠ· ΠΏΡ€ΠΎΡΡ‚Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, настраиваСмых Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…. Π’Π°ΠΊΠΆΠ΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ J2EE функциями Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ (Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, сообщСния, Π²Π΅Π±).

2.1.1 АрхитСктура Spring

Рис. 1 — АрхитСктура Spring

Β· IoC — Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ

Β· AOP — Spring ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² Π»ΡŽΠ±ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄

Β· Service Abstraction — абстрагируСм благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ интСрфСйсы Spring-Π° ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π—Π° ΡΡ‡Π΅Ρ‚ этого ΠΎΠ½ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΡ‚ Π²ΡΠ΅Π³ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ (Web remoting, EJB, JMS, Scheduling ΠΈΡ‚ΠΏ).

Β· DAO — для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π‘Π”

Β· ORM — JPA, hibername

Β· WEB — классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Web (авторизация, доступ ΠΊ Π±ΠΈΠ½Π°ΠΌ Spring-Π° ΠΈΠ· web)

Β· MVC — создаСт web

2.1.2 IoC — инвСрсия контроля

Как это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ люди. ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€: ΠΎΠ½ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ сСрвиса ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. БСйчас ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ просто создаСт этот сСрвис ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π΄Π΅Π»Π°Π΅Ρ‚ new service ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π°Ρ Π΅ΡΡ‚ΡŒ какая-Π»ΠΈΠ±ΠΎ Ρ„Π°Π±Ρ€ΠΈΠΊΠ° ΠΈ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ„Π°Π±Ρ€ΠΈΠΊΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ ΠΈ ΠΎΠ½Π° ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚. Но Π² ΡΡ‚ΠΎΠΌ случаС ΠΌΡ‹ Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ‚ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. Π’Π°ΠΊ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈ ΡΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

Но ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅? НуТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π», Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ·Π²Π½Π΅, Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π». По ΡΡƒΡ‚ΠΈ это ΠΈ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости (инвСрсия контроля). Π’Π΅ΠΏΠ΅Ρ€ΡŒ получаСтся, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ ΡƒΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΡ… ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚, Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ прСдоставляСт. ΠœΡ‹, ΠΊΠ°ΠΊ Π±Ρ‹, мСняСм Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния.

2.2 Struts

Π’ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π΅ MVC ΠΏΠΎΡ‚ΠΎΠΊ выполнСния прилоТСния всСгда ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ пСрСнаправляСт запросы — Π² Π½Π°ΡˆΠ΅ΠΌ случаС, это HTTP запросы — ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ привязаны ΠΊ ΠœΠΎΠ΄Π΅Π»ΠΈ, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ дСйствуСт ΠΊΠ°ΠΊ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ ΠΌΠ΅ΠΆΠ΄Ρƒ запросом ΠΈ ΠœΠΎΠ΄Π΅Π»ΡŒΡŽ. МодСль прСдставляСт, ΠΈΠ»ΠΈ инкапсулируСт, бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ»ΠΈ состояниС прилоТСния. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ пСрСдаСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ (View). ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ осущСствляСтся ΠΏΡƒΡ‚Π΅ΠΌ обращСния ΠΊ Π½Π°Π±ΠΎΡ€Ρƒ соотвСтствий (mappings) ΠΌΠ΅ΠΆΠ΄Ρƒ МодСлью ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ; ΠΏΡ€ΠΈΡ‡Π΅ΠΌ этот Π½Π°Π±ΠΎΡ€ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ загруТаСтся ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Вакая схСма обСспСчиваСт слабоС связываниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠœΠΎΠ΄Π΅Π»ΡŒΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ прилоТСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅.

Богласно ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρƒ Model-View-Controller, Struts ΠΈΠΌΠ΅Π΅Ρ‚ 3 основных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: сСрвлСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Struts, JSP страницы (это «ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅») ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡƒ прилоТСния («ΠΌΠΎΠ΄Π΅Π»ΡŒ»). Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ это всС взаимодСйствуСт.

Struts’овский сСрвлСт-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ связываСт ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ HTTP запросы ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ срСды, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ JavaServer Pages ΠΈ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ класса org. apache. struts. action. Action, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ прилоТСния. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ (parses) ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» struts-config. xml. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» опрСдСляСт (ΠΏΠΎΠΌΠΈΠΌΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ) соотвСтствия org. apache. struts. action. ActionMappings для Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти соотвСтствия для прСвращСния HTTP-запросов Π² Π΄Π΅ΠΉΡΡ‚вия прилоТСния.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ActionMapping опрСдСляСт:

Β· ΠΏΡƒΡ‚ΡŒ запроса (ΠΈΠ»ΠΈ «URI»)

Β· Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (наслСдника класса Action) для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса

ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ свойства

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Action ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ запрос ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Web-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ), ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ дальшС. НапримСр, Ссли ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Ρ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Action для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого события ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΆΠ΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос Π½Π° Π³Π»Π°Π²Π½ΠΎΠ΅ мСню.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Action ΠΈΠΌΠ΅ΡŽΡ‚ доступ сСрвлСту-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ прилоТСния, ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ сСрвлСта. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ пСрСнаправлСния запроса, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Action ΠΌΠΎΠΆΠ΅Ρ‚ нСявно ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… (shared) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ JavaBeans, помСщая ΠΈΡ… Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Java-сСрвлСтами.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Action ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Bean, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ покупатСля, ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ этот bean Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ сСссии, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ mapping. Mapping’Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сопоставлСн (mapping ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ) JavaServer Page, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅ΠΉ содСрТимоС ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ сСссию, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Struts Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ элСмСнтов бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСно с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ JavaBeans. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Action ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°ΠΌ JavaBean Π±Π΅Π· углублСния Π² Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ инкапсулируСт бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Action ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° управлСния.

JavaBeans Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для управлСния html-Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ Π²Π²ΠΎΠ΄Π° (input forms). ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ являСтся Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ°Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ запросами. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Struts, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ свой собствСнный Π½Π°Π±ΠΎΡ€ классов form bean, унаслСдовав ΠΈΡ… ΠΎΡ‚ org. apache. struts. action. ActionForm, ΠΈ Π»Π΅Π³ΠΊΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ„ΠΎΡ€ΠΌ Π²Π²ΠΎΠ΄Π° Π² ΡΡ‚ΠΈΡ… form bean. Π­Ρ‚ΠΈ beans ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… сСрвлСтами ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, особСнно ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Action.

Form bean ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² JSP для сбора Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ; ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Action для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…; ΠΈ ΠΎΠΏΡΡ‚ΡŒ Π² JSP для заполнСния ΠΏΠΎΠ»Π΅ΠΉ html-Ρ„ΠΎΡ€ΠΌ. Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок, Struts ΠΈΠΌΠ΅Π΅Ρ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для возбуТдСния ΠΈ ΠΎΡ‚обраТСния сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Struts form bean ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² ΠΈΡΡ…ΠΎΠ΄Π½Ρ‹Ρ… Java-ΠΊΠΎΠ΄Π°Ρ…, ΠΈ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ся ΠΊ ActionMapping, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ‰Π΅Π΅ имя свойства. Когда запрос Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Action, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ form bean, сСрвлСт-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π»ΠΈΠ±ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚, Π»ΠΈΠ±ΠΎ создаСт вновь form bean, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Action. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Action ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ содСрТимоС form bean ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΠ° Π²Π²ΠΎΠ΄Π° для Π΄Π°Π½Π½ΠΎΠ³ΠΎ form bean Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ‚Π΅ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Ρ„ΠΎΡ€ΠΌΠΎΠΉ. Когда Π΄Π΅Π»ΠΎ сдСлано, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Action ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΠ² Π΅Π³ΠΎ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ Π²Π²ΠΎΠ΄Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ JSP. ПослС этого ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° HTTP-запрос ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° JavaServer Page.

Π‘Ρ€Π΅Π΄Π° Struts Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… тэгов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ автоматичСски ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ значСния свойств form bean Π² ΠΏΠΎΠ»Ρ html-Ρ„ΠΎΡ€ΠΌ. ЕдинствСнная Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ JSP Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части срСды это ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Π³Π΄Π΅ Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ submit. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ставятся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Action ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ лишь тэга. ΠœΠΎΠ³ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ тэги, зависящиС ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ прилоТСния, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚ JSP.

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ тэги срСды Struts спроСктированы для использования свойств ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ встроСны Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Java. ВсС ΠΌΠ΅Ρ‚ΠΊΠΈ, поля ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ ΠΈΠ· Ρ€Π΅ΡΡƒΡ€ΡΠ° сообщСний (message resource), ΠΈ Java ΠΌΠΎΠΆΠ΅Ρ‚ автоматичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ рСсурс Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΡΡ‚Ρ€Π°Π½Ρ‹ ΠΈ ΡΠ·Ρ‹ΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ сообщСния Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ языкС, просто Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» рСсурсов.

Помимо ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ прСимущСствами Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠΊ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.

Для ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Action ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с Π·Π°ΠΏΡ€ΠΎΡΠΎΠΌ. Однако Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Action Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ JavaBean, для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Π­Ρ‚ΠΎ позволяСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Action ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ пСрСносимыми Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, JavaBean Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½ΠΈ Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Action Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ/ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈΠ· HTTP-запросов ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ классов бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Java-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ… Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Bean бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ соСдиняСтся с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΡΡ‹Π»Π°Π΅Ρ‚ запросы.

Bean бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Action

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Action сохранит Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² form bean Π² Π·Π°ΠΏΡ€ΠΎΡΠ΅ (Ρ‚.Π΅. помСстит form bean Π² context collection — ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π².)

JavaServer Page ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² Π²ΠΈΠ΄Π΅ HTML-Ρ„ΠΎΡ€ΠΌΡ‹

Никогда Π½ΠΈ Action, Π½ΠΈ JSP Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ (ΠΈΠ»ΠΈ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ) ΠΎ Ρ‚ΠΎΠΌ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΠ΅Π» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

НСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³Π»ΠΈ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΠ΅ своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ срСди ΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ собствСнной страны, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ (ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π²Π°) языка ΠΈ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΉ способ прСдставлСния Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ Π΄Π°Ρ‚Ρ‹, числовыС ΠΈ Π΄Π΅Π½Π΅ΠΆΠ½Ρ‹Π΅ значСния. Однако Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ рост Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ web-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΠ΅ этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, частично сдСлал Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Π½Π΅ΠΎΠ±Ρ…одимости Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (i18n) ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (localization).

Struts строится Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Java, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ возмоТности построСния ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ:

Locale — основной Java класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ — java. util. Locale. КаТдая Locale прСдставляСт собой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ страны ΠΈ ΡΠ·Ρ‹ΠΊΠ° (плюс Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ языка), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ способов форматирования Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ ΠΊΠ°ΠΊ числа ΠΈ Π΄Π°Ρ‚Ρ‹.

ResourceBundle — Класс java. util. ResourceBundle обСспСчиваСт основныС инструмСнты для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сообщСний Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… языках. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ смотритС Javadocs — класс ResourceBundle, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Ρ€Π΅Π»ΠΈΠ·Ρƒ JDK.

PropertyResourceBundle — Одна ΠΈΠ· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ResourceBundle позволяСт Π²Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ рСсурсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис «ΠΈΠΌΡ=Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅» («name=value»), Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² свойств. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² рСсурсов (resource bundles) с ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ сообщСния прСдставлСны Π² Π²ΠΈΠ΄Π΅ тСкста.

MessageFormat — Класс java. text. MessageFormat позволяСт Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ части строки сообщСния (Π² ΡΡ‚ΠΎΠΌ случаС ΠΎΠ½ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° рСсурсов) Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, опрСдСляСмыми Π²ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠ»ΡƒΡ‡Π°Π΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡΠΎΠ·Π΄Π°Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ»ΠΎΠ²Π° Π² Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΌ порядкС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках. Π‘Ρ‚Ρ€ΠΎΠΊΠ°-Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒ {0} Π² ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ замСняСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, {1} замСняСтся Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

MessageResources — Класс Struts org. apache. struts. util. MessageResources позволяСт ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ рСсурсов ΠΊΠ°ΠΊ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ строку сообщСния для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Locale (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Locale для Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ) вмСсто Locale, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π΅, Π³Π΄Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° i18n Π² ΡΡ€Π΅Π΄Π°Ρ… Π²Ρ€ΠΎΠ΄Π΅ Struts ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° прСдставлСниСм ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ тСкста ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° для Locale ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Π²ΠΎΠ΄Π° (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² Ρ‚Π°ΠΊΠΈΡ… языках ΠΊΠ°ΠΊ японский, китайский ΠΈ ΠΊΠΎΡ€Π΅ΠΉΡΠΊΠΈΠΉ) возлагаСтся Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚скоС устройство — ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ web-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, слСдуйтС рСкомСндациям, описанным Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ JDK Π½Π° Π²Π°ΡˆΠ΅ΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» свойств (properties file), содСрТащий сообщСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ языка. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ рассмотрСн Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅

Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Java EE Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, отправляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€ ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹. Π’Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ сСрвлСту, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Ρ‘, ΠΏΡ€ΠΈ нСобходимости взаимодСйствуя с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ HTMLΠΎΡ‚Π²Π΅Ρ‚. Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠΎΡ€Ρ‚Π°Π»Π° с ΡΠΎΡ‚нями страниц), Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ являСтся Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ Π»ΠΎΠ³ΠΈΠΊΡƒ отобраТСния, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ слоТной.

Struts Π±Ρ‹Π» создан для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Ρ‘Ρ‚ΠΊΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ модСль (бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ), прСдставлСниС (JSP-страницы) ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ (ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ). Struts прСдоставляСт стандартный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ — сСрвлСт ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ActionServlet ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ срСдства для создания страниц прСдставлСния. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Π΅Π±-прилоТСния ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° struts-config. xml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связываСт Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ модСль, прСдставлСниС ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€.

Запросы ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Π² Π²ΠΈΠ΄Π΅ «Actions» (дСйствий), ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅. Когда ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ запрос, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ Π΅Π³ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Action классу. ПослСдний взаимодСйствуСт с ΠΊΠΎΠ΄ΠΎΠΌ МодСли ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ «ActionForward», строку, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ страницу для отправлСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ пСрСдаётся ΠΌΠ΅ΠΆΠ΄Ρƒ модСлью ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² Π²ΠΈΠ΄Π΅ особых JavaBeans. Богатая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ‚Π΅Π³ΠΎΠ² позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π±ΠΈΠ½ΠΎΠ² ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π±Π΅Π· Java ΠΊΠΎΠ΄Π°.

Struts Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ i18n (ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ), ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π΅Π±-Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚авляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ создания шаблонов ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ «Tiles», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΡ€ΠΎΠΌΠ΅ всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ позволяСт Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π±-страницы.

2.3 Hibernate

Hibernate — Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, прСдназначСнная для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-рСляционного отобраТСния (object-relational mapping — ORM).

ЦСлью Hibernate являСтся освобоТдСниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ программирования ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hibernate ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ проСктирования систСмы классов ΠΈ Ρ‚Π°Π±Π»ΠΈΡ† «Ρ Π½ΡƒΠ»Ρ», Ρ‚Π°ΠΊ ΠΈ Π΄Π»Ρ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ….

Hibernate Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ связи классов Java с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Java с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… SQL), Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт срСдства для автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡ€Π° Ρ‚Π°Π±Π»ΠΈΡ†, построСния запросов ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ тратится Π½Π° Ρ€ΡƒΡ‡Π½ΠΎΠ΅ написаниС SQL — ΠΈ JDBC-ΠΊΠΎΠ΄Π°. Hibernate Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ SQL-запросов ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΡ‚ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², максимально облСгчая пСрСнос (ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) прилоТСния Π½Π° Π»ΡŽΠ±Ρ‹Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… SQL.

Hibernate обСспСчиваСт ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ сохранности Π΄Π°Π½Π½Ρ‹Ρ… (persistence) для «POJO» (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ для стандартных Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²); СдинствСнноС строгоС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ для сохраняСмого класса — Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ конструктора ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²).

Mapping (сопоставлСниС, Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ — ΠΊΠ°Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) Java классов с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… XML Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Java-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. ΠŸΡ€ΠΈ использовании Ρ„Π°ΠΉΠ»Π° XML, Hibernate ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ скСлСт исходного ΠΊΠΎΠ΄Π° для классов Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ хранСния (persistent). Π’ ΡΡ‚ΠΎΠΌ Π½Π΅Ρ‚ нСобходимости, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ аннотация. Hibernate ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» XML ΠΈΠ»ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ схСмы Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ возмоТности ΠΏΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ классами «ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ» ΠΈ «ΠΌΠ½ΠΎΠ³ΠΈΠ΅-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ». Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ связями ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Hibernate Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ рСфлСксивными ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ, Π³Π΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ связь «ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ» с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ экзСмплярами своСго собствСнного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ….

Hibernate ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ сцСнарии:

Β· ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ SQL, Hibernate Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ столбца свойства.

Β· ΠšΠ°Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ пСрСчисляСмого Ρ‚ΠΈΠΏΠ° Java Π΄ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π‘Π”, Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ свойствами.

Β· ΠšΠ°Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ свойства Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ.

3. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ рСализация поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ

ПокаТСм ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Spring+Struts+Hibernate Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ новостного ΠΏΠΎΡ€Ρ‚Π°Π»Π°. Π”Π°Π½Π½Ρ‹ΠΉ web — ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΡΠ΅Π±Ρ просмотр всСх новостСй, просмотр, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ новости, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ новости ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ количСства новостСй. Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ интСрнационализация ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ.

Бтартовая страница Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

Рис. 2 — Бписок всСх новостСй

На Π ΠΈΡ. 3 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ для добавлСния Π½ΠΎΠ²ΠΎΠΉ новости. ПослС наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ БОΠ₯РАНИВЬ происходит валидация, ΠΈ Π΅ΡΠ»ΠΈ Π΅ΡΡ‚ΡŒ ошибки, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ная информация Π½Π΅ ΡΠΎΡ…раняСтся.

Рис. 3 — Π€ΠΎΡ€ΠΌΠ° для добавлСния новости

На Π ΠΈΡ. 4 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ для рСдактирования новости. Π€ΠΎΡ€ΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π²ΠΈΠ΄ ΠΊΠ°ΠΊ ΠΈ Π½Π° Π ΠΈΡ. 3, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΡƒΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.

Рис. 4 — Π€ΠΎΡ€ΠΌΠ° для рСдактирования новости

Π”Π°Π»Π΅Π΅ прСдставим Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ основных кусков ΠΊΠΎΠ΄Π° с Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ коммСнтариями:

Листинг 1. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Spring.

«1.0″ encoding=» Utf-8" ? >

" http://www.springframework.org/schema/beans"

xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance"

xsi: schemaLocation=" http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5 xsd" >

" configProperties" class=" org. springframework. beans. factory. config. PropertyPlaceholderConfigurer" >

" location" >

classpath: /resources/config. properties

" pool" class=" com. epam. news. pool. ConnectionPool" scope=" « destroy-method=» dispose" >

" ${database. driver}" />

" ${database. url}" />

" ${connectionPool. poolSize}" />

" jdbcNewsDAO" class=" com. epam. news. database. JdbcNewsDAO" >

" pool" ref=" pool" />

" hibernateNewsDAO" class=" com. epam. news. database. HibernateNewsDAO" />

" jpaNewsDAO" class=" com. epam. news. database. JpaNewsDAO" />

" /setEnglishLocale /setRussianLocale" class=" com. epam. news. presentation. action. LocaleAction" />

" newsAction" class=" com. epam. news. presentation. action. NewsAction" >

" newsDAO" ref=" hibernateNewsDAO" />

" newsAction" alias=" /saveNews" />

" newsAction" alias=" /newsList" />

" newsAction" alias=" /cancel" />

" newsAction" alias=" /viewNews" />

" newsAction" alias=" /addNews" />

" newsAction" alias=" /editNews" />

" newsAction" alias=" /deleteNews" />

Листинг 2. Класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ запросы, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля.

public class NewsAction extends MappingDispatchAction {

private static final Logger log = Logger. getLogger (NewsAction. class);

private static final String SUCCESS = «success» ;

private INewsDAO newsDAO;

public void setNewsDAO (INewsDAO newsDAO) {

this. newsDAO = newsDAO;

}

public ActionForward list (ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

log. info (NEWS_LIST);

NewsForm newsForm = (NewsForm) form;

newsForm. setNewsList (newsDAO. getList ());

return mapping. findForward (SUCCESS);

}

public ActionForward view (ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

NewsForm newsForm = (NewsForm) form;

int newsId = newsForm. getId ();

log. info (NEWS_VIEW + newsId);

newsForm. setNewsMessage (newsDAO. fetchById (newsId));

return mapping. findForward (SUCCESS);

}

public ActionForward edit (ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

NewsForm newsForm = (NewsForm) form;

int newsId = newsForm. getId ();

log. info (NEWS_EDIT + newsId);

newsForm. setNewsMessage (newsDAO. fetchById (newsId));

return mapping. findForward (SUCCESS);

}

public ActionForward delete (ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

NewsForm newsForm = (NewsForm) form;

String [] selected = newsForm. getSelected ();

log. info (NEWS_DELETE + selected);

List deletedList = new ArrayList ();

for (int index = 0; index < selected. length; index++) {

deletedList. add (Integer. parseInt (selected [index]));

}

newsDAO. remove (deletedList);

return mapping. findForward (SUCCESS);

}

public ActionForward cancel (ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

TraceDeque traceDeque = (TraceDeque) request. getSession (). getAttribute (TRACE_DEQUE);

String back;

if (traceDeque. peekLast (). equals (ADD_NEWS_DO)) {

back = NEWS_LIST_DO;

} else {

back = traceDeque. peek ();

}

log. info (NEWS_CANCEL + back);

ActionForward refererForward = new ActionForward (back, true);

return refererForward;

}

public ActionForward save (ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

NewsForm newsForm = (NewsForm) form;

News news = newsForm. getNewsMessage ();

newsDAO. save (news);

log. info (NEWS_SAVE + news);

String path = mapping. findForward (SUCCESS). getPath ();

ActionForward modifiedForward = new ActionForward (path + «?» + ID +" ="

+ news. getId (), true);

return modifiedForward;

}

public ActionForward add (ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

log. info (NEWS_ADD);

NewsForm newsForm = (NewsForm) form;

newsForm. setNewsMessage (new News ());

return mapping. findForward (SUCCESS);

}

}

Листинг 3. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡƒΠ»Π»Π° соСдинСний:

public class ConnectionPool {

private static final Logger log = Logger. getLogger (ConnectionPool. class);

private static final String POOL_CREATED = «Connection pool created, pool size: «;

private static final String POOL_DESTROYED = «Connection pool destroyed» ;

private String driver;

private String url;

private int poolSize;

private BlockingQueue queue;

private ConnectionPool (String driver, String url, int poolSize) {

this. driver = driver;

this. url = url;

this. poolSize = poolSize;

initialize ();

}

private void initialize () {

try {

Class. forName (driver). newInstance ();

queue = new ArrayBlockingQueue (poolSize);

for (int i = 0; i < poolSize; i++) {

queue. offer (DriverManager. getConnection (url));

}

} catch (SQLException e) {

throw new RuntimeException (e);

} catch (InstantiationException e) {

throw new RuntimeException (e);

} catch (IllegalAccessException e) {

throw new RuntimeException (e);

} catch (ClassNotFoundException e) {

throw new RuntimeException (e);

}

log. info (POOL_CREATED + poolSize);

}

public Connection getConnection () {

Connection connection = null;

try {

connection = queue. take ();

} catch (InterruptedException e) {

throw new RuntimeException (e);

}

return connection;

}

public void returnConnection (Connection connection) {

boolean closed = true;

try {

connection. setAutoCommit (true);

closed = connection. isClosed ();

} catch (SQLException e) {

throw new RuntimeException (e);

}

if (! closed) {

queue. offer (connection);

}

}

public void dispose () {

Connection connection;

if (queue == null) {

return;

}

while ((connection = queue. poll ())! = null) {

try {

if (! connection. getAutoCommit ()) {

connection.commit ();

}

connection. close ();

} catch (SQLException e) {

throw new RuntimeException (e);

}

}

log. info (POOL_DESTROYED);

}

}

Листинг 4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° для Hibernate

«1.0» ? >

«- // Hibernate/Hibernate Mapping DTD 3.0 // EN»

" http://hibernate. sourceforge.net/hibernate-mapping-3.0. dtd" >

" com. epam. news. model. News" table=" news" >

" newsId" name=" id" type=" integer" >

" sequence" >

" sequence" >NEWS_SEQ

" title" name=" title" type=" string" />

" c_date" name=" date" type=" date" />

" brief" name=" brief" type=" string" />

" content" name=" content" type=" string" />

" findAllNews" >

" deleteSelectedNews" >

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ производствСнной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ тСорСтичСскиС ΠΈ ΠΏΡ€Π°ΠΊΡ‚ичСскиС знания, Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΡƒΠΌΠ΅Π½ΠΈΡ. ВыполнСнная Ρ€Π°Π±ΠΎΡ‚Π° ΠΈΠΌΠ΅Π»Π° ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ людям.

Π˜Ρ‚ΠΎΠ³ΠΎΠΌ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ явилось:

Β· Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠΈΡ‚Π΅Ρ‚Π΅ тСорСтичСских Π·Π½Π°Π½ΠΈΠΉ ΠΎ Ρ€Π΅Π»ΡΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π‘Π”, Π‘Π£Π‘Π”;

Β· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ web-тСхнологиях;

Β· Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΠ°ΠΌΠΈ;

Β· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π°Π²Ρ‹ΠΊΠΎΠ² Π°Π½Π°Π»ΠΈΠ·Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ;

Β· ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‹Ρ‚Π° принятия ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ;

Β· ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅;

Β· ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ‹Ρ‚Π° участия Π² Π΄ΠΎΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½Ρ‹Ρ…, ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

1 Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-сайт ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΡ мСста ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ http://www.epam. by/. Π”Π°Ρ‚Π° доступа 20.06.2012.

2 Spring http://www.spring-source.ru/docs_simple. php

3 Struts http://www.struts.ru/userGuide/

4 Hibernate http://ru. wikipedia.org/wiki/Hibernate_ (%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0)

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ