Краткое руководство по Spring MVC с Velocity
1. Вступление
Velocity - это шаблонизатор от Apache Software Foundation, который может работать с обычными текстовыми файлами, SQL, XML, кодом Java и многими другими типами.
В этой статье мы сосредоточимся на использовании Velocity с типичным веб-приложением Spring MVC.
2. Maven Зависимости
Начнем с включения поддержки Velocity со следующими зависимостями:
org.apache.velocity
velocity
1.7
org.apache.velocity
velocity-tools
2.0
Самые новые версии обоих можно найти здесь:velocity иvelocity-tools.
3. конфигурация
3.1. Web Config
Если мы не хотим использоватьweb.xml, давайте настроим наш веб-проект, используя Java и инициализатор:
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);
}
}
В качестве альтернативы мы, конечно, можем использовать традиционный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
Обратите внимание, что мы наложили наш сервлет на путь «/ *».
3.2. Spring Config
Давайте теперь рассмотрим простую конфигурацию Spring - опять же, начиная с 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;
}
}
И давайте также быстро взглянем на XML-версию конфигурации:
/
Здесь мы говорим Spring, где искать аннотированные определения bean-компонентов:
[.s1] # Мы указываем, что собираемся использовать конфигурацию на основе аннотаций в нашем проекте со следующей строкой: #
Создавая компоненты «velocityConfig» и «viewResolver», мы сообщаемVelocityConfigurer, где искать шаблоны, иVelocityLayoutViewResolver, где искать представления и макеты.
4. Шаблоны скорости
Наконец, давайте создадим наши шаблоны, начав с общего заголовка:
Our tutorials
и нижний колонтитул:
@Copyright example.com
И давайте определим общий макет для нашего сайта, где мы собираемся использовать приведенные выше фрагменты сparse в следующем коде:
Spring & Velocity
#parse("/WEB-INF/fragments/header.vm")
$screen_content
#parse("/WEB-INF/fragments/footer.vm")
Вы можете проверить, что переменная$screen_content содержит содержимое страниц.
Наконец, мы создадим шаблон для основного контента:
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. Сторона контроллера
Мы создали простой контроллер, который возвращает список руководств в виде контента для нашего макета, который будет заполнен:
@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";
}
}
Наконец, мы можем получить доступ к этому простому примеру локально - например, по адресу:localhost:8080/spring-mvc-velocity/
6. Заключение
В этом простом руководстве мы настроили веб-приложениеSpring MVC с механизмом шаблоновVelocity.
Полный пример кода для этого руководства можно найти в нашемGitHub repository.