So che questa domanda è contrassegnato come risolto già, ma voglio aggiungere un immagine più recente spiegare questo modello in dettaglio (fonte: primavera in azione 4):
Spiegazione
Quando la richiesta lascia il browser (1), contiene informazioni su ciò che l'utente sta chiedendo. Al minimo, la richiesta porterà l'URL richiesto. Ma può anche contenere dati aggiuntivi, come le informazioni inviate in un modulo dall'utente.
La prima sosta nei viaggi della richiesta è a Spring's DispatcherServlet. Come la maggior parte dei framework Web basati su Java, le richieste di canalizzazioni Spring MVC tramite un singolo servlet del front controller. Un front controller è un modello di applicazione Web comune in cui un singolo servlet delega la responsabilità di una richiesta ad altri componenti di un'applicazione per eseguire l'elaborazione effettiva. Nel caso di Spring MVC, DispatcherServlet è il front controller. Il lavoro del DispatcherServlet è di inviare la richiesta a un controller MVC Spring. Un controller è un componente Spring che elabora la richiesta. Ma un'applicazione tipica può avere diversi controller, e DispatcherServlet ha bisogno di aiuto per decidere a quale controller inviare la richiesta. Quindi il DispatcherServlet consulta uno o più mapping del gestore (2) per capire dove sarà la prossima fermata della richiesta. La mappatura del gestore presta particolare attenzione all'URL trasportato dalla richiesta quando prende una decisione. Una volta scelto un controller appropriato, DispatcherServlet invia la richiesta in modo allegro al controller selezionato (3). Al controller, la richiesta interrompe il carico utile (le informazioni inviate dall'utente) e attende pazientemente che il controller elabori tali informazioni. (In realtà, un controller ben progettato esegue l'elaborazione minima o nulla e invece delega la responsabilità della business logic a uno o più oggetti di servizio.) La logica eseguita da un controller spesso genera alcune informazioni che devono essere riportate indietro all'utente e visualizzato nel browser. Questa informazione è indicata come il modello. Ma l'invio di informazioni non elaborate all'utente non è sufficiente, deve essere formattato in un formato user-friendly, tipicamente HTML. Per questo motivo, è necessario fornire le informazioni a una vista, in genere una JavaServer Page (JSP). Una delle ultime cose che un controller fa è impacchettare i dati del modello e identificare il nome di una vista che dovrebbe rendere l'output. Invia quindi la richiesta, insieme al modello e al nome della vista, al DispatcherServlet (4). In modo che il controllore non venga accoppiato a una vista particolare, il nome della vista passato a DispatcherServlet non identifica direttamente un JSP specifico. Non suggerisce necessariamente che la vista sia una JSP. Invece, porta solo un nome logico che verrà utilizzato per cercare la vista effettiva che produrrà il risultato. Il DispatcherServlet consulta un risolutore di viste (5) per mappare il nome della vista logica in un'implementazione specifica della vista, che può essere o non essere una JSP. Ora che DispatcherServlet sa quale vista renderà il risultato, il lavoro della richiesta è quasi finito. La sua fermata finale è all'implementazione della vista (6), in genere un JSP, in cui vengono forniti i dati del modello. Il lavoro della richiesta è finalmente completato.La vista utilizzerà i dati del modello per rendere l'output che verrà riportato al client dall'oggetto di risposta (non particolarmente laborioso) (7).
Grande riposte, ora una domanda: come mai DispatcherServlet identifica anche il nome della classe e il nome del metodo. Puoi mostrarmi un esempio di una configurazione in cui ho due classi e due nomi di metodi e come DispatcherServlet cattura la richiesta giusta. – Kevin
Effettua la scansione del percorso della classe all'avvio per tale annotazione e crea una mappatura di "/pages/Home.html" nel metodo Class +. Se avessi due metodi che hanno entrambi "/pages/Home.html" senza altre restrizioni nelle loro annotazioni, questo sarebbe un errore e genererà eccezioni a te. Puoi anche collegarlo con XML se sei vecchio. – Affe
Abbiamo bisogno di un file xml 'Servlet Dispatcher' quando si utilizza l'annotazione' @ RestController'? – viper