Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-06-2010, 17: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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Nitter archiviato e XCancel sospeso tre ...
CPU RISC-V e GPU AMD insieme: la demo ch...
Un Raspberry Pi 5 e oltre 800 illustrazi...
Una giornata di Claude Code consuma più ...
Apple Watch Series 11 GPS + Cellular 46m...
Meta One: i nuovi abbonamenti riuniscono...
I chip si progettano prima nel mondo vir...
Resident Evil 7 a 30 FPS su uno Snapdrag...
Ottimo portatile Dell a 829€: Intel Core...
Raspberry Pi Desktop, dock e launcher gr...
Due giorni su un supercomputer, poi sul ...
Fire TV Stick 4K Max a 52,99€ e 4K Plus ...
Un algoritmo alla guida di un'azienda in...
Google Pixel 11 Pro con Pixel Buds Pro 2...
iPhone Duo con Face ID e teleobiettivo: ...
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: 09:37.


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