Tutorial: Crear una aplicación Web con Scala / Lift desde cero
Continuando con los post del Web Server Lift con Scala, hoy mostraré cómo crear una aplicación Web desde cero y que podremos usar más adelante como un template en blanco para nuestros proyectos. Es necesario haber realizado el tutorial anterior para poder continuar.
Para empezar debemos crear una carpeta para nuestro proyecto, para efectos prácticos la llamaré “webapp” y dentro otra carpeta llamada “project“. Nuestro primer paso consiste en configurar el SBT (Simple Build Tool), esto se lograr creando el archivo plugins.sbt dentro de la carpeta de nuestro proyecto con el siguiente fragmento de código:
libraryDependencies <+= sbtVersion(v => v match {
case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8"
case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10"
case "0.11.2" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.2-0.2.11"
case "0.11.3" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.3-0.2.11.1"
case x if (x.startsWith("0.12")) =>
"com.github.siasia" %% "xsbt-web-plugin" % "0.12.0-0.2.11.1"
})
El código anterior se encarga de cargar el xsbt-web-plugin acorde a la versión que definas para Scala, para definir esto crea el archivo build.sbt, como he mencionado antes, este archivo carga todas las librerías necesarias, debe estar en raíz y contendrá lo siguiente:
organization := "org.webapp"
name := "My Wep App"
version := "0.1"
scalaVersion := "2.10.0"
seq(com.github.siasia.WebPlugin.webSettings :_*)
libraryDependencies ++= {
val liftVersion = "2.5-M4"
Seq(
"net.liftweb" %% "lift-webkit" % liftVersion % "compile",
"org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container,test"
)
}
Algunos de los parámetros son autodescriptivos, los demás son propios de Scala como el manejo de colecciones “Seq“. Con esto tenemos configurada parte de la aplicación, para poder compilarlo ocupamos los archivos “sbt” y “sbt-launch-0.12.1.jar” (puede variar la versión) que encontrarás en la raíz del proyecto del tutorial pasado, copiamos dichos archivos a la raíz de nuestro proyecto y ejecutamos el siguiente comando:
./sbt
El comando anterior descargará todos los archivos necesarios para la versión de Scala que hayamos selecionado, al terminar entrarán automáticamente en el prompt, recuerda que aunque siempre ejecutes el comando, sólo descargará una vez los documentos. Desde la raíz de tu proyecto encontrarás una nueva carpeta, estas son las dependencias que se necesitan para ejecutar el lenguaje.
Ya casi tenemos listo nuestro ejemplo, nos falta definir nuestro contenedor para que recoja las peticiones usando Lift, básicamente el siguiente documento xml debe ser creado desde raíz en la siguiente ubicación: src/main/webapp/WEB-INF/web.xml y su contenido debe ser el siguiente:
<!DOCTYPE web-app SYSTEM "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>LiftFilter</filter-name>
<display-name>Lift Filter</display-name>
<description>The Filter that intercepts Lift calls</description>
<filter-class>net.liftweb.http.LiftFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LiftFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Nuestro siguiente documento define nuestra pantalla inicial y debe estar localizado en la siguiente dirección: src/main/webapp/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Scala/Lift</title>
</head>
<body>
<h1>Welcome to your Web Server</h1>
</body>
</html>
Los Web Server con contenedores en Java funcionan gestionando las peticiones, en el caso de Lift debemos crear un documento que se encargará de esto, debe estar localizado en la siguiente dirección: src/main/scala/boot/strap/Boot.scala
package bootstrap.liftweb
import net.liftweb.http.{Html5Properties, LiftRules, Req}
import net.liftweb.sitemap.{Menu, SiteMap}
/**
* A class that's instantiated early and run. It allows the application
* to modify lift's environment
*/
class Boot {
def boot {
// where to search snippet
LiftRules.addToPackages("org.webapp")
// Build SiteMap
def sitemap(): SiteMap = SiteMap(
Menu.i("Home") / "index"
)
// Use HTML5 for rendering
LiftRules.htmlProperties.default.set((r: Req) =>
new Html5Properties(r.userAgent))
}
}
Usando Scala como lenguaje base, nuestro archivo boot se encargará de direccionar nuestras peticiones. Ya tenemos todo listo, desde la raíz de nuestro proyecto ejecutar los dos comandos:
./sbt container:start
Ahora ya podrás acceder a tu proyecto desde http://localhost:8080/index, ten encuenta que los documentos en Scala deben ser compilados, a diferencia de los html que puedes modificar sin necesidad de levantar el servicio de nuevo.
Fuente: Lift Web













CANAL RSS