X Код для використання на сайті:
Ширина px

Скопіюйте цей код і вставте його на свій сайт

X Для завантаження презентації, скористайтесь соціальною кнопкою для рекомендації сервісу SvitPPT Завантажити собі цю презентацію

Презентація на тему:
Розробка Web-проектів із використанням Spring Framework

Завантажити презентацію

Розробка Web-проектів із використанням Spring Framework

Завантажити презентацію

Презентація по слайдам:

Слайд 1

Розробка Web-проектів із використанням Spring Framework 2008 Spring

Слайд 2

Spring — це Framework ! Framework — засіб, що дозволяє “склеювати” окремі частини (наприклад, програмні модулі, компоненти) у проект, готовий до застосування. При цьому структура проекту у найбільш загальному вигляді є вже визначеною (залежить від Framework), і від розробника вимагається фактично здійснити налаштування проекту, виходячи із власних потреб. Spring

Слайд 3

Spring чи EJB ? Spring

Слайд 4

Spring чи EJB ? Spring

Слайд 5

Стисло про специфіку Spring Framework 1. Ядро Spring (Core Spring) може розглядатись двояко: як легковаговий (Light-Weight) Framework; як легковаговий (Light-Weight) контейнер (Container ) для управління бізнес-об'єктами (Business Objects) та відношеннями між ними. (Важливо, що навіть при розробці J2EE-проектів далеко не завжди є потреба у використанні усіх можливих сервісів, що надаються Heavy-Weight J2EE контейнерами. У багатьох випадках можна обмежитись легковаговими контейнерами). 2. Core Spring (як легковаговий контейнер) – це IoC-контейнер. 3. (POJO та POJI ). Суттєва специфіка Spring – розроблювана компонентна інфраструктура не регламентується потребами успадкування від специфічних (для Spring) класів чи інтерфейсів. Отже, Spring ґрунтується на POJO (Plain Old Java Object) та POJI (Plain Old Java Interface). Spring

Слайд 6

Spring: POJO (Plain Old Java Object) та POJI (Plain Old Java Interface). Орієнтація на POJO та POJI означає, що спрощується Unit-тестування, забезпечується можливість досить просто застосовувати TDD (Test Driven Development). Для порівняння можна розглянути клас TheServlet (він є Non-POJO, оскільки успадковується від HttpServlet): class TheServlet extends HttpServlet{ … } Для його Unit-тестування потрібно запустити Web/Application сервер, а перед цим забезпечити розгортання (deployment) відповідного компонента на сервері, оскільки для HttpServlet та його розширень необхідно забезпечити контекст, що надається сервером. Те ж саме стосується і класичних компонентів EJB. Spring

Слайд 7

Spring Framework для Web (http://www.springframework.org/documentation) Spring

Слайд 8

Spring та парадигма Model-View-Controller Spring Framework для Web- проектів базується на парадигмі (паттерні архітектурного рівня ще часів Smalltalk) Model-View-Controller (MVC). На MVC-парадигмі базуються такі популярні фреймворки як Struts, WebWork тощо. Як наслідок — можлива інтеграція Spring з іншими фреймворками. (Якщо коротко, то об'єкти Model задають дані, об'єкти View відповідають за відображення даних, об'єкти Controller реагують на дії користувача щодо отримання даних та їх модифікації.) Підтримка різних View. Spring

Слайд 9

Проекти Spring Web MVC Spring

Слайд 10

Трохи історії Web-розробки на Java Java-сервлети — отримання HTML-коду шляхом використання println(). Model 1: JavaServer Pages (JSP) — змішування HTML-коду (“статика”) та Java-коду (“динаміка”). Model 2: Java-сервлети + JSP — cервлети використовуються для керування потоком виконання Web-додатків, а JSP допомагають в отриманні HTML-коду. Model 2 фактично відповідає патерну Model-View-Controller. Як і багато інших Web-фреймфорків Spring Web MVC Framework будується навколо сервлета , що генерується (generic servlet) та відомий як DispatcherServlet чи FrontControler. Саме цей сервлет є точкою підключення клієнтів, що використовують для доступу веб-браузери. Spring

Слайд 11

Ілюстрація до проектів Spring Web MVC (http://www.springframework.org/documentation) Spring

Слайд 12

Ще одна ілюстрація до проектів Spring Web MVC Agile Java Development with Spring, Hibernate and Eclipse By Anil Hemrajani ............................................... Publisher: Sams Pub Date: May 09, 2006 Print ISBN-10: 0-672-32896-8 Print ISBN-13: 978-0-672-32896-1 Pages: 360 Spring

Слайд 13

Проекти Spring MVC Web. Потік робіт (workflow) та ключові складові таких проектів (1/2) 1. Від клієнта запит стосовно деякого ресурсу потрапляє до Spring Front Controller, який реалізовано як сервлет проекту (Web Application). 2. Front Controller відшукує Handler Mapping, який на основі заданого відображення (map) «ресурс» --> «контролер» дозволяє визначити контролер для проведення подальшої обробки запиту. За підключення контролера до процесу обробки запиту відповідає Handler Adapter. 3. Контролер обробляє запит, результатом роботи є об'єкт типу ModelAndView, який повертається до Front Controller. 4. Front Controller, використовуючи View Resolver, визначає відповідне View (View може бути реалізований на основі Jsp, Velocity, Free marker тощо) та передає його клієнту. 1 2 3 4 Spring

Слайд 14

Проекти Spring MVC Web. Потік робіт (workflow) та ключові складові таких проектів (2/2) 1. Від клієнта запит стосовно деякого ресурсу потрапляє до Spring Front Controller, який реалізовано як сервлет проекту (Web Application). 2. Front Controller відшукує Handler Mapping, який на основі заданого відображення (map) «ресурс» --> «контролер» дозволяє визначити контролер для проведення подальшої обробки запиту. За підключення контролера до процесу обробки запиту відповідає Handler Adapter. 3. Контролер обробляє запит, результатом роботи є об'єкт типу ModelAndView, який повертається до Front Controller. 4. Front Controller, використовуючи View Resolver, визначає відповідний View (View може бути реалізований на основі Jsp, Velocity, Free marker тощо) та передає його клієнту. Front Controller (класу DispatcherServlet) Handler Mapping, Handler Adapter Controller, ModelAndView View Resolver Складові Spring MVC Web-проектів Spring

Слайд 15

Front Controller (DispatcherServlet) та файл web.xml (дескрипторний файл web-проектів) . . . springapp org.springframework.web.servlet.DispatcherServlet 1 springapp1 *.htm . . . (Web-) контекст Web Application за замовчуванням задається у файлі /WEB-INF/springapp-servlet.xml Spring

Слайд 16

Варіант використання кількох файлів конфігурації контексту. Файл web.xml . . . org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/ applicationContext.xml, /WEB-INF/ springapp-servlet.xml, /WEB-INF/ yet_appContext.xml . . . Listener Servlet – це “завантажувач контексту” (“Context Loader” ) проекту. (За замовчуванням файлом конфігурації контексту виступає / WEB-INF/ applicationContext.xml.) Файл конфігурації “веб”-контексту за замовчуванням Spring

Слайд 17

Handler Mapping Handler Mapping задає відображення (map) «ресурс» --> «контролер». Чотири варіанти класів для реалізації Handler Mapping (гнучкість Spring! ): SimpleUrlHandlerMapping; BeanNameUrlHandlerMapping; CommonsPathMapHandlerMapping; ControllerClassNameHandlerMapping. (Усі класи містяться у пакеті org.springframework.web.servlet.handler). Приклади використання перших двох класів надаються у наступних двох слайдах. Spring

Слайд 18

Використання SimpleUrlHandlerMapping. Приклад Controller CalcS-servlet.xml (фрагмент) Spring

Слайд 19

Використання BeanNameUrlHandlerMapping. Приклад Реалізації Handler Mapping за замовчуванням використовують саме цей клас. Завдяки замовчуванню можна отримати більш лаконічний вигляд конфігураційного файлу web-контексту. Новий варіант файлу CalcS-servlet.xml (фрагмент) Можна вважати, що у даному випадку Url-адреси використовуються безпосередньо для ідентифікації бінів-контролерів. Spring

Слайд 20

Handler Adapter Можливі різноманітні варіанти класів для реалізації Handler Adapter (знову гнучкість Spring! ), зокрема “готові” класи framework’у: SimpleControllerHandlerAdapter (використовується за замовчуванням, саме ним обмежуються у більшості проектів); SimpleServletHandlerAdapter; ThrowawayControllerHandlerAdapter (усі три класи містяться у пакеті org.springframework.web.servlet.handler); власноруч розроблені класи (вони мають реалізовувати interface HandlerAdapter з того ж пакету org.springframework.web.servlet). Spring

Слайд 21

Контролери (ще раз про гнучкість Spring! ) Spring

Слайд 22

AbstractController. Spring MVC Web проект Hello (Hello World !) Hello-servlet.xml (фрагмент) public class HelloController extends AbstractController{ public ModelAndView handleRequestInternal ( HttpServletRequest request, HttpServletResponse response){ return new ModelAndView("hello.jsp"); } } Spring Application Hello World! hello.jsp AbstractController забезпечує базову підтримку GET та POST методів. Для цього прикладу можна обійтись і без розширення (extends) AbstractController: public class HelloController implements Controller {...} Spring

Слайд 23

Клас ModelAndView Клас ModelAndView (з пакету org.springframework.web.servlet) є контейнерним класом. Відповідні об'єкти-контейнери містять дані стосовно View та Model. При цьому використовується досить високий рівень абстракції: ModelAndView mv = new ModelAndView(myView, myModel). Spring

Слайд 24

Model & View Клас ModelAndView (з пакету org.springframework.web.servlet) є контейнерним класом. Відповідні об'єкти містять дані стосовно View та Model. При цьому використовується досить високий рівень абстракції: ModelAndView mv = new ModelAndView(myView, myModel). Клас View (org.springframework.web.servlet.View) забезпечує підтримку різних View-технологій: JSP, Excel, Pdf, Xslt, Free Marker, Html, Tiles, Velocity, Jasper Reports etc: return new ModelAndView("hello.jsp") (з попереднього слайду). Об'єкти Model (класу org.springframework.ui.ModelMap) є по суті Map- об'єктами, які містять додаткову інформацію, що використовується разом з View для візуального відображення: 1) Map myModel = new HashMap(); ModelAndView mv = new ModelAndView(myView, myModel). 2) Map myModel = new HashMap(); myModel.put("now", now); Spring

Слайд 25

ModelAndView. Приклади 1) ModelAndView mv = new ModelAndView("myView.jsp", "var", var); 2) ModelAndView mav = new ModelAndView("calc.jsp"); mav.addObject("z", z); mav.addObject("x", x); mav.addObject("y", y); // див. також наступний слайд 3) ModelAndView mv = new ModelAndView("myView"). Тут myView є логічним (іменем) View (Logical View) View Resolver: Logical View Physical View Location. myView.jsp myView myView.xml + розташування . . . Spring

Слайд 26

Клас AbstractController. ModelAndView. Приклад: Spring MVC Web проект Calc1 Spring

Слайд 27

Інтерфейс Controller. ModelAndView. Приклад: Spring MVC Web проект springapp public class InventoryController implements Controller { private ProductManager productManager; public ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String now = (new java.util.Date()).toString(); Map myModel = new HashMap(); myModel.put("now", now); myModel.put("products", this.productManager.getProducts()); return new ModelAndView("hello", "model", myModel); } public void setProductManager( ProductManager productManager) { this.productManager = productManager; } } Spring

