Web-framework.

Slides:



Advertisements
Hasonló előadás
Fejlett Programozási Technológiák II. Világos Zsolt 1. gyakorlat.
Advertisements

1 Fejlett Programozási Technikák 2. 15/10. Fejlett Programozási Technológiák 2. 2 Az előző előadás tartalma Java Servlet  Servlet Interfész  Servlet.
Szmetankó Gábor Greencode Kft.
M OBILROBOT - PROGRAMOZÓ VERSENY Készítette: Szomjas Oroszlánok Team.
Devosa Iván Szegedi Tudományegyetem C#. A C# A C# (kiejtése: szí-shárp, esetenként cisz) a Microsoft által a.NET keretrendszer részeként kifejlesztett.
Készítsünk DIP-et! Szatucsek Zoltán. OAIS DIP Dissemination Information Package (DIP): The Information Package, derived from one or more AIPs, received.
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
JAX-RS: JAVA API FOR RESTFUL WEB SERVICES. REST ARCHITEKTÚRÁJÚ WEBSZOLGÁLTATÁSOK LÉTREHOZÁSÁRA HASZNÁLJUK. AZ 1.1-ES VERZIÓTÓL KEZDVE A JAX-RS HIVATALOS.
A szoftver mint komplex rendszer (folyt.) A SunTone módszertan 3 dimenziós osztályozási sémája kifinomultabb osztályozást tesz lehetővé.
Informatikai rendszerek általános jellemzői 1.Hierarchikus felépítés Rendszer → alrendszer->... → egyedi komponens 2.Az elemi komponensek halmaza absztrakciófüggő.
Internet tudományos használata
ERASMUS+ DISSZEMINÁCIÓS PLATFORM
Nagyméretű állományok küldése
vizuális megismerés – vizuális „nyelv” vizuális kultúra
DIGITÁLIS VÁSÁRLÁSOK, GENERÁCIÓS KÜLÖNBSÉGEK
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
A Scala programozási nyelv
Webszervizek (JAX-WS, és JAX-RS) bemutatása
Java kódolási konvenciók
Scilab programozás alapjai
videós team Team vezetője: Tariné Péter Judit Tagok:
A C++ programozási nyelv
Az integrált áramkörök (IC-k) típusai és tervezése
LabVIEW bevezetéstől a feszültség-áram karakterisztikáig Vida Andrea
A mesterséges intelligencia alapjai
T.R. Adatbázis-kezelés - Alapfogalmak Adatbázis:
Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök
C# SZINTAKTIKÁJA Az egyes utasítások végén pontosvessző áll
Lexikális elemző: lex (flex)
Dependency Injection Moq Feladat
TÖRTÉNET Magyarországon az 1980-as évek végén kezdődtek az első kísérletek közös katalogizálási rendszerek létrehozására Dr. Mader Béla, a József Attila.
Visual Studio Code Metrics
Animációk.
Programozás I. 5. gyakorlat.
Logikai programozás 2..
Adatbázis-kezelés (PL/SQL)
Innovációs képesség és jólét összefüggései
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
☺ Programozási környezetek Validátorok Fazekas Judit PTI 2010.
Grosz imre f. doc. Kombinációs hálózatok /43 kép
Rendszerfejlesztés gyakorlat
STRUKTURÁLT SERVEZETEK: funkció, teljesítmény és megbízhatóság
Monitor(LCD).
Tájékoztató az Önkormányzati ASP Projektről
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Programozás I. 4. gyakorlat.
Informatikai gyakorlatok 11. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
TÁMOP A pályaorientáció rendszerének tartalmi és módszertani fejlesztése – Regionális workshop Zétényi Ákos.
Oracle Adatbázisok kezelése c#-ban
A Microsoft SharePoint testreszabása Online webhely
Alkalmazott Informatikai Tanszék
ÉRINTŐ Sajátos nevelési igényű gyermekek és fiatalok integrációs programja óvodától a munkába állásig TÁMOP A/
Az iskolai szervezet és fejlesztése
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
Szálszinkronizáció.
A szállítási probléma.
B M Java Programozás 2. Gy: Java alapok IT A N Adatszerkezetek
SQL jogosultság-kezelés
Tájékoztató az EPER pályázati folyamatáról
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Adatforgalom és lokális adattárolás PWA-k esetében
Java alkalmazások 6. Előadás.
Java alkalmazások 3. Előadás.
Algoritmusok.
Kód tördelése és a megjelenés
TDL Test Description Language
Stratégiai gondolkodás
Az objektum orientált programozás alapjai
Előadás másolata:

