Статьи

Начало работы со Scala и Scalatra — Часть I

В этой серии уроков мы рассмотрим скалатру поближе. Scalatra — это легкая основанная на Scala микро-фреймворк, которую можно использовать для создания высокопроизводительных веб-сайтов и API. В этом первом уроке мы только начнем с установки скалатры и импортируем наш тестовый проект в Eclipse.

SBT и giter8

Прежде чем начать, вам необходимо установить несколько инструментов (я предполагаю, что у вас установлен JDK 1.6+). Я дам вам краткие инструкции по установке, а расширенную версию этого можно найти на следующей странице скалатры ( http://www.scalatra.org/getting-started/first-steps.html ). Этот подход должен работать для большинства сред, однако для меня он не работал … Он загружал старые версии giter8 и старую версию sbt. Для sbt я использовал macports, чтобы получить последнюю версию:

1
port install sbt

И я также скачал giter8 вручную.

1
2
curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
cs n8han/giter8

Эта последняя команда установит g8 в ваш каталог / bin. Я проверил это с этой версией G8:

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
~/bin/g8
  
giter8 0.5.0
Usage: g8 [TEMPLATE] [OPTION]...
Apply specified template.
  
OPTIONS
    -b, --branch
        Resolves a template within a given branch
    --paramname=paramvalue
        Set given parameter value and bypass interaction.
  
  
Apply template and interactively fulfill parameters.
    g8 n8han/giter8
  
Or
    g8 git://github.com/n8han/giter8.git
  
Apply template from a remote branch
    g8 n8han/giter8 -b some-branch
  
Apply template from a local repo
    g8 file://path/to/the/repo
  
Apply given name parameter and use defaults for all others.
    g8 n8han/giter8 --name=template-test


Создать начальный проект

Перейдите в корневой каталог, в котором вы храните свои проекты, и выполните следующее:

1
2
3
4
5
6
7
jos@Joss-MacBook-Pro.local:~/dev/scalatra/firststeps$ g8 scalatra/scalatra-sbt
organization [com.example]: org.smartjava
package [com.example.app]: org.smartjava.scalatra    
name [scalatra-sbt-prototype]: hello-scalatra
servlet_name [MyScalatraServlet]: HelloScalatraServlet
scala_version [2.9.1]:
version [0.1.0-SNAPSHOT]:

Это создаст папку hello-scalatra в каталоге, в котором находится проект.

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
./build.sbt
./project
./project/build.properties
./project/plugins.sbt
./README.md
./src
./src/main
./src/main/resources
./src/main/resources/logback.xml
./src/main/scala
./src/main/scala/org
./src/main/scala/org/smartjava
./src/main/scala/org/smartjava/scalatra
./src/main/scala/org/smartjava/scalatra/HelloScalatraServlet.scala
./src/main/scala/Scalatra.scala
./src/main/webapp
./src/main/webapp/WEB-INF
./src/main/webapp/WEB-INF/layouts
./src/main/webapp/WEB-INF/layouts/default.scaml
./src/main/webapp/WEB-INF/views
./src/main/webapp/WEB-INF/views/hello-scalate.scaml
./src/main/webapp/WEB-INF/web.xml
./src/test
./src/test/scala
./src/test/scala/org
./src/test/scala/org/smartjava
./src/test/scala/org/smartjava/scalatra
./src/test/scala/org/smartjava/scalatra/HelloScalatraServletSpec.scala

Чтобы проверить, все ли работает, зайдите в этот каталог и используйте sbt, чтобы запустить приложение из sbt с «container: start». Это загрузит много вещей и, наконец, запустит приложение:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
jos@Joss-MacBook-Pro.local:~/dev/scalatra/firststeps/hello-scalatra$ sbt
[info] Loading project definition from /Users/jos/Dev/scalatra/firststeps/hello-scalatra/project
[info] Set current project to hello-scalatra (in build file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/)
> container:start
[info] jetty-8.1.5.v20120716
[info] NO JSP Support for /, did not find org.apache.jasper.servlet.JspServlet
[info] started o.e.j.w.WebAppContext{/,[file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/src/main/webapp/]}
[info] started o.e.j.w.WebAppContext{/,[file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/src/main/webapp/]}
15:12:44.604 [pool-6-thread-4] INFO  o.scalatra.servlet.ScalatraListener - Initializing life cycle class: Scalatra
[info] started o.e.j.w.WebAppContext{/,[file:/Users/jos/Dev/scalatra/firststeps/hello-scalatra/src/main/webapp/]}
15:12:44.727 [pool-6-thread-4] INFO  o.f.s.servlet.ServletTemplateEngine - Scalate template engine using working directory: /var/folders/mc/vvzshptn22lg5zpp7fdccdzr0000gn/T/scalate-5609005579304140836-workdir
[info] Started SelectChannelConnector@0.0.0.0:8080
[success] Total time: 1 s, completed Sep 7, 2012 3:12:44 PM
>
[success] Total time: 1 s, completed Sep 7, 2012 3:10:05 PM

Чтобы проверить, все ли правильно, наведите браузер на localhost: 8080, и вы увидите следующий экран:

Импорт в Eclipse

Я обычно разрабатываю с Eclipse, поэтому в этом случае давайте убедимся, что мы можем редактировать исходный код в Eclipse. Для этого мы можем использовать плагин sbt eclipse. Добавить этот плагин очень легко. Перейдите в папку «project» и добавьте следующее (с пустой строкой перед ним) в файл plugins.sbt.

1
addSbtPlugin('com.typesafe.sbteclipse' % 'sbteclipse-plugin' % '2.1.0')

Когда вы в следующий раз запустите sbt, вы увидите много загружаемого материала. Из sbt запустите ‘eclipse’ и файлы конфигурации eclipse (.classpath и .project) будут созданы. Теперь запустите Eclipse IDE, и вы сможете импортировать только что созданный проект (убедитесь, что вы также установили scala-ide для Eclipse ).

Теперь мы можем запустить контейнер и позволить sbt прослушивать изменения в наших ресурсах.

1
2
3
$ sbt
> container:start
> ~ ;copy-resources;aux-compile

Каждый раз, когда мы сохраняем файл в Eclipse, sbt будет копировать и перекомпилировать ресурсы. Таким образом, мы можем напрямую видеть наши измененные файлы в браузере. Откройте файл HelloScalatraServlet и измените текст приветствия. Если вы сохраните это, sbt перезагрузит приложение и вы сразу увидите измененные файлы.

Вот и все для первой части этого урока. На следующей неделе мы рассмотрим, как мы можем использовать скалатру для создания сервиса на основе REST.

Приятного кодирования и не забудьте поделиться!

Ссылка: Учебное пособие: Начало работы со scala и scalatra — часть I от нашего партнера по JCG Йоса Дирксена из блога Smart Java .