Туторіал по Spring MVC

Для туторіалу необхіднo наступнe:

Java 5+

Maven 2.0.10 ( http://maven.apache.org/)

Eclipse IDE for Java EE 3.4 SR2 ( http://www.eclipse.org/downloads/)

Для продуктивнішої роботи в Eclipse потрібні додаткові плагіни: Spring IDE та m2Eclipse.

  1. Встановлення m2eclipse ( http://m2eclipse.codehaus.org/) у запущеному Eclipse:

«Help» меню, «Software updates...» підменю, «Available Software» закладка, потрібно натиснути «Add Site...» кнопку та ввести адресу оновлення: m2eclipse.sonatype.org/update/ і потім нажати «OK».

В списку плагінів необхідно розкрити групи: спочатку «Maven integration for Eclipse Update Site», а потім — “Maven Integration”. Для останьої слід вибрати “Maven Integration for Eclipse (Required)” та “Maven POM XML Editor (Optional)” i настиснути “Install...”. У діалозі що з'явитися потрібно підтвердити встановлення m2eclipse.

  1. Встановлення Spring IDE в Eclipse майже аналогічне до попереднього.

Cайт оновлення для Spring IDE:

http://dist.springframework.org/release/IDE

Обов'язковий додаток — “Spring IDE Core (required)”.

Після встановлення плагіну необхідно перезапустити Eclipse.

Створення проекту

У консолі (CMD/Terminal/Bash) слід створити артефакт:

mvn archetype:create -DgroupId=com.rozrobka -DartifactId=trucks -DarchetypeArtifactId=maven-archetype-webapp

Щоб додати Spring залежність слід:

a) відкрити Java перспективу;

b) «File» меню, «Import...» підменю, «General» папка, «Maven projects»;

c) вибрати директорію проекту trucks та натиснути “Finish”.

У pom.xml в “dependencies” групі потрібно додати нові залежності:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>2.5.6</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>2.5.6</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.1.2</version>
    <scope>compile</scope>
</dependency>
<dependency>
 <groupId>taglibs</groupId>
 <artifactId>standard</artifactId>
 <version>1.1.2</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

У src/main/webapp/web-inf/web.xml файлі слід додати та мапувати Spring сервлет для htm запитів:

<servlet>
    <servlet-name>springapp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
   <servlet-mapping>
    <servlet-name>springapp</servlet-name>
    <url-pattern>*.htm</url-pattern>
  </servlet-mapping>

Цей запис означає що всі запити з розширенням “htm” переадресовуватимуться Spring springapp сервлету.

Наступним кроком є створення в "/WEB-INF/" папці файлу контексту — springapp-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
</beans>

Також слід створити в «webapp» папці (новий) файл trucks.jsp:

Списк машин

Простий список машин

Приступаємо до створення контролерів.

Спочатку потрібно додати папку з вихідним кодом: виклик підменю (проект — права клавіша мишки), далі — «New», потім — «Source Folder», ввести «src/main/java» в «Folder name:» поле.

У новій папці cлід створити TrucksController клас («File» меню, «New» підменю, Class"), вказавши «com.rozrobka.web» пакет, ввевши «AbstractController» в «Superclass» полі та вибравши необхідний клас із Spring бібліотеки (відповідна «browse» кнопка), a потім — “Finish”.

Генерування Eclipse-ом відсутніх методів при помилках у новоствореному файлі, або для перевизначення чи виконання відповідних методів, потрібно: «Sourse» меню, «Override/Implement Methods...» підменю, вибрати необхідні методи.

Контент TrucksController класy:

package com.rozrobka.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class TrucksController extends AbstractController {

    protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        // TODO Auto-generated method stub
        return null;
    }
}

В блок методу слід додати наступне:

ModelAndView mv = new ModelAndView();
    mv.setViewName("trucks");
    return mv;

Оскільки проект використовує Spring, то необхідно включити підтримку контексту файлів: виклик підменю (проект — права клавіша, вибрати «Spring Tools», далі — «Add Spring Project Nature».

Потім: вибрати «Project» меню, «Properties» підменю, знайти та відкрити «Beans Support» y новій секції «Spring», в «Config Files» закладці на тиснути “Add...” та вибрати «springapp-servlet.xml». Для підтвердження — “OK”.

Tакож потрібно cтворити папку jsp в "/WEB-INF" та переміcтити trucks.jsp в новостворену папку.

До «springapp-servlet.xml» файлу необхідно додати наступний код:

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

Для пришвидшeння розробки, слід додати до pom.xml плагін який дозволить використовувати Jetty як сервлет контейнер:

<build>
        <finalName>trucks</finalName>

        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Перший крок — готовий. Можна протестувати. Для цього в консолі слід набрати:

mvn jetty:run

Та вказати в браузері: localhost:8080/trucks/trucks.htm

Якщо все було вірно налаштовано, то повинна відображатись сторінка з простим списком машин.

Mожна продовжувати далі.

Потрібно створити в «com.rozrobka.model» пакеті «Truck» клас з двома полями:

private String id;
    private String name;

Слід згенерувати setters/getters (Alt+Shift+S) «Source» меню, «Generate Getters and Setters...» підменю).

Модель — готова. Тепер можна створювати сервіс.

Для цього додамо «com.rozrobka.service» пакет, а в ньому — TruckService клас:

package com.rozrobka.service;

import java.util.ArrayList;
import java.util.List;

import com.rozrobka.model.Truck;

public class TruckService {

    public List<Truck> getTrucks() {
        List<Truck> trucks = new ArrayList<Truck>();

        Truck t = new Truck();
        t.setId("t1");
        t.setName("BIG truck");
        trucks.add(t);

        Truck t2 = new Truck();
        t2.setId("t2");
        t2.setName("Small truck");
        trucks.add(t2);

        return trucks;
    }
}

Сервіс — готовий. Тепер його можна використати в контроллері.

Для цього в TrucksController класі потрібно додати поле:

private TruckService truckService;

Потім — згенерувати тільки setter, щоб Spring міг вказати сервіс.

Ocкільки сервіс став доступним для контроллера, то його можна використати:

protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        ModelAndView mv = new ModelAndView();

        mv.setViewName("trucks");
        mv.addObject("trucks", truckService.getTrucks());

        return mv;
    }

Слід поєднати класи в «springapp-servlet.xml» контексті:

<bean name="/trucks.htm" class="com.rozrobka.web.TrucksController" >
        <property name="truckService" ref="truckService"/>
    </bean>

    <bean id="truckService" class="com.rozrobka.service.TruckService" />

В такий спосіб оголошено новий bean та вказaно його контроллеру.

Представлення машин в trucks.jsp:

<h1>Простий список машин</h1>
     <c:forEach items="${trucks}" var="truck">  
         <c:out value="${truck.id}"/>  
         <c:out value="${truck.name}"/> 
     </c:forEach>

Готово!

Можна перезапустити jetty:

mvn jetty:run

В браузері повинен відобразитись список з двох машин.

Завантажити файли проекту можна з мого сайту.

Коментарі 2

Kingsley - 16 березня 2011, 16:31

Чому для контролерів просто не використовувати анотації (@Controller). Думаю так легше, та і не марно ж їх включили)

zenyk - 18 березня 2011, 12:12

цей туторіал більше орієнтований на XML опис

опис анотаціями дійсно простіший — для цього варто зробити окремий туторіал

Коментувати
© 2009 - 2020, Розробка - соціальна ІТ спільнота.
Контакти: info@rozrobka.com
Правила користування