Kurzanleitung zu Spring MVC mit Velocity
1. Einführung
Velocity ist eine Vorlagen-Engine der Apache Software Foundation, die mit normalen Textdateien, SQL, XML, Java-Code und vielen anderen Typen arbeiten kann.
In diesem Artikel konzentrieren wir uns auf die Verwendung von Velocity mit einer typischen Spring MVC-Webanwendung.
2. Maven-Abhängigkeiten
Beginnen wir mit der Aktivierung der Velocity-Unterstützung - mit den folgenden Abhängigkeiten:
org.apache.velocity
velocity
1.7
org.apache.velocity
velocity-tools
2.0
Die neuesten Versionen von beiden finden Sie hier:velocity undvelocity-tools.
3. Aufbau
3.1. Webkonfiguration
Wenn wir keinweb.xml verwenden möchten, konfigurieren wir unser Webprojekt mit Java und einem Initialisierer:
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);
}
}
Alternativ können wir natürlich die traditionellenweb.xml verwenden:
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
Beachten Sie, dass wir unser Servlet auf dem Pfad „/ *“ abgebildet haben.
3.2. Frühlingskonfiguration
Lassen Sie uns nun eine einfache Spring-Konfiguration durchgehen - wieder beginnend mit 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;
}
}
Lassen Sie uns auch einen kurzen Blick auf die XML-Version der Konfiguration werfen:
/
Hier teilen wir Spring mit, wo nach mit Anmerkungen versehenen Bohnendefinitionen gesucht werden soll:
[.s1] #Wir geben an, dass wir in unserem Projekt eine annotationsgesteuerte Konfiguration mit der folgenden Zeile verwenden werden: #
Durch das Erstellen der Beans "velocityConfig" und "viewResolver" teilen wirVelocityConfigurer mit, wo nach Vorlagen gesucht werden soll, undVelocityLayoutViewResolver, wo Ansichten und Layouts zu finden sind.
4. Geschwindigkeitsvorlagen
Lassen Sie uns abschließend unsere Vorlagen erstellen - beginnend mit einem gemeinsamen Header:
Our tutorials
und Fußzeile:
@Copyright example.com
Definieren wir ein gemeinsames Layout für unsere Site, in dem die obigen Fragmente mitparse im folgenden Code verwendet werden:
Spring & Velocity
#parse("/WEB-INF/fragments/header.vm")
$screen_content
#parse("/WEB-INF/fragments/footer.vm")
Sie können überprüfen, ob die Variable$screen_contentden Inhalt der Seiten enthält.
Schließlich erstellen wir eine Vorlage für den Hauptinhalt:
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-Seite
Wir haben einen einfachen Controller erstellt, der eine Liste von Tutorials als Inhalt für unser Layout zurückgibt, mit denen Folgendes gefüllt werden soll:
@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";
}
}
Schließlich können wir lokal auf dieses einfache Beispiel zugreifen - zum Beispiel unter:localhost:8080/spring-mvc-velocity/
6. Fazit
In diesem einfachen Tutorial haben wir die Webanwendung vonSpring MVCmit der Template-Engine vonVelocitykonfiguriert.
Den vollständigen Beispielcode für dieses Tutorial finden Sie in unserenGitHub repository.