Guida rapida a Spring MVC con Velocity

1. Introduzione

Velocity è un motore di modelli di Apache Software Foundation che può funzionare con normali file di testo, SQL, XML, codice Java e molti altri tipi.

In questo articolo ci concentreremo sull'utilizzo di Velocity con una tipica applicazione web Spring MVC.

2. Dipendenze di Maven

Cominciamo abilitando il supporto Velocity - con le seguenti dipendenze:

 org.apache.velocity velocity 1.7   org.apache.velocity velocity-tools 2.0 

Le versioni più recenti di entrambi possono essere trovate qui: velocity e velocity-tools.

3. Configurazione

3.1. Web Config

Se non vogliamo utilizzare un web.xml , configuriamo il nostro progetto web utilizzando Java e un inizializzatore :

public class MainWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext sc) throws ServletException { AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext(); root.register(WebConfig.class); sc.addListener(new ContextLoaderListener(root)); ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext())); appServlet.setLoadOnStartup(1); } }

In alternativa, possiamo ovviamente utilizzare il tradizionale web.xml :

 Spring MVC Velocity  mvc org.springframework.web.servlet.DispatcherServlet  contextConfigLocation /WEB-INF/mvc-servlet.xml  1   mvc /*   contextConfigLocation /WEB-INF/spring-context.xml   org.springframework.web.context.ContextLoaderListener  

Si noti che abbiamo mappato il nostro servlet sul percorso "/ *".

3.2. Spring Config

Esaminiamo ora una semplice configurazione Spring, di nuovo, a partire da Java:

@Configuration @EnableWebMvc @ComponentScan(basePackages= { "com.baeldung.mvc.velocity.controller", "com.baeldung.mvc.velocity.service" }) public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry .addResourceHandler("/resources/**") .addResourceLocations("/resources/"); } @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Bean public ViewResolver viewResolver() { VelocityLayoutViewResolver bean = new VelocityLayoutViewResolver(); bean.setCache(true); bean.setPrefix("/WEB-INF/views/"); bean.setLayoutUrl("/WEB-INF/layouts/layout.vm"); bean.setSuffix(".vm"); return bean; } @Bean public VelocityConfigurer velocityConfig() { VelocityConfigurer velocityConfigurer = new VelocityConfigurer(); velocityConfigurer.setResourceLoaderPath("/"); return velocityConfigurer; } }

E diamo anche una rapida occhiata alla versione XML della configurazione:

     /         

Qui stiamo dicendo a Spring dove cercare le definizioni di bean annotate:

Stiamo indicando che utilizzeremo la configurazione basata sull'annotazione nel nostro progetto con la seguente riga:

Creando i bean " velocityConfig " e " viewResolver " stiamo dicendo a VelocityConfigurer dove cercare i modelli e VelocityLayoutViewResolver dove trovare viste e layout.

4. Modelli di velocità

Infine, creiamo i nostri modelli, iniziando con un'intestazione comune:

e piè di pagina:

 @Copyright baeldung.com 

E definiamo un layout comune per il nostro sito in cui utilizzeremo i frammenti di cui sopra con l' analisi nel codice seguente:

  Spring & Velocity #parse("/WEB-INF/fragments/header.vm") $screen_content #parse("/WEB-INF/fragments/footer.vm") 

Puoi controllare che la variabile $ screen_content abbia il contenuto delle pagine.

Infine, creeremo un modello per il contenuto principale:

Tutorials list

#foreach($tut in $tutorials) #end
Tutorial Id Tutorial Title Tutorial Description Tutorial Author
$tut.tutId $tut.title $tut.description $tut.author

5. Lato controller

Abbiamo creato un semplice controller che restituisce un elenco di tutorial come contenuto per il nostro layout da popolare con:

@Controller @RequestMapping("/") public class MainController { @Autowired private ITutorialsService tutService; @RequestMapping(value, method = RequestMethod.GET) public String defaultPage() { return "index"; } @RequestMapping(value, method = RequestMethod.GET) public String listTutorialsPage(Model model) { List list = tutService.listTutorials(); model.addAttribute("tutorials", list); return "index"; } } 

Infine, possiamo accedere a questo semplice esempio localmente, ad esempio su: localhost: 8080 / spring-mvc-velocity /

6. Conclusione

In questo semplice tutorial, abbiamo configurato l' applicazione Web Spring MVC con il motore di modelli Velocity .

Il codice di esempio completo per questo tutorial può essere trovato nel nostro repository GitHub.