Spring MVC настройка без xml и web.xml

Этой заметкой я хочу начать серию статей по Spring и в частности по Spring MVC. Рассмотрим настройку приложения spring без xml. Поскольку это один из самых популярных фреймворков в современной разработке веб приложений, его знания требуют даже от претендентов на должность младшего java разработчика, не говоря о претендентах на высшую должность. 

Эта статья предназначена для тех, кто уже знаком с данным фреймворком и работал с ним. Для новичков будет цикл статей посвященных разработкой на Spring с нуля. Здесь же, я просто хочу продемонстрировать, как можно избавиться от настройки xml и web.xml и полностью перейти на java классы.

Сейчас мы не будем говорить о самом Spring и его преимуществах. Статья будет полностью посвящена настройке Spring MVC с помощью java классов и аннотаций. Мы не будем учитывать здесь базу данных и другие дополнительные ресурсы. Поняв суть, Вы сможете сами подбирать и добавлять все необходимые бины по примеру. Еще одним преимуществом такой настройки приложения будет то, что мы полностью избавимся от web.xml.

Для начала нужно создать проект для сборки я использую Maven: new -> maven project -> maven-archetype-webapp ->

new maven web project

-> Finish.

В новом проекте может отсутствовать папка java. Ее нужно создать: src -> new -> source folder.

В папке java желательно создать несколько пакетов: для контроллера и для конфигураций.

Далее необходимо открыть pom.xml и добавить зависимости для spring mvc. Не забудьте также добавить javaee-api только в рамках provided:

Код    
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3.     <modelVersion>4.0.0</modelVersion>
  4.     <groupId>com.javamaster</groupId>
  5.     <artifactId>springwithoutxml</artifactId>
  6.     <packaging>war</packaging>
  7.     <version>0.0.1-SNAPSHOT</version>
  8.     <name>springwithoutxml Maven Webapp</name>
  9.     <url>http://maven.apache.org</url>
  10.     <dependencies>
  11.         <dependency>
  12.             <groupId>junit</groupId>
  13.             <artifactId>junit</artifactId>
  14.             <version>3.8.1</version>
  15.             <scope>test</scope>
  16.         </dependency>
  17.         <dependency>
  18.             <groupId>org.springframework</groupId>
  19.             <artifactId>spring-webmvc</artifactId>
  20.             <version>4.2.6.RELEASE</version>
  21.         </dependency>
  22.         <dependency>
  23.             <groupId>javax</groupId>
  24.             <artifactId>javaee-api</artifactId>
  25.             <version>7.0</version>
  26.             <scope>provided</scope>
  27.         </dependency>
  28.     </dependencies>
  29.     <build>
  30.         <finalName>springwithoutxml</finalName>
  31.     </build>
  32. </project>

 

Когда все необходимые зависимости есть, можно приступать к настройке проекта. Создаем класс RootConfig который будет унаследован от WebMvcConfigurerAdapter — этот класс имплементирует интерфейс WebMvcConfigurer, которые имеет очень много методов. Из них самые используемые: настройка ресурсов, валидации, сообщений (messaging), интерцепторы (interceptors) и другие. Больше Вы сможете найти в документации. Не забудьте пометить свой класс аннотацией @Configuration:

Код    
  1. package com.javamaster.config;
  2.  
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  5.  
  6. @Configuration
  7. public class RootConfig extends WebMvcConfigurerAdapter {
  8.  
  9. }

 

Для нашего Hello world приложение использовать этот класс мы не будем. Это для того, чтобы Вы знали где подключать ресурсы.

Далее нужно создать класс: WebConfig в который мы добавим ViewResolver — пропишем наши суффикс и префикс для вьюшек:

Код    
  1. package com.javamaster.config;
  2.  
  3. import org.springframework.context.annotation.Bean;
  4. import org.springframework.context.annotation.ComponentScan;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.web.servlet.ViewResolver;
  7. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  8. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  9.  
  10. @Configuration
  11. @EnableWebMvc
  12. @ComponentScan(basePackages = "com.javamaster")
  13. public class WebConfig {
  14.  
  15.     @Bean
  16.     ViewResolver viewResolver(){
  17.         InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  18.         resolver.setPrefix("/WEB-INF/");
  19.         resolver.setSuffix(".jsp");
  20.         return resolver;
  21.     }
  22. }

Как видите, данный класс мы тоже пометили как @Configuration и еще добавили @EnableWebMvc — добавление этой аннотации к классу импортирует конфигурацию Spring MVC из WebMvcConfigurationSupport. Мы также добавили @ComponentScan и прописали наши пакеты.

Теперь, так как мы хотим использовать класс вместо web.xml нужно создать WebAppInitialiser который мы унаследуем от AbstractAnnotationConfigDispatcherServletInitializer. В нем есть три метода, которые нужно имплементировать и добавить в них наши классы настроек:

Код    
  1. package com.javamaster.config;
  2.  
  3. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  4.  
  5. public class WebAppInitialiser extends AbstractAnnotationConfigDispatcherServletInitializer {
  6.  
  7.     @Override
  8.     protected Class<?>[] getRootConfigClasses() {
  9.         // TODO Auto-generated method stub
  10.         return new Class[]{RootConfig.class};
  11.     }
  12.  
  13.     @Override
  14.     protected Class<?>[] getServletConfigClasses() {
  15.         // TODO Auto-generated method stub
  16.         return new Class[]{WebConfig.class};
  17.     }
  18.  
  19.     @Override
  20.     protected String[] getServletMappings() {
  21.         // TODO Auto-generated method stub
  22.         return new String[]{"/"};
  23.     }
  24.  
  25. }

На этом конфигурация закончена. Теперь можно создавать контроллеры и jsp страницы:

Код    
  1. package com.javamaster.controller;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5.  
  6. @Controller
  7. public class HomeController {
  8.  
  9.     @RequestMapping("/")
  10.     public String getIndex(){
  11.         return "index";
  12.     }
  13.    
  14.     @RequestMapping("/welcome")
  15.     public String getWelcome(){
  16.         return "welcome";
  17.     }
  18. }

index.jsp:

Код    
  1. <h2>Hello World!</h2>
  2. </body>
  3. </html>

welcome.jsp:

Код    
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2.    pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  5. <title>Insert title here</title>
  6. </head>
  7. <h1>Welcome to my page</h1>
  8. </body>
  9. </html>

Теперь можно запустить проект.

настройка без xml и web.xml

Нужно сказать, что это не единственный вариант настройки Spring MVC без xml. Почитав документацию, Вы найдете, что можно пробовать и другие способы.

Ссылка на код: https://github.com/caligula95/springwithoutxml

Я также записал видео где можно посмотреть, настройку Spring:

Добавить комментарий