Слайд 28

Клас SimpleFormController Цей клас стає у нагоді, коли від користувача вимагається уведення чи уточнення деяких даних у полях форми (такі ситуації зустрічаються у більшості розроблюваних веб-проектів). Ґрунтується на концепції “об'єкта форми“ (“командного об'єкта”): в “об'єкті форми” інкапсулюються дані, що вводяться користувачем; далі, використовуючи “об'єкт форми”, такі дані можуть бути задіяні для перевірки (зокрема, так званим валідатором) і повернуті користувачу для виправлення; крім того, на основі “об'єкта форми” можна визначати деякі початкові значення для полів форми. Об'єкт форми SimpleForm Controller Spring

Слайд 29

Використання SimpleFormController. Приклад. (1/5) Об'єкт форми SimpleForm Controller priceincrease.jsp class PriceIncreaseFormController extends SimpleFormController Об'єкт "priceIncrease” (class PriceIncrease) Контролер (фрагмент файлу springapp-servlet.xml) Spring

Слайд 30

Використання SimpleFormController. Приклад . (2/5) (Class PriceIncreaseFormController) public class PriceIncreaseFormController extends SimpleFormController { public ModelAndView onSubmit (Object command) throws ServletException { int increase = ((PriceIncrease) command).getPercentage(); . . . return new ModelAndView(. . .); } protected Object formBackingObject ( HttpServletRequest request) throws ServletException { PriceIncrease priceIncrease = new PriceIncrease(); priceIncrease.setPercentage (20); return priceIncrease; } } Життєвий цикл контролерів для web-сторінок із формами Spring