Web-framework

Framework-ök Felsorolás Struts Turbine Tapestry Spring SwingWeb Cocoon WebWork Maverick Anvil RIFE SOFIA Caramba Stripes OpenXava Barracuda

Amivel foglalkozunk Maverick ActionController Spring-MVC

Maverick

Maverick Struts kistestvére Mi a cél? Megoldás Sokkal egyszerűbb Bonyolult a servlet-programozás egyszerűsítés Nagyméretű servletek helyett  kis méretű modulok Komplex vezérlési folyamat egyszerű leírása Könnyű átláthatóság Megoldás Standard servlet használata Folyamatleírás xml-ben  maverick.xml

Szerkezete MVC alapokon Modellel itt nem foglalkozunk Központban V (view) és C (controller) a kérdés Központban maverick.xml nevű Maverick-leíró speciális web.xml

Példa maverick.xml-re vezérlő logikai neve vezérlő-osztály <?xml version="1.0"?> <maverick version="2.0"> <commands> <command name="runQuery"> <controller class="com.bar.foo.Query"/> <view name="success" type="document" path="queryResult.jsp"> </view> <view name="error" type="document" path="queryFailed.jsp"> </view> </command> </commands> </maverick> megjelenítő view vezérlő kimenete

Működés folyamata <?xml version="1.0"?> <maverick version="2.0"> <commands> <command name="runQuery"> <controller class="com.bar.foo.Query"/> <view name="success" type="document" path="queryResult.jsp"> </view> <view name="error" type="document" path="queryFailed.jsp"> </view> </command> </commands> </maverick> (Valahogyan) megkapta a runQuery vezérlő (controller) a vezérlést Ez azt jelenti, hogy a com.bar.foo.Query osztály perform metódusa kapja a vezérlést Beindul a C-elem, használja az M-elemeket A perform kimenete „success” vagy „error” string Ha „success” a perform kimenete, akkor a queryResult.jsp kapja a vezérlést A bean-eket már a controller előzetesen elkészítette Ha „error” a kimenet, akkor a queryFailed.jsp kapja a vezérlést

Hogyan kap a controller vezérlést? A leírás a web.xml-ben található Bármely *.m formájú URL beindítja a maverick-et <web-app> <display-name>Friendbook Web Application</display-name> <servlet> <servlet-name>dispatcher</servlet-name> <display-name>Maverick Dispatcher</display-name> <servlet-class>org.infohazard.maverick.Dispatcher</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <url-pattern>*.m</url-pattern> </servlet-mapping> </web-app> maverick-servlet servlet hívás url-mintája

Nyelvi váltás request-header Accept-Language eleme alapján <?xml version="1.0"?> <maverick version="2.0" default-view-type="document" > <modules> <shunt-factory provider="org.infohazard.maverick.shunt.LanguageShuntFactory"/> </modules> <commands> <command name="runQuery"> <controller class="com.bar.foo.Query"/> <view name="success" path="en/queryResult.jsp"></view> <view name="success" mode="fr" path="fr/queryResult.jsp"></view> <view name="success" mode="de" path="de/queryResult.jsp"></view> <view name="error" type="document" path="en/queryFailed.jsp"></view> <view name="success" mode="fr" path="fr/queryFailed.jsp"></view> <view name="success" mode="de" path="de/queryFailed.jsp"></view> </command> </commands> </maverick> mód specifikátor

Paraméterek be- és kifelé bemeneti paraméter <?xml version="1.0"?> <maverick version="2.0" default-view-type="document" > <commands > <command name="runQuery"> <controller class="com.bar.foo.Query"/> <param name="color" value="red"></param> </controller> <view name="success" path="queryResult.jsp"></view> <param name="color" value="blue"></param> </view> </command> </commands> </maverick> kimeneti paraméter

Referenciák oldal id-val hivatkozás az oldalra <?xml version="1.0"?> <maverick version="2.0" default-view-type="document" > <views> <view id="loginRequired" path="loginRequired.jsp"> <transform path="trimOutside.jsp"/> </view> <view id="loginFailed" path="loginFailed.jsp"> </views> <commands> <command name="welcome"> ... </command> <command name="weblog"> <controller class="org.wafer.ctl.WebLog"/> <view name="loginRequired" ref="loginRequired" /> <view name="loginFailed" ref="loginFailed"/> <view name="success" path="weblog.jsp"> <transform path="trimInside.jsp"/> </commands> </maverick> oldal id-val hivatkozás az oldalra

Controller programozás Java osztályok Servlet alaposztály org.infohazard.maverick.Command öröklődéssel maverick-alaposztályból újat is lehet Controller perform metódus szükséges! különféle típusok ThrowAway FormBeanUser :itt makeFormBean ThrowAwayFormBeanUser :itt makeFormBean

Példa Controller-re public abstract class ProtectedController extends ThrowAwayFormBeanUser { private HttpSession session; protected String perform() throws Exception { // ellenorzes ControllerContext ctx = this.getCtx(); session = ctx.getRequest().getSession(); HibaTar bean = new HibaTar(); if (session.getAttribute("logged_in") == null) { bean.put("default", "Kérjük jelentkezzen be!"); ctx.setModel(bean); return "login"; } return protectedPerform(); /** * * @return */ protected abstract String protectedPerform(); public HttpSession getSession() { return session;

JSP oldalak készítése „Hagyományos” módon Bean-ek a controllerekben készülnek JSTL alkalmazása form-elem pl. így: <form name="form1" action="/appl/LoginSubmit.m" method="post">

Egyéb template lehetőségek JSP az alap-template Még vannak FOP: pdf-oldalak készítésére Velocity: új fajta template Domify: XML/XSL alapú oldalak

ActionController

ActionController Saját fejlesztés Mi a cél? Megoldás Bonyolut a servlet-programozás egyszerűsítés Nagyméretű servletek helyett  kis méretű modulok Komplex vezérlési folyamat egyszerű leírása Könnyű átláthatóság Megoldás Standard servlet használata Folyamatleírás a servlet-be

Szerkezete MVC alapokon Modellel itt nem foglalkozunk Iniciálás V (view) és C (controller) a kérdés Iniciálás initActions() abstract metódus Process{X}  osztálynév típusú lista initPages() abstract metódus AZONOSITO  oldal.jsp típusú lista

Működés lényege Van egy form A kattintás hatására Ennek van egy proc hidden változója A kattintás hatására Elindul egy vezérlő, ami az ActionController ősosztályából származik Bemegy a proc változó is Innen képződik egy Process{proc} azonosító Az Actions-összerendelésből kiderül, hogy melyik akció kap vezérlést Az akció úgy kap vezérlést, hogy az osztály perform metódusa indul el Az akció egy string változóval tér vissza; ez egy Pages-azonosító Ennek alapján a vezérlés egy jsp oldalra megy ki Az akciók ősosztálya Action abstract osztály Default konstruktor kell Csak perform metódusa van Bean-ek használata a szokásos módon Egyetlen session-bean, ami egy nagy struktúra

Servlet-iniciálás .. public class JspController extends ActionController { public static final String PREPARESOKHELYSEG = "VAROSOK"; .. // abstract metódus public void initActions() { if (actions == null) { actions = new Hashtable(); actions.put("ProcessBevitel", new ProcessBevitel()); .. } } // abstract metódus public void initPages() { if (pages == null) { pages = new Hashtable(); pages.put(PREPARESOKHELYSEG, "soktelepules.jsp"); .. } } .. }

Controller készítés .. public class ProcessBevitel extends Action { //ez az egyetlen szükséges metódus public String perform(HttpRequest request, HttpResponse response, ActionSession session) { //továbblépő oldal String forwrd = null; //session átkódolása JspSession sess = (JspSession)session; //bemenő paraméterek beolvasása String xx = request.getParameter(”xx”); ... //feldolgozás, benne bean-ek készítése és forwrd beállítása ... return forwrd; }

Spring-MVC

Spring-MVC Valójában ez egy framework csomag Mi a cél? Megoldás Az MVC-rész mellett egyéb részek is fontosak (előadáson később) Mi a cél? Bonyolult a servlet-programozás egyszerűsítés Nagyméretű servletek helyett  kis méretű modulok Komplex vezérlési folyamat egyszerű leírása Könnyű átláthatóság Megoldás Standard servlet használata Folyamatleírás xml-ben

Szerkezete MVC alapokon Modellel itt nem foglalkozunk Központban V (view) és C (controller) a kérdés Központban x-servlet.xml nevű Spring-leíró speciális web.xml

Vezérlő xml-ek web.xml <?xml version="1.0"?> <webapp ... > <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>  <servlet-mapping> <url-pattern>*.html</url-pattern> </servlet-mapping> </webapp> http://host:port/hello_world.html springmvc-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...">   <bean name="/hello_world.html" class="springmvc.web.HelloWorldController"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>

Egyszerű controller jsp/hello_world.jsp request-bean HelloWorldController.java public class HelloWorldController implements Controller {  public ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   String aMessage = "Hello World MVC!";   ModelAndView modelAndView = new ModelAndView("hello_world"); modelAndView.addObject("message", aMessage); return modelAndView; } jsp/hello_world.jsp request-bean springmvc-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ...">   <bean name="/hello_world.html" class="springmvc.web.HelloWorldController"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>

HelloworldController osztály public class HelloWorldController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String aMessage = "Hello World MVC!"; ModelAndView modelAndView = new ModelAndView("hello_world"); modelAndView.addObject("message", aMessage); //request-bean!! return modelAndView; }

Request-bean használata Objektum hozzáadása a ModelAndView-hoz Ez egy request hatókörű bean lesz A hozzáadás paramétere a bean string-azonosítója Hívás a jsp-ben String-azonosító alapján

Form-controller CarNewController.java public class CarNewController implements SimpleFormController { ...  public ModelAndView onSubmit(Object command) throws ServletException {   CarManager carManag = new CarManager();   carmanag.createCar((Car)command); return modelAndView(getSuccessView()); } springmvc-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" ... >   <bean name="/hello_world.html" class="springmvc.web.HelloWorldController"/> <bean name="/new_car.html" class="springmvc.web.CarNewController" /> <property name="commandClass" value="springmvc.model.Car"/> <property name="formView" value="carView"/> <property name="successView" value="list_cars.html"> <property name ="validator" > <bean class="springmvc.validator.CarValidator”/> </property> </bean> ... </beans> űrlap-objektum űrlap-oldal továbblépés objektum ellenőrzés

Form controll működése <bean name="/new_car.html" class="springmvc.web.CarNewController" /> <property name="commandClass" value="springmvc.model.Car"/> <property name="formView" value="carView"/> <property name="successView" value="list_cars.html"> <property name ="validator" > <bean class="springmvc.validator.CarValidator”/> </property> </bean> Url-minta alapján egy hívás Minta leírása a web.xml-ben: például *.html az url-minta Hívás direktben vagy egy forma akciójában Beindul a formView-elem GET metódussal Ez tartalmaz egy <form> elemet, ahol carView /jsp/carView.jsp A <form> input-elemei a commandClass-ban class Car, aminek objektumváltozóit használjuk Elküldés POST-tal A bemeneti adatokra beindul a validator Ha ez sikeres, akkor a feldolgozó class meghívódik Ennek végén a successView-beli oldal kap vezérlést A vezérlést itt is ModelAndView(…) metódus adja át

Session bean-ek használata Bean, mint osztály elkészítése Bean definiálása a spring-vezérlőben Getter/setter a bean-re a controllerbe get/set használata controller-en belül Jsp-ben használni lehet <bean id="session" class="hu.brasso.springmvc.util.JspSession" scope="session" init-method="initSession" > <aop:scoped-proxy/> </bean>

Session bean példa springmvc-servlet.xml LoginController osztály … <bean id="session„ class="hu.brasso.springmvc.util.JspSession" init-method="initSession" scope="session" > <aop:scoped-proxy/> </bean> … LoginController osztály public class LoginController extends SimpleFormController { private JspSession sess; protected ModelAndView processFormSubmission(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { ... sess.setHufa(cmdObj.getUsername()); sess.setLogin(new Date()); } public JspSession getSess() { return sess; public void setSess(JspSession sess) { this.sess = sess;

Bean-ek Spring-MVC-vel Request-bean a controller-leíróban minden form-hoz külön bean: commandClass Kilépéskor paraméterként Session-bean kicsit nehézkesebb a kezelése referenciával hivatkozni rá controller-osztályban külön getter/setter return new ModelAndView("hello_world”, "message", aMessage);

JSP oldalak készítése „Hagyományos” módon Bean-ek a controllerekben készülnek JSTL alkalmazása form-elem pl. így: <form:form method="post" name="form1" commandName="Login"> … <td> <form:password path="password" cssClass="Input1" /><br> <form:errors path="password" cssClass="Hiba" /> </td> </form:form>