|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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>
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"); %>
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>
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" />
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" 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 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:42.


















