Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-06-2010, 18:15   #1
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
[Java Spring] Logica basilare del framework MVC, ho capito bene?

Ciao a tutti,
stò seguendo questo tutorial per capire la logica basilare dell'MVC di Spring: http://netbeans.org/kb/docs/web/quic...ps-spring.html

Mi riferisco solo ed eslcusivamente all'esempio più basilare (la sola creazione dello scheletro con NetBeans che praticamente apre semplicemente la pagina di default di Spring MVC)

Praticamente che succede? Io l'ho capita così (ma ho qualche dubbio in merito):

Creo il progetto e tra le varie cose che ho ci stanno 4 file importanti che sono:

1) dispatcher-servlet.xml (che a grandi linee contiene la configurazione per l'esecuzione dell'applicazione)
2) applicationContext.xml
3) redirect.jsp (che redirige semplicemente verso index.jsp)
4) index.jsp

Per capire come funziona per prima cosa esamino il DESCRITTORE DEL PROGETTO: ovvero il file web.xml (dentro WEB-INF) e tra le varie cose c'è questo pezzo di codice che specifica l'entry point di default dell'applicazione:

Codice:
<welcome-file-list>
    <welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
Cos'è di preciso l'entry point dell'applicazione? Ad occhio e da quello che sò di Java in genere è la prima cosa che deve essere eseguita (ovvero la pagina redirect.jsp) un po' come in Java SE il metodo main() è l'entry point...ho capito bene?

Quindi se ho ben capito questa configurazione dice che l'entry point e è il file redirect.jsp che semplicemente redireziona verso la pagina index.html (FILE CHE DI FATTO NON È PRESENTE NEL SISTEMA...LA RICHIESTA DOVRÀ ESSERE GESTITA IN MANIERA IDONEA)

poichè contiene questo codice:
Codice:
<% response.sendRedirect("index.htm"); %>
E' da notare che la pagina redirect.jsp redirige verso una pagina index.html che non esiste ed in seguito il sistema dovrà trattare in qualche modo specifico tale richiesta (almeno credo...ditemi se ho capito male)

Poi andando avanti nell'analisi dello scheletro del progetto base creato da NetBeans:

Spring usa una classe chiamata DispatcherServlet che da quello che ho capito che inoltra tutte le richieste HTTP ai corretti gestori\controllori (che sono implementati con servlet o pagine JSP, giusto?)

Sempre dentro al file web.xml ho questo pezzo di codice:
Codice:
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
Ecco quì ho dei dubbi abbastanza seri sul significato di questa roba...praticamente dice che mappa tutti i file con estensione *.html del DispatcherServlet...da quello che ho capito in pratica nella prima parte (tra i tag <servlet> e </servlet> lui si carica la classe DispatcherServlet e nei tag <servlet-mapping> e </servlet-mapping> gli dice che deve "gestire" col DispatcherServlet tutti i file con estensione *.htm

In pratica da quello che ho capito gli si stà dicendo: Se trovi un fil con estensione *.htm sarà il Dispatcher-Servlet a gestirlo in qualche modo inoltrando la richiesta di gestione HTTP ad uno specifico controllore che farà qualcosa di specifico per i file *.htm

Ho capito bene o stò facendo casini?

Se avessi capito bene il discorso continuerebbe così:

La configurazione del DispatcherServlet (come si deve comportare questa classe che gestisce le richieste HTTP) è contenuta nel file dispatcher-servlet.xml

Tale file definisce 3 beans (un bean dovrebbe essere una generica classe in Spring che fà qualcosa)
Questi 3 bean sono:

1) indexController
2) viewResolver
3) urlMapping

e vengono definiti tramite questo codice:
Codice:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="/index.htm">indexController</prop>
        </props>
    </property>
</bean>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/jsp/"
      p:suffix=".jsp" />

<bean name="indexController"
      class="org.springframework.web.servlet.mvc.ParameterizableViewController"
      p:viewName="index" />
Quindi...quando il DispatcherServlet riceve una richiesta HTTP di accesso ad un file con estensione *.htm (come appunto il nostro index.htm) la deve gestire mediante la configurazione presente nel file dispatcher-servlet.xml

Per prima cosa guarda nella definizione del bean urlMapping se c'è un controllore che può risolvere tale richiesta e trova questa roba che mappa proprio la richiesta HTTP per il file "index.htm" con il bean indexController...quindi che fà in pratica? la dispaccia al bean indexController o cosa?

Se avessi capito bene a questo punto la richiesta HTTP viene dispacciata a runtime al bean indexController.

indexController è un'estensione della classe ParameterizableViewController fornita da Spring che è una classe che riceve una richiesta e di fatto invoca un metodo che ritorna una view (che credo sia la roba da visualizzare)

In particolare il pezzo di codice:
Codice:
p:viewName="index"
restituisce la view chiamata name che è risolta usando la classe viewResolver in /WEB-INF/jsp/index.jsp perchè di fatto la classe viewResolver cerca in /WEB-INF/jsp il nome logico "index" appendendogli l'estensione jsp

Quindi il workflow dell'esecuzione di questo scheletro dovrebbe essere il seguente:

Un utente accede alla mia applicazioncina web (lo scheletro appena descritto), in web.xml è specificato che l'entry point di tale applicazione è la pagina redirect.jsp che redirige verso la pagina index.htm, ciò genera una richiesta HTTP.

Tale richiesta HTTP è gesitata dalla classe DispatcherServlet secondo la configurazione presente nel file dispatcher-servlet.xml. In tale file troviamo proprio la mappatura di come deve essere gestita la richiesta di accesso ad un file chiamato"index.html", cioè usando il bean chiamato indexController che riceve la richiesta HTTP e ritona una view il cui nome logico è "index". A questo punto si usa il bean viewResolver che risolve il nome della view aggiungendo .jsp al nome logico e chiamandola dalla cartella /WEB-INF/jsp/

Quindi infine viene invocata la pagina /WEB-INF/jsp/index.jsp che stampa l'Hello World

mmm...spero di essere stato abbastanza chiaro e spero che qualcuno riesca a darmi delle conferme e a chiarire i miei dubbi

Grazie
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
ARCTIC Senza AI 370: il PC 'sotto la scr...
Corsair 3200D, il mid-tower sotto i 100€...
Esiste un SSD NVMe M.2 2280 da 16 TB, ma...
Speciale LEGO in sconto su Amazon: set d...
Il citofono si evolve: ecco le novit&agr...
MindsEye cambia rotta: Build A Rocket Bo...
Offerte Amazon in tempo reale: i miglior...
Ecco come potrebbe apparire Project Heli...
Carl Pei immagina un futuro senza app: g...
Google lancia il "vibe design"...
NVIDIA non ha intenzione, almeno per ora...
Recensione Realme 16 Pro+ 5G: la fascia ...
FBI, ammesso l'acquisto di dati privati:...
Realme 16 Pro e 16 Pro+ in evidenza: car...
I prossimi mid-range di Samsung utilizze...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v