Рубрики
Без рубрики

Краткое руководство по пружинному MVC со скоростью

Краткое и практическое руководство по использованию Spring MVC со скоростью.

Автор оригинала: baeldung.

1. введение

Velocity – это механизм шаблонов от Apache Software Foundation, который может работать с обычными текстовыми файлами, SQL, XML, Java-кодом и многими другими типами.

В этой статье мы сосредоточимся на использовании скорости с типичным веб-приложением Spring MVC.

2. Зависимости Maven

Давайте начнем с включения поддержки скорости – со следующими зависимостями:


    org.apache.velocity
    velocity
    1.7

        

    org.apache.velocity
    velocity-tools
    2.0

Самые новые версии обоих можно найти здесь: velocity и velocity-tools .

3. Конфигурация

3.1. Веб-конфигурация

Если мы не хотим использовать 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 – опять же, начиная с 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;
    }
}

И давайте также быстро взглянем на XML-версию конфигурации:


    
     
    
        
            /
        
     
    
        
        
        
        
    

Здесь мы рассказываем Spring, где искать аннотированные определения бобов:

Мы указываем, что собираемся использовать конфигурацию, основанную на аннотациях, в нашем проекте со следующей строкой:

Создавая ” velocityConfig ” и ” ViewResolver “, мы сообщаем VelocityConfigurer , где искать шаблоны, и VelocityLayoutViewResolver , где искать представления и макеты.

4. Шаблоны скорости

Наконец, давайте создадим наши шаблоны – начиная с общего заголовка:

Our tutorials

и нижний колонтитул:

@Copyright baeldung.com

И давайте определим общий макет для нашего сайта, где мы будем использовать вышеуказанные фрагменты с parse в следующем коде:


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

Вы можете проверить, что переменная $screen_content содержит содержимое страниц.

Наконец, мы создадим шаблон для основного контента:

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. Сторона контроллера

Мы создали простой контроллер, который возвращает список учебных пособий в качестве содержимого для заполнения нашего макета:

@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 .