lispmxEn 2017-12-21 16:32:07

#uncommonweb#ucw#lisp#commonlisp#tutorial


Una vez que hemos creado nuestro proyecto como se explica en:



Podemos comenzar a trabajar en nuestra aplicación UCW.


Lo primero que debemos hacer es habilitar un servidor de aplicaciones web con UncommonWeb (UCW).


Para esto creamos un nuevo archivo dentro del directorio de nuestro tutorial:


emacs ucw-server-init.lisp




Y  agregamos el siguiente código de un servidor web UCW:



(in-package #:ucw-tutorial-01)



(defvar *ucw-tutorial-01-server* (make-instance 'standard-server))


(defclass ucw-tutorial-01-application (static-roots-application-mixin

                       standard-application)

  ())


(defvar *wwwroot*

  (merge-pathnames #P"wwwroot/"

           (asdf:component-pathname (asdf:find-system :ucw-tutorial-01))))

(defvar *js*

  (merge-pathnames #P"wwwroot/js/"

           (asdf:component-pathname (asdf:find-system :ucw-tutorial-01))))

(defvar *css*

  (merge-pathnames #P"wwwroot/css/"

           (asdf:component-pathname (asdf:find-system :ucw-tutorial-01))))

(defvar *img*

  (merge-pathnames #P"wwwroot/img/"

           (asdf:component-pathname (asdf:find-system :ucw-tutorial-01))))


(defvar *ucw-tutorial-01-application*

  (make-instance

   'ucw-tutorial-01-application

   :url-prefix "/"

   :debug-on-error t

   :static-roots (list (cons "wwwroot/"  *wwwroot*)

               (cons "css/"  *css*)

               (cons "js/"  *js*)

               (cons "img/"  *img*))))



;;;Two functions to ease to start and stop our application


(defun start-ucw-tutorial-01-server ()

  (setf (server.backend *ucw-tutorial-01-server*)

    (make-backend :httpd :port 8080))

  (register-application *ucw-tutorial-01-server* *ucw-tutorial-01-application*)

  (startup-server *ucw-tutorial-01-server*))



(defun stop-ucw-tutorial-01-server ()

  (shutdown-server *ucw-tutorial-01-server*))



Con lo anterior hemos definido un servidor web especifico para nuestro tutorial, una aplicación y las rutas para los componentes de la aplicación, considerando css, js, imagenes y el direcorio raíz de la aplicación web.


Además de un par de funciones para arrancar y detener la aplicación UCW de nuestro Tutorial.


Agregar al sistema la inicialización del servidor


emacs /ucw-tutorial-01/ucw-tutorial-01.asd

;;;; ucw-tutorial-01.asd


(asdf:defsystem #:ucw-tutorial-01

  :description "Beginners UCW tutorial part 01"

  :author "Erick Lopez "

  :license "BSD 2 Clause (http://opensource.org/comment/1294"

  :depends-on (#:ucw-core

               #:ucw

           #:parenscript

               #:iolib)

  :serial t

  :components ((:file "package")

               (:file "ucw-tutorial-01")

           (:file "ucw-server-init")))


Como seguramente notaron solo agregamos el nombre del archivo que contiene el código de inicialización del servidor, sin extensión, al final de la definición de nuestro sistema



Incorporando la funcionalidad de UCW al entorno de nuestro sistema


emacs /ucw-tutorial-01/package.lisp

;;;; package.lisp


(defpackage #:ucw-tutorial-01

  (:shadowing-import-from #:ucw-core #:parent)

  (:shadowing-import-from :ucw-standard :call)

  (:shadowing-import-from :ucw-core :cookie-value)

  (:use #:cl

    #:ucw-core

    #:ucw))


Aquí modificamos package.lisp y agregamos algunas precauciones al importar algunos símbolos de UCW y declaramos el uso de ucw-core, ucw y parenscript.



Iniciar el servidor de la aplicación


Ahora es el momento de inicializar nuestra aplicación y verificar si el servidor web que acabamos de definir funciona correctamente.


Primero, carguemos el sistema de nuestro tutorial desde el REPL de Emacs:


CL-USER> (ql:quickload "ucw-tutorial-01")

To load "ucw-tutorial-01":

  Load 1 ASDF system:

    ucw-tutorial-01

; Loading "ucw-tutorial-01"

..................

("ucw-tutorial-01")


A continuación pasemos al paquete de nuestra aplicación:


CL-USER> (in-package :ucw-tutorial-01)
#
UCW-TUTORIAL-01>


Y arranquemos nuestro servidor web de la aplicación.


UCW-TUTORIAL-01> (start-ucw-tutorial-01-server)


NIL
UCW-TUTORIAL-01>


Ahora, en el navegador, vayamos a la siguiente url:


http://localhost:8080/


Y si todo salio bien veremos lo siguiente:





Nuestro servidor nos esta respondiendo, ¡Felicidades!


¿Porque nos manda ese mensaje de pagina no encontrada?


Porque aún no hemos definido ninguna pagina de la aplicación, asi que no tenemos nada que mostrar por el momento.


Eso lo veremos en la siguiente entrega de este tutorial:


http://www.huuii.com/site/lispmx/1141


Espero lo esten disfrutando y aprendiendo.


Sus dudas pueden expresarlas en los comentarios, con gusto las resolveré.


Mientras tanto, happy hacking!


Autor: Erick "ikki" López





También te puede interesar
lispEn 2017-12-20 13:30:22