Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Spring MVC: i Controller

Link copiato negli appunti

I controller rappresentano la vera anima del paradigma MVC: sono il componente che viene invocato direttamente dai client che si occupano delle principali logiche di business e che possono esistere anche senza la presenza di Model e di View.

Metodi da mappare e annotations

Il tipo di bean che si occupa del mapping tra url invocato dall'utente e metodo Java da invocare è
l'handlerMapping. L'implementazione di default presente in Spring MVC è la classe
RequestMappingHandlerMapping che permette di sfruttare le java annotations per identificare i
metodi da mappare. Le annotations utili a questo

Annotation Descrizione
@controller Da utilizzare a livello di classe per identificarla come controller
@requestMapping Da utilizzare per evidenziare il metodo e l'url da mappare

Analizziamo un esempio:

@Controller
public class DemoController
{
	@RequestMapping(value="/home")
	public String getIndex()
	{
		return "index";
	}
}

In questo esempio abbiamo creato un controller con un metodo getIndex che risponde all'url /home, ma per poter vedere il nostro controller all'opera mancano ancora alcuni passi; infatti inizialmente dobbiamo definire, all'interno del WebApplicationContext, lo scanner che si occupa di trovare le classi annotate con le annotation di Spring e Spring MVC. Aggiungiamo quindi:

<context:component-scan base-package="com.albertobottarini.springmvc"/>

Una volta configurato possiamo avviare l'applicazione (possibilmente nella ROOT
dell'application server) e puntare i nostri browser verso "http://localhost:8080/home". Se tutto è stato configurato alla perfezione vedremo nello standard error un errore che indica che non esiste nessun handler per la pagina /index. Questo perchè, dato che non è stato definito nessun ViewResolver, Spring MVC non è ancora in grado di capire cosa fare della nostra stringa "index" e quindi cercherà di eseguire un forward non trovando però nessun handler. Ecco l'errore:

WARNING: No mapping found for HTTP request with URI [/index] in DispatcherServlet with name'springmvc'

L'annotation @RequestMapping

Una delle cose più interessanti dell'annotation @RequestParam è però la possibilità di creare URL dinamiche con placeholder da utilizzare al posto dei classici parametri GET che non piacciono
molto agli spider SEO. Guardiamo subito un esempio:

@RequestMapping(value="/book/{id}", method=RequestMethod.GET)
public void getBook(@PathVariable int id)
{
	System.out.println("Requested book " + id);
}

In questo caso abbiamo creato un handler per l'URL /book/{id} e, grazie alla nuova annotation @PathVariable, abbiamo definito la variabile id di tipo int. Quindi invocando come url "/book/10" verrà invocato il nostro metodo avendo come parametro "id = 10". Ovviamente invocando /book
oppure /book/aaa otterremo un errore.

Se il nome del placeholder e del parametro differiscono è possibile utilizzare:

@RequestMapping(value="/book/{idBook}", method=RequestMethod.GET)
public void getBook(@PathVariable("idBook") int id)
{
	// [...]
}

Per recuperare i valori dei parametri inviati alla pagina possiamo utilizzare l'annotation
@RequestParam

@RequestMapping(value="/book", method=RequestMethod.GET)
public void getBookByParam(@RequestParam("bookId") int id)
{
	System.out.println("Requested book " + id);
}

In questo caso anche invocando l'URL /book?bookId=10 otterremo lo stesso effetto.

Ti consigliamo anche