Architettura delle Web App

Il secondo capitolo di Head First - Servlets and JSP edito dalla O'Reilly, é dedicato ad una introduzione ad alto livello sull'architettura di una web application.

Container

Le servlet non hanno un main(), sono sotto il controllo di un'altra applicazione Java, detta Container. Un esempio di Container é Tomcat.

L'applicazione web server delega al container le richieste che arrivano dal client per una servlet. Il Container si fa carico di passare alla servlet la request e la response HTTP chiamando i metodi della servlet.

Il Container gestisce:
  • il supporto alle comunicazioni tra le servlet e il web server;
  • il ciclo di vita delle servlet;
  • il supporto multithreading, creando un nuovo thread per ogni richiesta per servlet che riceve;
  • la sicurezza dichiarativa, usando un descrittore XML per il deployment;
  • il supporto a JSP.
Come il Container gestisce una request:
  • crea un oggetto HttpServlerResponse e un HttpServlerRequest;
  • in base alla URL passata determina la servlet richiesta, crea o alloca un thread e passa gli oggetti creati al passo precedente al thread della servlet;
  • chiama il metodo service() della servlet che, a seconda del tipo della richiesta, invoca doGet() o doPost();
  • il metodo della servlet genera la pagina dinamica nell'oggetto response;
  • il Container riprende il controllo, termina il thread, converte l'oggetto response in una response HTTP e la manda indietro al client, infine distrugge gli oggetti request e response.
I tre nomi di una servlet

Una servlet é identificata da un URL, un nome interno, e un nome reale:
  • dal punto di vista del programmatore Java, una servlet é una classe e avrà quindi un path name determinato dal nome del package in cui si trova e dal nome della classe stessa (classes/registration/SignupServlet.class);
  • a livello di progettazione del sistema, alla servlet può essere associato un nome diverso, slegato dai dettagli implementativi (EnrollServlet);
  • per l'utente la servlet ha un URL (register/registerMe).
Lo scopo di questa organizzazione é avere una migliore flessibilità e sicurezza.

Il mapping tra questi nomi é fatto in un documento XML, detto DD (Deployment Descriptor), che contiene un elemento servlet e un servlet-mapping per ogni servlet definita nella web application.

MVC: Model View Controller

Il principio di MVC sta nella separazione della business logic dalla presentazione, mettendoci qualcosa in mezzo, in modo da garantire l'indipendenza delle parti. In questo modo le applicazioni sono più semplici da gestire e si tende a favorire il riutilizzo delle classi.
  • Model: gestisce lo stato dell'applicazione e la sua logica business, é l'unica parte del sistema che parla con il database. Implementato con classi Java normali.
  • Controller: prende l'input dalla request e lo valuta in funzione del Model a cui dice di cambiare in funzione dell'input; rende disponibile il nuovo stato alla View. Implementato dalla servlet.
  • View: responsabile della presentazione, prende l'input e lo gira al Controller, mostra l'output all'user. Implementato via JSP.
J2EE

Un Application Server J2EE include un Web Container (per servlet e JSP) e un EJB Container (per Enterprise JavaBean). In una architettura J2EE "completa" sono gli EJB a farsi carico di implementare la business logic.

Tomcat é un Web Container, non gestisce EJB.

Nessun commento:

Posta un commento