Статьи

Spring MVC: создание простого контроллера с конфигурацией на основе Java

Это первая статья в моем блоге, связанная с Spring MVC. Начало всегда волнующее, поэтому я постараюсь быть лаконичным и информативным. Spring MVC позволяет создавать веб-приложения максимально удобным, простым и быстрым способом. Начало работы с этой технологией подразумевает знание Spring CORE. В посте вы прочтете о создании простого Spring MVC Controller. Я предпочитаю настройку приложения на основе Java, поэтому пример будет содержать этот подход.

Основная цель — создание контроллера, который будет обрабатывать запрос. Следовательно, после нажатия на ссылку вы будете перенаправлены на конкретную страницу с помощью контроллера Spring.

подготовка

Создайте в Eclipse новый динамический веб-проект, а затем преобразуйте его в проект Maven . Убедитесь, что ваш файл web.xml выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
<!--?xml version="1.0" encoding="UTF-8"?-->
  <display-name>SimpleController</display-name>
   
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
   
</web-app>

index.jsp будет играть роль домашней страницы в приложении, поместите ее в src / main / webapp / index.jsp ; Вот код index.jsp:

1
2
3
4
5
6
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
...
<h1>Home page</h1>
<p>This is a Home Page.</p>
...

В результате структура проекта будет выглядеть так:

проекты-структура-весна-начало MVC-

Настройка зависимостей

Далее мне нужно добавить некоторые зависимости в файл pom.xml. Я больше не буду говорить о зависимостях, я прокомментирую код ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<properties>
    <spring.version>3.1.1.RELEASE</spring.version>
</properties>
 
<dependencies>
    <!-- Spring -->
    <dependency>
        <groupid>org.springframework</groupid>
        <artifactid>spring-context</artifactid>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupid>org.springframework</groupid>
        <artifactid>spring-webmvc</artifactid>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupid>org.springframework</groupid>
        <artifactid>spring-beans</artifactid>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupid>org.springframework</groupid>
        <artifactid>spring-web</artifactid>
        <version>${spring.version}</version>
    </dependency>
    <!-- CGLIB is required to process @Configuration classes -->
    <dependency>
        <groupid>cglib</groupid>
        <artifactid>cglib</artifactid>
        <version>2.2.2</version>
    </dependency>
    <!-- Servlet API, JSTL -->
    <dependency>
        <groupid>javax.servlet</groupid>
        <artifactid>javax.servlet-api</artifactid>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupid>jstl</groupid>
        <artifactid>jstl</artifactid>
        <version>1.2</version>
    </dependency>
</dependencies>

Более подробную информацию о зависимостях Spring вы можете найти в официальном блоге .

Конфигурация на основе Java

Пришло время создать конфигурацию для приложения. Как я упоминал выше, этот подход удобен, и одной из причин является использование аннотаций. Во-первых, я собираюсь создать класс WebAppConfig

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.sprmvc.init;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver;
 
@Configuration //Specifies the class as configuration
@ComponentScan('com.sprmvc') //Specifies which package to scan
@EnableWebMvc //Enables to use Spring's annotations in the code
public class WebAppConfig {
 
    @Bean
    public UrlBasedViewResolver setupViewResolver() {
        UrlBasedViewResolver resolver = new UrlBasedViewResolver();
        resolver.setPrefix('/WEB-INF/pages/');
        resolver.setSuffix('.jsp');
        resolver.setViewClass(JstlView.class);
        return resolver;
    }
 
}

Это сделано, чтобы указать путь, где хранятся все JSP. Это необходимо для того, чтобы использовать дополнительные читаемые URL-адреса.

Теперь очередь за классом Initializer для обзора:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.sprmvc.init;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
 
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
 
public class Initializer implements WebApplicationInitializer {
 
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
 
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(WebAppConfig.class);
 
        ctx.setServletContext(servletContext); 
 
        Dynamic servlet = servletContext.addServlet('dispatcher', new DispatcherServlet(ctx));
        servlet.addMapping('/');
        servlet.setLoadOnStartup(1);
 
    }
 
}

Обратите внимание, что класс Initializer реализует интерфейс WebApplicationInitializer . Это необходимо, чтобы избежать XML-конфигурации веб-приложения.

JSP для контроллера

Прежде чем я покажу вам, как создать простой контроллер, мне нужно создать файл JSP, к которому контроллер нас приведет.

1
2
3
4
5
6
7
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
 
...
    <p>Hello world: ${message}</p>
    <p>Well done!</p>
...

Вот путь к JSP-файлу: src / main / webapp / WEB-INF / pages / hello.jsp
Обратите внимание, что в классе WebAppConfig я указал такие части пути, как sufix и prefix.

контроллер

И, наконец, код класса LinkController

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
package com.sprmvc.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
@Controller
public class LinkController {
 
    @RequestMapping(value='/hello-page')
    public ModelAndView goToHelloPage() {
        ModelAndView view = new ModelAndView();
        view.setViewName('hello'); //name of the jsp-file in the 'page' folder
 
        String str = 'MVC Spring is here!';
        view.addObject('message', str); //adding of str object as 'message' parameter
 
        return view;
    }
 
}

Теперь вам нужно обновить файл index.jsp, добавив туда ссылку на страницу Hello:

1
2
3
4
5
6
7
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
...
<h1>Home page</h1>
<p>This is a Home Page.</p>
<p><a href="hello-page.html">Hello world link</a></p>
...

Окончательная структура проекта:

Конечные-проекты-структура-весна-начало MVC-

Запустите проект, откройте index.jsp и нажмите на ссылку, и вы получите:

на результат из-весна-Mvc-начало

Резюме

Иногда учебники действительно полезны, но лучший способ научиться использовать Spring — это прочитать официальную документацию, поэтому я рекомендую вам углубиться в блог Spring.

Ссылка: Spring MVC: Создание простого контроллера на основе Java от нашего партнера по JCG Алекса Фрузенштейна в блоге заметок Фрузенштейна .