GVKun编程网logo

如何在 Clojure 中制作 Web 应用程序?

15

在这里,我们将给大家分享关于如何在Clojure中制作Web应用程序?的知识,同时也会涉及到如何更有效地android–如何在我的WebView应用程序中打开另一个应用程序?、ClojurePedes

在这里,我们将给大家分享关于如何在 Clojure 中制作 Web 应用程序?的知识,同时也会涉及到如何更有效地android – 如何在我的WebView应用程序中打开另一个应用程序?、Clojure Pedestal root用作应用程序/八位字节流、Clojure Web应用程序-我从哪里开始?、clojure – 如何在Compojure / Hiccup中输出HTML注释?的内容。

本文目录一览:

如何在 Clojure 中制作 Web 应用程序?

如何在 Clojure 中制作 Web 应用程序?

我想这对于每天使用 Java 工作的绝大多数程序员来说是一个奇怪的问题。我不。我知道 Java 语言,因为我从事 Java 项目,而不是 Java
世界。我从来没有用 Java 从头开始​​制作过 Web 应用程序。如果我必须使用 Python、Ruby,我知道该去哪里(Django 或
Rails),但如果我想在 Clojure 中制作 Web 应用程序,不是因为我被迫生活在 Java
世界中,而是因为我喜欢这种语言,我想尝试一下,我应该使用哪些库和框架?

答案1

小编典典

到目前为止,我遇到的最好的 Clojure Web 框架是 Compojure:http:
//github.com/weavejester/compojure/tree/master

它体积小但功能强大,语法优美优雅。(它在底层使用了 Jetty,但它对你隐藏了 Servlet API,除非你想要它,这不会经常发生)。去查看那个 URL
上的 README,然后下载一个快照并开始播放。

android – 如何在我的WebView应用程序中打开另一个应用程序?

android – 如何在我的WebView应用程序中打开另一个应用程序?

我有一个Android应用程序,它显示一个移动网站(WebView),在移动网站上有链接重定向到PDF,Excel和视频文件.
当我尝试在我的常规浏览器中打开它时,我的手机要求用另一个应用程序打开它或者它开始下载,所以我可以在之后打开它.

但是在我的WebView应用程序中,它既不起作用,也没有响应,或者显示“页面不可用”错误.

它甚至可能吗?

解决方法:

要在WebView中处理链接,可以使用WebViewClient类的shouldOverrideUrlLoading方法.考虑以下示例;

   WebView webView = (WebView) findViewById(R.id.infoView);

   webView.setWebViewClient(new WebViewClient() {

            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                // Assuming you are giving link to some PDF file.
                if (url.contains(".pdf")) {
                    // Now do what you want to with the url here
                }

                return true;
            }
    }

这样,您可以拦截在WebView中点击的任何链接,然后执行您想要的任何操作.

Clojure Pedestal root用作应用程序/八位字节流

Clojure Pedestal root用作应用程序/八位字节流

我试图在 Pedestal 0.5.1中托管静态资产和服务.我使用:: file-path指向托管文件的目录.如果我直接导​​航到文件 http://localhost:8888/index.html,这可以正常工作,但如果我转到站点 http://localhost:8888的根目录,它将文件作为application / octet-stream而不是text / html提供.我改编了 Hello World Sample,它有相同的行为.

SRC /程序hello_world / server.clj

(ns hello-world.server
  (:require [io.pedestal.http :as http]
            [io.pedestal.http.route :as route])
  (:gen-class))

(def routes
  (route/expand-routes [[]]))

(def service
  {:env                 :prod
   ::http/join? false
   ::http/routes routes
   ::http/file-path "/tmp/www"       
   ::http/type          :jetty
   ::http/allowed-origins {:creds true :allowed-origins (constantly true)}       
   ::http/port          8888})

(defonce runnable-service (http/create-server service))

(defn -main
  "The entry-point for 'lein run'"
  [& args]
  (println "\nCreating your server...")
  (http/start runnable-service))

开始莱恩跑

$curl -i localhost:8888
HTTP/1.1 200 OK
Date: Fri,18 Nov 2016 16:02:56 GMT
Last-Modified: Fri,18 Nov 2016 15:10:22 GMT
Content-Type: application/octet-stream
Content-Length: 12
Server: Jetty(9.3.8.v20160314)

hello world

$curl -i localhost:8888/index.html
HTTP/1.1 200 OK
Date: Fri,18 Nov 2016 16:03:02 GMT
Last-Modified: Fri,18 Nov 2016 15:10:22 GMT
Content-Type: text/html
Content-Length: 12
Server: Jetty(9.3.8.v20160314)

hello world

有没有办法修复“/”路由以提供正确的内容类型?

解决方法

要获取用作目录索引的文件的正确内容类型,
将拦截器io.pedestal.http.ring-middlewares / file-info添加到
您的基座配置.

