Guia rápido para Spring MVC com Velocity

Guia rápido para Spring MVC com Velocity

1. Introdução

Velocity é um mecanismo de modelo da Apache Software Foundation que pode funcionar com arquivos de texto normais, SQL, XML, código Java e muitos outros tipos.

Neste artigo, vamos nos concentrar na utilização do Velocity com um aplicativo da web Spring MVC típico.

2. Dependências do Maven

Vamos começar ativando o suporte Velocity - com as seguintes dependências:


    org.apache.velocity
    velocity
    1.7



    org.apache.velocity
    velocity-tools
    2.0

As versões mais recentes de ambos podem ser encontradas aqui:velocityevelocity-tools.

3. Configuração

3.1. Configuração da Web

Se não quisermos usar umweb.xml, vamos configurar nosso projeto web usando Java e um inicializador:

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);
    }
}

Como alternativa, podemos usar o tradicionalweb.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
    

Observe que mapeamos nosso servlet no caminho "/ *".

3.2. Spring Config

Vamos agora revisar uma configuração simples do Spring - novamente, começando com Java:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages= {
  "com.example.mvc.velocity.controller",
  "com.example.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 vamos também dar uma olhada rápida na versão XML da configuração:


    
    
    
        
            /
        
    
    
        
        
        
        
    

Aqui estamos dizendo ao Spring onde procurar definições de beans anotados:

[.s1] #Estamos indicando que usaremos a configuração orientada a anotações em nosso projeto com a seguinte linha: #

Ao criar beans “velocityConfig” e “viewResolver”, estamos dizendo aVelocityConfigurer onde procurar modelos eVelocityLayoutViewResolver onde encontrar visualizações e layouts.

4. Modelos de velocidade

Finalmente, vamos criar nossos modelos - começando com um cabeçalho comum:

Our tutorials

e rodapé:

@Copyright example.com

E vamos definir um layout comum para nosso site, onde usaremos os fragmentos acima comparse no seguinte código:


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

Você pode verificar se a variável$screen_content tem o conteúdo das páginas.

Por fim, criaremos um modelo para o conteúdo principal:

Index

Tutorials list

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

5. Lado do Controlador

Criamos um controlador simples que retorna uma lista de tutoriais como conteúdo para o nosso layout ser preenchido com:

@Controller
@RequestMapping("/")
public class MainController {

    @Autowired
    private ITutorialsService tutService;

    @RequestMapping(value ="/", method = RequestMethod.GET)
    public String defaultPage() {
        return "index";
    }

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

Finalmente, podemos acessar este exemplo simples localmente - por exemplo em:localhost:8080/spring-mvc-velocity/

6. Conclusão

Neste tutorial simples, configuramos o aplicativo da webSpring MVC com o mecanismo de modeloVelocity.

O código de amostra completo para este tutorial pode ser encontrado em nossoGitHub repository.