Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Web-framework.

Hasonló előadás


Az előadások a következő témára: "Web-framework."— Előadás másolata:

1 Web-framework

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

3 Amivel foglalkozunk Maverick ActionController Spring-MVC

4 Maverick

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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(); /** * */ protected abstract String protectedPerform(); public HttpSession getSession() { return session;

15 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">

16 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

17 ActionController

18 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

19 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

20 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

21 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"); } } .. }

22 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; }

23 Spring-MVC

24 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

25 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

26 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> springmvc-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ..."> <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>

27 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=" ..."> <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>

28 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; }

29 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

30 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=" ... > <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

31 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

32 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>

33 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;

34 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);

35 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>


Letölteni ppt "Web-framework."

Hasonló előadás


Google Hirdetések