Clojure - 应用



Clojure 有一些贡献的库,这些库可以创建桌面基于 Web 的应用程序。让我们讨论一下它们中的每一个。

序号 应用及描述
1 桌面 – See-saw

See-saw 是一个可用于创建桌面应用程序的库。

2 桌面 – 更改文本的值

窗口中内容的值可以通过使用‘config!’选项来更改。在下面的示例中,config!选项用于将窗口内容更改为“Good Bye”的新值。

3 桌面 – 显示模式对话框

可以通过使用 see-saw 类的 alert 方法显示模式对话框。该方法接受需要在模式对话框中显示的文本值。

4 桌面 – 显示按钮

按钮可以在 button 类的帮助下显示。

5 桌面 – 显示标签

标签可以在 label 类的帮助下显示。

6 桌面 – 显示文本字段

文本字段可以在 text 类的帮助下显示。

Web 应用 - 简介

要在 Clojure 中创建 Web 应用,您需要使用 Ring 应用库,该库可在以下链接找到 https://github.com/ring-clojure/ring

您需要确保从网站下载必要的 jar 文件,并确保将其作为 Clojure 应用的依赖项添加。

Ring 框架提供以下功能 -

  • 设置使 http 请求作为常规 Clojure HashMap 进入您的 Web 应用,并且同样地使您可以将响应作为 HashMap 返回。

  • 提供一个规范,准确描述这些请求和响应映射应该是什么样子。

  • 自带一个 Web 服务器(Jetty)并将您的 Web 应用连接到它。

Ring 框架可以自动启动 Web 服务器并确保 Clojure 应用在此服务器上运行。然后还可以使用 Compojure 框架。这允许您创建路由,现在大多数现代 Web 应用都是这样开发的。

创建您的第一个 Clojure 应用 - 下面的示例显示了如何在 Clojure 中创建您的第一个 Web 应用。

(ns my-webapp.handler
   (:require [compojure.core :refer :all]
      [compojure.route :as route]
      [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))
(defroutes app-routes
   (GET "/" [] "Hello World")
   (route/not-found "Not Found"))
(def app
   (wrap-defaults app-routes site-defaults))

让我们看一下程序的以下方面 -

  • ‘defroutes’用于创建路由,以便对 Web 应用的不同路由的请求可以定向到 Clojure 应用中的不同函数。

  • 在上面的示例中,“/”被称为默认路由,因此当您浏览到 Web 应用的根目录时,字符串“Hello World”将发送到 Web 浏览器。

  • 如果用户访问任何 Clojure 应用无法处理的 url,则它将显示字符串“Not Found”。

当您运行 Clojure 应用时,默认情况下您的应用将加载为 localhost:3000,因此如果您浏览到此位置,您将收到以下输出。

Clojure Application

Web 应用 – 向您的 Web 应用添加更多路由

您还可以向您的 Web 应用添加更多路由。以下示例显示了如何实现此目的。

(ns my-webapp.handler
   (:require [compojure.core :refer :all]
      [compojure.route :as route]
      [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))
(defroutes app-routes
   (GET "/" [] "Hello World")
   (GET "/Tutorial" [] "This is a tutorial on Clojure")
   (route/not-found "Not Found"))
(def app
   (wrap-defaults app-routes site-defaults))

您可以看到,在应用中添加路由就像添加另一个带有 url 路由的 GET 函数一样简单。(GET "/Tutorial" [] "This is a tutorial on Clojure")

如果您浏览到https://127.0.0.1:3000/Tutorial位置,您将收到以下输出。

Localhost
广告