Web-framework

Download Report

Transcript Web-framework

Web-framework

• Felsorolás – Struts – Turbine – Tapestry – Spring – SwingWeb – Cocoon – WebWork – Maverick – Anvil – RIFE – SOFIA – Caramba – Stripes – OpenXava – Barracuda

Framework ök

Amivel foglalkozunk • Maverick • ActionController • Spring-MVC

Maverick

Maverick

• Struts kistestvére – Sokkal egyszerű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  maverick.xml

Szerkezete • MVC alapokon • Modellel itt nem foglalkozunk

– 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 megjelenítő view vezérlő kimenete

Működés folyamata

• • • • (Valahogyan) megkapta a – Ez azt jelenti, hogy a kapja a vezérlést

runQuery

vezérlő (controller) a vezérlést

com.bar.foo.Query

osztály

perform

metódusa 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

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 kapja a vezérlést

Hogyan kap a controller vezérlést?

• A leírás a web.xml-ben található Friendbook Web Application dispatcher Maverick Dispatcher org.infohazard.maverick.Dispatcher 2 dispatcher *.m maverick-servlet servlet hívás url-mintája • Bármely *.m formájú URL beindítja a maverick-et

Nyelvi váltás

request-header Accept Language eleme alapján mód specifikátor

Paraméterek be- és kifelé

bemeneti paraméter kimeneti paraméter

Referenciák

id="loginRequired"

path="loginRequired.jsp"> ...

ref="loginRequired"

/> 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 ThrowAwayFormBeanUser :

itt makeFormBean

:

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

/** * @return */ 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:

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?

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

• MVC alapokon

Szerkezete

• Modellel itt nem foglalkozunk – 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 – 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 – Ennek alapján a vezérlés egy jsp oldalra megy ki metódusa indul el – Az akció egy string változóval tér vissza; ez egy Pages-azonosító 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 – 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

– 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

springmvc

org.springframework.web.servlet.

DispatcherServlet

1

springmvc

*.html http://host:port/hello_world.html

springmvc-servlet.xml

Egyszerű controller

public class HelloWorldController implements Controller { public ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

HelloWorldController.java

jsp/hello_world.jsp

String aMessage = "Hello World MVC!"; ModelAndView modelAndView = new ModelAndView("hello_world"); modelAndView.addObject("message", aMessage); } } return modelAndView; request-bean

springmvc-servlet.xml

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

...

Form controll működése

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

Session bean példa

springmvc-servlet.xml

public class private

LoginController JspSession sess;

extends

SimpleFormController {

protected

ModelAndView processFormSubmission(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)

throws

...

sess.setHufa(cmdObj.getUsername()); sess.setLogin(

new

Date()); ...

} Exception {

LoginController osztály 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

return new

ModelAndView("hello_world”, "message", aMessage); • Session-bean • kicsit nehézkesebb a kezelése • referenciával hivatkozni rá • controller-osztályban külön getter/setter

JSP oldalak készítése • „Hagyományos” módon • Bean-ek a controllerekben készülnek • JSTL alkalmazása

– form-elem pl. így: