SPRING-SOURCE.RU
Исходный код:
Scala и Spring Framework. 1 часть.

Spring и Scala. Spring и Scala первое знакомство

Создаем совместное приложение Scala - Spring

Для создания проекта мы воспользуемся услугами Maven, а в нем Scala archetype. Вот строка:

  
mvn org.apache.maven.plugins:maven-archetype-plugin:2.2:generate 
    -DarchetypeGroupId=org.scala-tools.archetypes 
    -DarchetypeArtifactId=scala-archetype-simple 
    -DarchetypeVersion=1.3 
    -DgroupId=myGroup 
    -DartifactId=SpringScalaProject
    -Dversion=0.1.0 
    -DinteractiveMode=false
        

Затем, в директории проекта, пишем: mvn clean package

Переносим созданный проект в IDE

В этом уроке мы используем IntelliJIdea 12 версию. Запускаем программу и импортируем проект, как Maven. Поставьте галочку Import Maven project automatically и выберите process-test-resources.

Теперь осталось убедиться в том, что плагин Scala для IntelliJ работает корректно. Для этого открываем App класс и пишем в нем этот код:

  
object App {
def main(args: Array[String]) {
 println( "Hello World!" );
}
}
        

Запускаем наш проект: CTRL-SHIFT-F10

Давайте теперь настроим Scala на нужную версию, через pom.xml: <scala.version>2.9.1</scala.version>

  
<properties>
        <encoding>UTF-8</encoding>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <scala.version>2.9.1</scala.version>
        <org.springframework.version>3.1.0.RELEASE</org.springframework.version>
</properties>
        

После любого изменения в программе лучше запускать проект и проверять его на работоспособность. Сделайте проверку и если все прошло успешно, удалите класс App.

Создаем Spring Web приложение

Начнем править наш pom.xml

 
         
<repositories>
    <repository>
        <id>scala-tools.org</id>
        <name>Scala-Tools Maven2 Repository</name>
        <url>http://scala-tools.org/repo-releases</url>
    </repository>
    <repository>
        <id>com.springsource.repository.bundles.release</id>
        <name>EBR Spring Release Repository</name>
        <url>http://repository.springsource.com/maven/bundles/release</url>
    </repository>
    <repository>
        <id>com.springsource.repository.bundles.external</id>
        <name>EBR External Release Repository</name>
        <url>http://repository.springsource.com/maven/bundles/external</url>
    </repository>
    <repository>
        <id>jboss-public-repository-group</id>
        <name>JBoss Public Maven Repository Group</name>
        <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
        <layout>default</layout>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

        

Добавляем зависимости:

 
         
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.context</artifactId>
<version>${org.springframework.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.transaction</artifactId>
<version>${org.springframework.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.orm</artifactId>
<version>${org.springframework.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.web</artifactId>
<version>${org.springframework.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.web.servlet</artifactId>
<version>${org.springframework.version}</version>
</dependency>

<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>servlet-api</artifactId>
 <version>2.5</version>
 <scope>provided</scope>
</dependency>

<dependency>
 <groupId>commons-logging</groupId>
 <artifactId>commons-logging</artifactId>
 <version>1.1.1</version>
</dependency>

        

И удаляем зависимость org.scala-tools.testing, junit, scalatest и убираем <goal>testCompile</goal>

Чтобы упростить приложение, мы настроим все последовательно и начнем конечно же с Spring Framework. Создадим контроллер HelloWorldController в пакете myGroup.spring.web:

  
@Controller
class HelloWorldController {
@RequestMapping(Array("/hello.html"))
def showHello = "helloPage"
}
        

Проверяем, что проект работает: mvn clean package

Далее, создадим директорию src/main/webapp/WEB-INF, а также файл web.xml с стандартным DispatcherServlet:

  
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="ScalaTestProject"
         version="2.5">

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-context-web.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <filter>
        <!-- Allows the "_method" parameter to dictate the HTTP method -->
        <filter-name>methodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>methodFilter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>
        

Создадим файл spring-context-web.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <context:component-scan
            base-package="myGroup.spring.web"/>

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

Потом создадим jsp страничку, которую нам будет возращать наш контроллер: src/main/webapp/WEB-INF/jsp/helloPage.jsp

  
<%@page contentType="text/html;"%>
<html>
<body>
<h1>Hello from ${pageContext.request.serverName}</h1>
</body>
</html>
        

В конце добавим 'war' упаковку в наш pom.xml

  
<packaging>war</packaging>
        

Теперь снова заапускаем mvn clean install и смотрим, чтобы все работало.

Запускаем наше приложение при помощи Jetty Plugin

Добавим Jetty в наш POM файл:

  
<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>8.0.4.v20111024</version>
    <configuration>
        <connectors>
            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <port>9090</port>
                <maxIdleTime>60000</maxIdleTime>
            </connector>
        </connectors>
        <stopKey>stopIt</stopKey>
        <stopPort>9191</stopPort>
        <reload>manual</reload>
    </configuration>
    <executions>
        <execution>
            <id>start-jetty-before-integration-tests</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <scanIntervalSeconds>0</scanIntervalSeconds>
                <daemon>true</daemon>
            </configuration>
        </execution>
        <execution>
            <id>stop-jetty-after-integration-tests</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>stop</goal>
            </goals>
        </execution>
    </executions>
</plugin>
        

Запускаем наше приложение: mvn clean package jetty:run, заходим по адресу: http://localhost:9090/hello.html и получаем нашу jsp страницу Hello from localhost

Надеюсь все получилось, если возникли вопросы, пишите на email.