这要求您使用覆盖默认拦截器链
你自己的,所以你必须包括所有的默认拦截器
您的应用需要.

例如,您的服务可能如下所示:

(ns hello-world.service
  (:require
   [io.pedestal.http :as http]
   [io.pedestal.http.ring-middlewares :as middlewares]
   [io.pedestal.http.route :as route]
   [io.pedestal.http.route.deFinition :refer [defroutes]]))

(defroutes routes
  [[]])

(def service
  {::http/type :jetty
   ::http/port 8080
   ::http/interceptors [http/log-request
                        http/not-found
                        middlewares/session
                        route/query-params
                        (middlewares/file-info)  ; HERE
                        (middlewares/file "/tmp/www")
                        ;; ... insert other interceptors ...
                        (route/router #(deref #'routes) :map-tree)]})

有关您可能想要包含的其他默认拦截器的示例,
见default-interceptors.

说明

这可能在实践中并不经常出现,因为许多网络
应用程序使用处理函数来生成主页
返回一个静态文件.

对于备用解决方案,您可以为/编写路由处理程序
使用适当的方法返回index.html的内容的路由
内容类型.

Pedestal的默认拦截器堆栈包括
io.pedestal.http.ring-middlewares/file
和io.pedestal.http.ring-middlewares/content-type.

这些拦截器只包含Ring中间件函数
file-request
和content-type-response,分别.

file-request返回一个java.io.File对象作为HTTP响应.

content-type-response检查请求URI以确定
Content-Type标头的值.由于URI只是/它
默认为application / octet-stream.

相比之下,ring.middleware.file-info(不推荐使用)进行了检查
响应中实际File对象的路径.
见file-info-response.

io.pedestal.http.ring-middlewares / file-info是拦截器ring.middleware.file-info / file-info-response周围的包装器.

Clojure Web应用程序-我从哪里开始?

Clojure Web应用程序-我从哪里开始?

所以最近我一直在研究Clojure,我喜欢这种语言。我想看看是否可以在其中制作一个小型Web应用程序,以挑战自己。但是,我绝对没有建立任何与Java相关的Web应用程序的经验。实际上,我实际上对Java没有太多的经验。我从哪说起呢?我在Apache和LAMP堆栈方面拥有丰富的经验,并且我知道在Apache上大多数情况下我只会使用Fast-
CGI,但我不知道Java世界中的等效功能(如果有的话)。

基本上,我只需要有关设置服务器和启动它的帮助。我了解(某种程度上)如何部署一个纯Java应用程序,但是一个纯Clojure应用程序又如何呢?这是如何运作的?我想,来自所有Web应用程序都以脚本语言编写的世界,这对我来说是全新的。

哦,顺便说一句, 我不想使用 像Compojure这样 的Clojure框架 。那将使学习的部分失败。

提前致谢。

答案1

小编典典

我建议您首先学习Servlet-
API,它支持Java世界中与HTTP请求和响应有关的所有事情。HttpServletRequestHttpServletResponse在这里覆盖很多地面。码头是一个不错的选择。在http://robert.zubek.net/blog/2008/04/26/clojure-
web-server/(使用Jetty 6)中有关于Clojure和Jetty的很好的介绍。

话虽这么说,Compojure的基本模型也很底层:它只是将请求和响应包装在Clojure数据结构中,但是您仍然负责所有路由,生成正确的响应代码。生成ETag等,有时比LAMP堆栈更底层。

clojure – 如何在Compojure / Hiccup中输出HTML注释?

clojure – 如何在Compojure / Hiccup中输出HTML注释?

我希望我的程序输出以下 HTML:
<!--[if lt IE 8]><link rel="stylesheet" href="../blueprint/ie.css" type="text/css" media="screen,projection"><![endif]-->

有没有办法用Hiccup输出html注释文字?

解决方法

只需插入它们.也许这有点欺骗,但它的作品…
user=> (html
         [:html
          [:head
           "<!--[if lt IE 8]>"
           [:link {:rel  "stylesheet"
                   :href "../blueprint/ie.css"
                   :type "text/css"
                   :media "screen,projection"}]
           "<![endif]-->"]])
<html><head><!--[if lt IE 8]><link href=\"../blueprint/ie.css\" media=\"screen,projection\" rel=\"stylesheet\" type=\"text/css\" /><![endif]--></head></html>

关于如何在 Clojure 中制作 Web 应用程序?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – 如何在我的WebView应用程序中打开另一个应用程序?、Clojure Pedestal root用作应用程序/八位字节流、Clojure Web应用程序-我从哪里开始?、clojure – 如何在Compojure / Hiccup中输出HTML注释?等相关知识的信息别忘了在本站进行查找喔。

本文标签: