在这里,我们将给大家分享关于如何在Clojure中制作Web应用程序?的知识,同时也会涉及到如何更有效地android–如何在我的WebView应用程序中打开另一个应用程序?、ClojurePedes
在这里,我们将给大家分享关于如何在 Clojure 中制作 Web 应用程序?的知识,同时也会涉及到如何更有效地android – 如何在我的WebView应用程序中打开另一个应用程序?、Clojure Pedestal root用作应用程序/八位字节流、Clojure Web应用程序-我从哪里开始?、clojure – 如何在Compojure / Hiccup中输出HTML注释?的内容。
本文目录一览:- 如何在 Clojure 中制作 Web 应用程序?
- android – 如何在我的WebView应用程序中打开另一个应用程序?
- Clojure Pedestal root用作应用程序/八位字节流
- Clojure Web应用程序-我从哪里开始?
- clojure – 如何在Compojure / Hiccup中输出HTML注释?
如何在 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),在移动网站上有链接重定向到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用作应用程序/八位字节流
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应用程序,以挑战自己。但是,我绝对没有建立任何与Java相关的Web应用程序的经验。实际上,我实际上对Java没有太多的经验。我从哪说起呢?我在Apache和LAMP堆栈方面拥有丰富的经验,并且我知道在Apache上大多数情况下我只会使用Fast-
CGI,但我不知道Java世界中的等效功能(如果有的话)。
基本上,我只需要有关设置服务器和启动它的帮助。我了解(某种程度上)如何部署一个纯Java应用程序,但是一个纯Clojure应用程序又如何呢?这是如何运作的?我想,来自所有Web应用程序都以脚本语言编写的世界,这对我来说是全新的。
哦,顺便说一句, 我不想使用 像Compojure这样 的Clojure框架 。那将使学习的部分失败。
提前致谢。
答案1
小编典典我建议您首先学习Servlet-
API,它支持Java世界中与HTTP请求和响应有关的所有事情。HttpServletRequest
并HttpServletResponse
在这里覆盖很多地面。码头是一个不错的选择。在http://robert.zubek.net/blog/2008/04/26/clojure-
web-server/(使用Jetty 6)中有关于Clojure和Jetty的很好的介绍。
话虽这么说,Compojure的基本模型也很底层:它只是将请求和响应包装在Clojure数据结构中,但是您仍然负责所有路由,生成正确的响应代码。生成ETag
等,有时比LAMP堆栈更底层。
clojure – 如何在Compojure / Hiccup中输出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注释?等相关知识的信息别忘了在本站进行查找喔。
本文标签: