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
Tutorial Id
Tutorial Title
Tutorial Description
Tutorial Author
#foreach($tut in $tutorials)
$tut.tutId
$tut.title
$tut.description
$tut.author
#end
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.