Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Комментарий: Migrated to Confluence 5.3

Цель

 Создать : создать простое приложение на технологии Spring MVC

Что требуется для начала

...

  1. Установленная JDK 6+,
  2. Maven 2
  3. Настроенные переменные окружения: JAVA_HOME=<путь к JDK>, M2_HOME=путь к мавен, PATH=JAVA_HOME\bin;MAVENM2_HOME\bin;%PATH%;
  4. Среда разработки, например IntelliJ Idea 11 Ultimate (в Community будет не так удобно работать с Spring и JSP)

 

Оглавление
include.*[1-9].*

 

Шаг 1: Создание maven проекта

...

Теперь можно открыть проект в среде разработки, обычно надо выбрать New Project -> Import from External Model -> Maven

 

 

Шаг 2: Добавление библиотек Spring в проект

...

Также стоит сразу добавить конфигурацию плагина-компилятора в секцию <build> </build> для того, чтобы указать версию языка java, которую мы будем использовать. Даже если вы используете самую новую jdk 7, версия языка по умолчанию стоит 1.3, а на 1.76.

Блок кода
 <plugins>
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <version>2.5.1</version>
       <configuration>
          <source>1.6</source>
          <target>1.6</target>
       </configuration>
    </plugin>
 </plugins>

 

Шаг 3: Добавление диспетчера Spring MVC

...

Дальше, в контекстном меню папки src/main/java, выбрав new package создадим пакет ru.mai.dep806.mvcapp.controllercontrollers

 

Шаг 6: Добавление контроллера для главной страницы

(лампочка)Замечание для Idea: по-умолчанию пустые пакеты отображаются в дереве одной строкой компактно, если требуется их развернуть, например, для создания подпакета в середине пути, снимите флаг Compact empty middle package в меню над деревом)

Image Added

Шаг 6: Добавление контроллера для главной страницы

Наконец то мы можем создать первый класс-контроллер  WelcomeController (в пакете controllersНаконец то мы можем создать первый класс-контроллер  WelcomeController (в пакете controller):

Блок кода
package ru.mai.dep806.mvcapp.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * Контроллер для главной страницы приложения.
 */
@Controller
public class WelcomeController {

 private int visitorCount = 0;

 @RequestMapping("/index.html")
 public String index(Model model) {
    model.addAttribute("visitorCount", visitorCount++);
    return "WEB-INF/jsp/index.jsp";
 }

}

...

Теперь пока добавить "лицо" нашего приложения - view для главной страницы. Для этого, создадим папку jsp в WEB-INF и в ней файл index.jsp, чтобы наш контроллер нашел ее по полному пути внутри сервера: WEB-INF/jsp/index.htmljsp

Блок кода
languagehtml/xml
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
isELIgnored="false" %>
<html>
<head>
 <title>Добро пожаловать</title>
</head>
<body>
<h4> Добро пожаловать! </h4>
Поздравляем, вы <b>${visitorCount}</b> посетитель и можете выиграть поездку в настолицу Java. - Джакарту <br/>

<a <script srchref="http://wwwclck.gmodules.com/ig/ifr?url=yandex.ru/redir/dtype=stred/pid=7/cid=1228/*http://wwwpogoda.googleyandex.com/ig/modules/builtin_weather.xml&amp;synd=open&amp;w=320&amp;h=200&amp;title=%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0+%D0%BD%D0%B0+Java&amp;lang=en&amp;country=ALL&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;output=js"></script>ru/jakarta"><img src="http://info.weather.yandex.net/jakarta/2.ru.png" border="0" alt=""/><img width="1" height="1" src="http://clck.yandex.ru/click/dtype=stred/pid=7/cid=1227/*http://img.yandex.ru/i/pix.gif" alt="" border="0"/></a>

</body>
</html>

Тут кроме HTML из интересного используется синтаксис Expression Language (EL) - ${visitorCount} для вывода значения переменной модели, которую мы установили в контроллере.вывода значения переменной модели, которую мы установили в контроллере.

Для того, чтобы можно было использовать EL, необходимо установить флаг isELIgnored="false", который по-умолчанию true для совместимости с предыдущими версиями JSP, где EL не интерпретировался.

 

Шаг 8: Конфигурация проекта для запуска  в Tomcat

...

Раскрыть
titleПример протокола успешного запуска
Блок кода
C:\Java\jdk1.6.0_10\bin\java -Dclassworlds.conf=C:\Java\apache-maven-2.2.1\bin\m2.conf -Dmaven.home=C:\Java\apache-maven-2.2.1 -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:\Program Files\JetBrains\IntelliJ IDEA 11.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Java\apache-maven-2.2.1\boot\classworlds-1.1.jar;C:\Program Files\JetBrains\IntelliJ IDEA 11.1.2\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher --no-plugin-registry --fail-fast --strict-checksums --update-snapshots -f "C:\Private\Dep806\Autumn2012\Java8\7 - Spring MVC\project\webapp\pom.xml" org.apache.tomcat.maven:tomcat6-maven-plugin:2.0:run
+ Enabling strict checksum verification on all artifact downloads.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building webapp Maven Webapp
[INFO] task-segment: [org.apache.tomcat.maven:tomcat6-maven-plugin:2.0:run]
[INFO] ------------------------------------------------------------------------
[INFO] Preparing tomcat6:run
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [tomcat6:run {execution: default-cli}]
[INFO] Running war on http://localhost:8080/webapp
[INFO] Using existing Tomcat server configuration at C:\Private\Dep806\Autumn2012\Java8\7 - Spring MVC\project\webapp\target\tomcat
20.10.2012 3:38:41 org.apache.catalina.startup.Embedded start
INFO: Starting tomcat server
20.10.2012 3:38:41 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.35
20.10.2012 3:38:42 org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'action'
20.10.2012 3:38:42 org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'action': initialization started
20.10.2012 3:38:42 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing WebApplicationContext for namespace 'action-servlet': startup date [Sat Oct 20 03:38:42 MSD 2012]; root of context hierarchy
20.10.2012 3:38:42 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/action-servlet.xml]
20.10.2012 3:38:42 org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider registerDefaultFilters
INFO: JSR-250 'javax.annotation.ManagedBean' found and supported for component scanning
20.10.2012 3:38:42 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1891172: defining beans [welcomeController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
20.10.2012 3:38:43 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/index.html] onto handler 'welcomeController'
20.10.2012 3:38:43 org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'action': initialization completed in 1390 ms
20.10.2012 3:38:43 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
20.10.2012 3:38:43 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080

Если все прошло успешно (в логах есть строка  INFO: FrameworkServlet 'action': initialization completed), то можно зайти на страницу по адресу http://localhost/webapp/index.html 

...

Image Added

Поздравляем с созданием первого MVC приложения!