Web Application Development
in Clojure
Jacek Laskowski @JacekLaskowski
blog.japila.pl
Kiev, Ukraine, 24.05.2013
Map data structure in Clojure
Symbol “m” points at the map
Map in Clojure• Map maps keys to values• Maps are functions of their
keys• Keywords usually keys• assoc to add key and value• dissoc to remove keys
“Functional” response
Leiningen• Automating Clojure
projects with Clojure• lein help when in trouble• http://leiningen.org/
Project setup
• lein new jeeconf-clojure-webapp• cd jeeconf-clojure-webapp• Configure project in project.clj• ...more soon
Ring• Clojure library for web
application development• HTTP abstraction = HTTP
requests are Clojure maps• https://github.com/ring-
clojure/ring
Project’s project.clj
• Ring 1.2.0 Beta 3• Clojure 1.5.1
Project setup cont.
• lein repl• (use 'ring.adapter.jetty)• (run-jetty handler options)• (doc run-jetty) when in trouble
“Functional” response
Ring Utils• ring.util.response• response• not-found
• ring.handler.dump• handle-dump
• ring.middleware.stacktrace• wrap-stacktrace-web
Responds differently based on the URI of a request
What does the handler do?
Compojure• Clojure library for web routing• DSL to generate Ring handler
functions• http://compojure.org/
Project’s project.clj cont.
• Compojure 1.1.5• Ring 1.2.0 Beta 3• Clojure 1.5.1
Project setup cont.
• lein repl• (use 'ring.adapter.jetty)• (run-jetty handler options)
• (use ‘compojure.core)• (defroutes)• GET et al.
Compojure Utils• compojure.route• files• not-found• resources
• compojure.handler• api• site
Generates HTML pages based on the URI of a request
What does the app do?
Enlive• Clojure library for web
templates• Enlive template is a HTML file
and a deftemplate form• https://github.com/cgrand/
enlive
Project’s project.clj cont.
• Enlive 1.1.1• Compojure 1.1.5• Ring 1.2.0 Beta 3• Clojure 1.5.1
https://github.com/jaceklaskowski/librarian-clojure
http://librarian-clojure.herokuapp.com/
Pitannja?Jacek
Laskowski @JacekLaskowskiblog.japila.pl
Kiev, Ukraine, 24.05.2013
Top Related