Слайд 31

Використання SimpleFormController. Приклад. (3/5) (Class PriceIncrease) public class PriceIncrease { private int percentage; public void setPercentage(int i) { percentage = i; } public int getPercentage() { return percentage; } } Клас об'єкта форми Spring

Слайд 32

Використання SimpleFormController. Приклад. (4/5) (Бін-контролер та його складові) . . .

Слайд 33

Використання SimpleFormController. Приклад. (5/5) (Форма у priceincrease.jsp) . . . . . . . . . . . . Фрагменти файлу priceincrease.jsp Командний об'єкт (“об'єкт форми”) Spring

Слайд 34

View Resolver Поставка Spring містить чималий арсенал готових до використання варіантів View Resolver. До того ж можна створювати власні варіанти, реалізовуючи інтерфейс: org.springframework.web.servlet.ViewResolver Spring

Слайд 35

Spring: арсенал View Resolver Чималий арсенал готових до використання варіантів View Resolver: InternalResourceViewResolver; BeanNameViewResolver; FreeMarkerViewResolver; JasperReportsViewResolver; ResourceBundleViewResolver; UrlBasedViewResolver; VelocityLayoutViewResolver; VelocityViewResolver; XmlViewResolver; XsltViewResolver. Spring

Слайд 36

Клас InternalResourceViewResolver . Приклад. Можливості захисту. Не можна безпосередньо дістатись до jsp-сторінок hello, priseincrease, задаючи у браузері їх імена, оскільки сторінки знаходяться у “внутрішньому” підкаталозі /WEB-INF/jsp/.

Слайд 37

???? BeanNameViewResolver. Приклад. Можливість динамічно генерувати View (не тільки за рахунок префіксу-суфіксу!). Приклад: return ModelAndView("pdf") public class PdfGenerator extends org.springframework.web.servlet. view.document.AbstractPdfView {…} Spring

Слайд 38

Використання валідатора (Validator) (1/4) Spring

Слайд 39

Використання валідатора (Validator) (2/4) Spring

Слайд 40

Використання валідатора (Validator) (3/4) PriceIncreaseValidator (початок) import org.springframework.validation.Validator; import org.springframework.validation.Errors; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class PriceIncreaseValidator implements Validator { private int DEFAULT_MIN_PERCENTAGE = 0; private int DEFAULT_MAX_PERCENTAGE = 50; private int minPercentage = DEFAULT_MIN_PERCENTAGE; private int maxPercentage = DEFAULT_MAX_PERCENTAGE; public boolean supports(Class clazz) { return PriceIncrease.class.equals(clazz); } public void setMinPercentage(int i){minPercentage = i;} public int getMinPercentage() { return minPercentage;} public void setMaxPercentage(int i) { . . .} public int getMaxPercentage() { . . .} Spring

Слайд 41

Використання валідатора (Validator) (4/4) PriceIncreaseValidator (завершення) public void validate(Object obj, Errors errors) { PriceIncrease pi=(PriceIncrease)obj; if(pi==null){ errors.rejectValue("percentage", "error.not-specified", null, "Value required."); } else { if (pi.getPercentage() > maxPercentage) { errors.rejectValue("percentage", "error.too-high", new Object[] {new Integer(maxPercentage)}, "Value too high."); } if (pi.getPercentage()

Слайд 42

Додаток 1. Приклад: Calc Sum Spring

Слайд 43

Склад (мінімальний) проекту calc1 (1/2) calc1| WEB-INF| classes| SumController.class | lib | commons-beanutils.jar | spring-2.0.4.jar | . . . | web.xml | CalcS-servlet.xml | calc.jsp CalcS Проект розгорнуто у Tomcat Spring

Слайд 44

Склад (мінімальний) проекту calc1 (2/2) commons-beanutils.jar – утіліти для визначення властивостей JavaBean та доступу до них; commons-digester.jar – засоби обробки XML-документів; commons-logging-1.1.jar – засоби протоколювання. Spring

Слайд 45

Файл WEB-INF/web.xml (дескрипторний файл web- проектів) CalcS org.springframework.web.servlet.DispatcherServlet 1 CalcS *.html Spring

Слайд 46

WEB-INF/CalcS-servlet.xml – конфігураційний файл Spring Framework (задається WebApplicationContext)

Слайд 47

Class SumController import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class SumController extends AbstractController { protected ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("/calc.jsp"); try { int x=Integer.parseInt(request.getParameter("x")); int y=Integer.parseInt(request.getParameter("y")); int z = x + y; mav.addObject("x", x); mav.addObject("y", y); mav.addObject("z",z); } catch (NumberFormatException e){e.printStackTrace();} return mav; } } Model View Spring

Слайд 48

Файл calc.jsp Calc Sum- 1 + = ${z} Spring

Слайд 49

Виконання проекту (із використанням Tomcat) Запущено Tomcat Spring

Слайд 50

Модифікація Calc1-проекту (проектCalc2) // SumController.java import java.util.*; . . . mav.addObject("y", y); mav.addObject("date", new Date()); . . . . . . + = ${z} ${date} Обчислення в JSP: ${x+y} . . . Java Standard Tag Library Model Spring

Слайд 51

Виконання проектів Spring Web MVC на прикладі Calc1 (1/2) 3. SumController обробляє запит, повертаючи об'єкт типу ModelAndView (виробляється методом handleRequestInternal). Такий об'єкт містить інформацію про View (у даному випадку це просто ім'я JSP-файлу — calc.jsp) та деякі дані моделі (у даному випадку значення x, y, z). 1. Запити від користувача (у даному випадку до ресурсу calc.html) надходять до DispatcherServlet (з іменем CalcS) – єдиного сервлету у Spring Web MVC проектах, він відіграє роль FrontControler). 2. DispatcherServlet за конфігуруванням відображення ресурсів (URL-mapping) перенаправляє запит одному з контролерів (у даному випадку відображення визначено для єдиного ресурсу: calc.html --> SumController ). 1 2 3 1 2 3 Spring

Слайд 52

Виконання проектів Spring Web MVC на прикладі Calc1 (2/2) 4. DispatcherServlet передає отримані дані на обробку View-template (при цьому може використовуватись ViewResolver), у даному випадку в якості View-template виступає JavaServer Page (а отже, calc.jsp буде оброблено контейнером Tomcat) 5. DispatcherServlet передає HTML-файл (response) користувачу. 4 4 5 5 Spring

Слайд 53

Додаток 2. Tomcat Spring

Слайд 54

Eclipse (Tomcat plugin) Spring

Слайд 55

Перевірка Tomcat Spring

Слайд 56

Додаток 3. Використання Eclipse (+ Spring IDE plugin) Spring

Слайд 57

Обрання типу проекту — Dynamic Web Proect Spring

Слайд 58

Обрання веб-сервера — Tomcat Spring

Слайд 59

Уточнення “природи” проекту — Spring Nature Spring

Слайд 60

Spring IDE plugin та можливості візуалізації проектування в Eclipse Spring

Слайд 61

Eclipse. Spring Explorer. Open Graph Open Graph Spring

Слайд 62

Eclipse. Spring Explorer. Open Graph (проект greeting) Spring

Слайд 63

Eclipse. Запуск проекту (на сервері): Run As: Run on Server Spring

Слайд 64

Eclipse. Виконання проекту Spring

Слайд 65

“Get your personalized Eclipse” Spring

Слайд 66

Додаток 4. Ant Spring

Слайд 67

Ant Призначення: виконання повторюваних, як правило, рутинних завдань, пов'язаних із розробкою, розгортанням, виконанням проектів. Приклади можливих завдань-цілей (за змістом): компіляція; копіювання файлів (з урахуванням структури каталогів); розгортання проекту; etc. Приклади використання (запусків): ant deploy ant createTables loadData printData Завдання-цілі (та їх імена) визначають- ся у файлі build.xml Конкретні імена завдань Spring

Слайд 68

Приклад запуску Ant ant deploy

Слайд 69

Опис завдань (фрагмент build.xml) - 1 Spring

Слайд 70

Опис завдань (фрагмент build.xml) - 2. (Використання з БД та технологією JDBC API) SELECT * FROM products; JDBC (Java DataBase Connectivity) SQL (Structured Query Language) Перелік завдань (target), пов'язаних із БД: dropTables; loadData; printData; clearData; shutdownDb. Spring

Слайд 71

Опис завдань (фрагмент build.xml) - 3. (Використання з БД та технологією JDBC API) INSERT INTO products (id, description, price) values(1, 'Lamp', 5.00); INSERT INTO products (id, description, price) values(2, 'Table', 75.00); INSERT INTO products (id, description, price) values(3, 'Chair', 22.00); Файл load_data.sql CREATE TABLE products ( id INTEGER NOT NULL PRIMARY KEY, description varchar(255), price decimal(15,2) ); CREATE INDEX products_description ON products(description); Файл create_products.sql для target “createTables” Spring

Слайд 72

Файл build.xml (початковий фрагмент) . . . Для зручності в окремому файлі визначені властивості (properties) для налаштуван-ня на конкретні веб-сервер та СУБД Spring

Слайд 73

Файл build.properties (налаштування на Tomcat 6, hsqldb ) # Ant properties for building the springapp1 appserver.home=c:/tomcat # for Tomcat 5 use $appserver.home}/server/lib # for Tomcat 6 use $appserver.home}/lib appserver.lib=${appserver.home}/lib deploy.path=${appserver.home}/webapps tomcat.manager.url=http://localhost:8080/manager tomcat.manager.username=admin tomcat.manager.password= ##################### DB ########################## db.driver=org.hsqldb.jdbcDriver db.url=jdbc:hsqldb:hsql://localhost db.user=sa db.pw= driverClassName (hsqldb.jar) Spring

Слайд 74

JDBC. Файл build.properties (переналаштування проекту на MySQL ) # Ant properties for building the springapp1 . . . ##################### DB ########################## db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost/test db.user=root db.pw=root driverClassName (mysql-connector-java-3.1.14.jar) Spring

Слайд 75

Файл build.xml. Не мучайтесь, копіюйте! DROP TABLE products; SELECT * FROM products; DELETE FROM products; SHUTDOWN; Не для перегляду, тільки для можливого копіювання! Цей файл (build.xml) майже без змін узято з документації до Spring Framework (http://www.springframework): spring-framework-2.5.3-with-docs.zip Spring

Слайд 76

Додаток 5. Приклад: springapp1 (spring-проект з БД) Проект розроблено на основі прикладу з документації, що надається в одному архіві із Spring Framework (spring-framework-2.5.3-with-docs.zip): spring-framework-2.5.3\docs\MVC-step-by-step): http://www.springframework.org Spring

Слайд 77

Запуск СУБД HSQL у серверному режимі (із визначенням робочої БД test) java -classpath ..\war\WEB-INF\lib\hsqldb.jar org.hsqldb.Server -database test Spring

Слайд 78

Створення БД test (1/3) (з використанням ant) ant createTables loadData printData Налаштування на СУБД HSQL SQL JDBC JDBC (Java DataBase Connectivity) SQL (Structured Query Language) Spring

Слайд 79

Створення таблиць БД test (2/3) (використання SQL JDBC) Target createTables Target loadData Spring

Слайд 80

Створення таблиць БД test (3/3) (виконання ant-завдання) ant createTables loadData printData Spring

Слайд 81

Розгортання проекту (з орієнтацією на використання Tomcat) ant deploy Spring

Слайд 82

Запуск Tomcat catalina start Spring

Слайд 83

Запуск клієнта http://localhost:8080/springapp1 Spring

Слайд 84

Запити ресурсів hello.htm priceincrease.htm Spring

Слайд 85

Використання валідатора (Validator) Spring

Слайд 86

Переналаштування на СУБД MySQL, технологія JDBC

Слайд 87

Використання MySQL (1/4) 1. Створити БД, наприклад з використання HeidiSQL (Frontend MySQL) (MySQL запускається у вигляді служби Windows) Spring

Слайд 88

Використання MySQL (2/4) 2. Зробити наступні заміни у налаштуваннях, пов'язаних із СУБД: 3. Додати у каталог lib файл mysql-connector-java-3.1.14.jar. Все! Проект можна запускати. Spring

Слайд 89

Використання MySQL (3/4) MySQL: створення таблиць БД test (ant-завдання) ant createTables loadData printData Spring

Слайд 90

Використання MySQL (4/4) (Перегляд БД у HeidiSQL) Spring

Слайд 91

Клієнт (проекту springapp2 з MySQL БД) http://localhost:8080/springapp2 Spring

Слайд 92

web.xml (фрагмент) org.springframework.web.context.ContextLoaderListener springapp org.springframework.web.servlet.DispatcherServlet 1 springapp *.htm index.jsp /spring /WEB-INF/tld/spring-form.tld Spring

Слайд 93

springapp-servlet.xml (фрагменти) - (1/2) Spring

Слайд 94

springapp-servlet.xml (фрагменти) - (2/2) Spring

Слайд 95

applicationContext.xml (фрагменти) - (1/3)

Слайд 96

applicationContext.xml (фрагменти) - (2/3) Spring

Слайд 97

applicationContext.xml (фрагменти) - (3/3)

Слайд 98

class Product package springapp.domain; import java.io.Serializable; public class Product implements Serializable { private int id; private String description; private Double price; public void setId(int i) { id = i; } public int getId() { return id; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Double getPrice() { return price; } public void setPrice(Double price) {this.price = price;} public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("Description: " + description + ";"); buffer.append("Price: " + price); return buffer.toString(); } } Spring

Слайд 99

interface ProductDao package springapp.dao; import java.util.List; import springapp.domain.Product; public interface ProductDao { public List getProductList(); public void saveProduct(Product prod); } Spring

Слайд 100

class JdbcProductDao - (1/2) package springapp.dao; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport; import springapp.domain.Product; public class JdbcProductDao extends SimpleJdbcDaoSupport implements ProductDao { public List getProductList() { List products = getSimpleJdbcTemplate().query( "select id, description, price from products", new ProductMapper()); return products; } Spring

Слайд 101

class JdbcProductDao - (2/2) public void saveProduct(Product prod) { int count = getSimpleJdbcTemplate().update( "update products set description = :description, price = :price where id = :id", new MapSqlParameterSource().addValue("description", prod.getDescription()) .addValue("price", prod.getPrice()) .addValue("id", prod.getId())); } private static class ProductMapper implements ParameterizedRowMapper { public Product mapRow(ResultSet rs, int rowNum) throws SQLException { Product prod = new Product(); prod.setId(rs.getInt("id")); prod.setDescription(rs.getString("description")); prod.setPrice(new Double(rs.getDouble("price"))); return prod; } } } Spring

Слайд 102

class PriceIncrease package springapp.service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class PriceIncrease { private int percentage; public void setPercentage(int i) { percentage = i; } public int getPercentage() { return percentage; } } Spring

Слайд 103

class PriceIncreaseValidator - (1/2) package springapp.service; import org.springframework.validation.Validator; import org.springframework.validation.Errors; public class PriceIncreaseValidator implements Validator { private int DEFAULT_MIN_PERCENTAGE = 0; private int DEFAULT_MAX_PERCENTAGE = 50; private int minPercentage = DEFAULT_MIN_PERCENTAGE; private int maxPercentage = DEFAULT_MAX_PERCENTAGE; public boolean supports(Class clazz) { return PriceIncrease.class.equals(clazz); } public void validate(Object obj, Errors errors) { PriceIncrease pi = (PriceIncrease) obj; if (pi == null) { errors.rejectValue("percentage", "error.not-specified", null, "Value required.") } else { if (pi.getPercentage() > maxPercentage) { errors.rejectValue("percentage", "error.too-high", new Object[] {new Integer(maxPercentage)}, "Value too high."); } Spring

Слайд 104

class PriceIncreaseValidator - (2/2) if (pi.getPercentage()

Слайд 105

interface ProductManager package springapp.service; import java.io.Serializable; import java.util.List; import springapp.domain.Product; public interface ProductManager extends Serializable{ public void increasePrice(int percentage); public List getProducts(); } Spring

Слайд 106

class SimpleProductManager package springapp.service; import java.util.List; import springapp.domain.Product; import springapp.dao.ProductDao; public class SimpleProductManager implements ProductManager { private ProductDao productDao; public List getProducts() { return productDao.getProductList(); } public void increasePrice(int percentage) { List products = productDao.getProductList(); if (products != null) { for (Product product : products) { double newPrice = product.getPrice().doubleValue() * (100 + percentage)/100; product.setPrice(newPrice); productDao.saveProduct(product); } } } public void setProductDao(ProductDao productDao) { this.productDao = productDao; } } Spring

Слайд 107

hello.jsp Товари $ Increase Prices Spring

Слайд 108

priceincrease.jsp .error { color: red; }

Слайд 109

index.jsp Spring

Слайд 110

Eclipse. Структура проектів Spring Web MVC calc | WEB-INF | classes | SumController.class | lib | servlet-api.jar | spring-2.0.4.jar | . . . | web.xml | CalcS-servlet.xml | calc.jsp Spring

Слайд 111

Деякі особливості Spring-проектів. Url- або request-mapping (з файлу . . .-servlet.xml) . . .

Слайд 112

Деякі особливості Spring-проектів. ViewResolver (з файлу . . .-servlet.xml) . . . org.springframework.web.servlet.view.JstlView /WEB-INF/jsp/ .jsp . . . ModelAndView mav = new ModelAndView("calc"); calc --> /WEB-INF/jsp/ calc.jsp / Spring

Слайд 113

Контролери Spring Web MVC Spring

Слайд 114

Контролери для web-сторінок без форм (з файлу . . .-servlet.xml) . . . Об'єкт бізнес-рівня public class ReadMyNotesController extends AbstractController { private INoteManager noteManager; protected ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception { . . . public void setNoteManager(INoteManager noteManager) { this.noteManager = noteManager; } . . . Spring

Слайд 115

Контролери для web-сторінок із формами. Життєвий цикл контролерів Spring

Слайд 116

Контролери для web-сторінок з формами (з файлу . . .-servlet.xml) true userToLogin UserDto userLogin userStart.html Валідатор (перевіряє дані, що уводяться у формі) Spring

Слайд 117

Контролери для web-сторінок з формами

Слайд 118

Контролери для web-сторінок з формами. UserLoginFormController public class UserLoginFormController extends SimpleFormController { public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException e) throws ServletException { . . . } protected Object formBackingObject(HttpServletRequest request) throws ServletException { UserDto user = new UserDto(); return user; } private IUserManager userManager; public void setUserManager (IUserManager userManagerService) { this.userManager = userManager; } } Spring

Слайд 119

userLogin.jsp

Слайд 120

Архітектурні рівні та об'єкти DataBase Layer Domain Object Data Access Object (DAO) Business Object Layer Business Object Data Transfer Object (DTO) User Interface Layer Spring

Слайд 121

Приклад. Blog Spring

Слайд 122

Діаграма класів Spring

Слайд 123

User.java public class User implements Serializable { private Long id; private String login; private Set notes = new HashSet(); private Set friends = new HashSet (); . . . public Long getId() { return id; } public void setId(Long id) { this.id = id; } . . . } Spring

Слайд 124

User.hbm.xml

Слайд 125

Note.java public class Note implements Serializable { private Long id; private User user; private String content; . . . public Long getId() { return id; } public void setId(Long id) { this.id = id; } . . . } Spring

Слайд 126

Note.hbm.xml Spring

Слайд 127

DB blog HeidiSQL– front-end MySQL Усі таблиці створюються автоматично, у т.ч. friends Spring

Завантажити презентацію

Схожі презентації

Презентації по предмету Інформатика