我曾经能够像这样在compojure中启动一个Web服务器:
(run-server {:port 8080} "/*" (servlet my-app))
Run Code Online (Sandbox Code Playgroud)
有谁知道这个函数在最新的组件中去了哪里?(0.6.2)
文档说我应该从命令行运行它并使用一些怪异的自动重新加载的东西,此时我可能也在使用python.
我必须从Clojure Web应用程序调用用Java编写的servlet,我不明白该怎么做.
使用Java开发webapp,我必须在web.xml中描述所有映射.在Compojure中,我看到,我必须描述路线.那么,我可以将Java servlet绑定到一个这样的路由吗?
对不起,如果我的问题是愚蠢的,但我搜索了很多但没有找到答案; 我刚刚开始为网络开发.
有没有办法在Ring处理程序中获取HttpServletRequest对象?我正在使用Noir来开发一个网络应用程序.我需要在处理URI时获取HttpServletRequest obj.所以我使用(noir.request.ring-request)函数来获取响铃请求映射,其中包含:servlet-request键,但值为nil.这是正确的做法还是我错过了什么?
以下是代码:
(ns my-app
(:use noir.request))
(defpage [:get "/app"] []
(str (ring-request)))
Run Code Online (Sandbox Code Playgroud)
结果:
{:remote-addr "127.0.0.1", :scheme :http, :query-params {}, :session {}, :form-params {}, :multipart-params {}, :servlet #, :request-method :get, :query-string nil, :content-type nil, :cookies {"ring-session" {:value "eb509a65-d33a-40d2-9646-e2ff785428b0"}}, :uri "/app", :server-name "127.0.0.1", :params {}, :headers {"cookie" "ring-session=eb509a65-d33a-40d2-9646-e2ff785428b0", "accept-charset" "GBK,utf-8;q=0.7,*;q=0.3", "accept-language" "en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4", "accept-encoding" "gzip,deflate,sdch", "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "user-agent" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2", "connection" "keep-alive", "host" "127.0.0.1:8080"}, :servlet-request #, :content-length nil, :server-port 8080, :character-encoding nil, :servlet-response #, …Run Code Online (Sandbox Code Playgroud) 我刚刚http://blog.jayfields.com/2011/02/clojure-web-socket-introduction.html工作.
我也有ring + compojure工作.
我想用戒指...不知何故......用webbit这可能吗?
谢谢!
在http://mindbat.com/2013/03/clojurewest-2013-day-one-notes/上有一条说明如下:
我认为这是一个很好的建议,但我不完全确定如何在Ring/Compojure应用程序中实现它.任何人都可以举一个具体的例子说明这将如何运作?
我特别感兴趣的是如何组合defroutes,init并以app这种方式一起摆脱该范围内的全局变量.
如果用户已登录(即会话的user-id密钥值为非零值),则路由到一个页面的最佳方式是什么?如果用户未登录,则是另一个页面的最佳方法?理想的是两组不同的路线.
谢谢!
另外,有没有使用compojure的好示例应用程序?
我是Clojure的新手,我玩得很开心.我遇到一些麻烦的一件事是如何阅读错误,我个人认为它们不是很具描述性,但这可能是由于我的"新手".
例如,我现在遇到的问题是当我尝试启动我的环服务器时(如果需要,我可以提供更多详细信息):
Started server on port 3000
java.lang.IllegalArgumentException: No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil
core_deftype.clj:544 clojure.core/-cache-protocol-fn
io.clj:69 clojure.java.io/fn[fn]
io.clj:102 clojure.java.io/reader
RestFn.java:410 clojure.lang.RestFn.invoke
validator.clj:161 selmer.validator/validate-tags
validator.clj:175 selmer.validator/validate
template_parser.clj:155 selmer.template-parser/read-template
template_parser.clj:206 selmer.template-parser/preprocess-template
RestFn.java:410 clojure.lang.RestFn.invoke
parser.clj:211 selmer.parser/parse-file
parser.clj:234 selmer.parser/parse
RestFn.java:442 clojure.lang.RestFn.invoke
parser.clj:99 selmer.parser/render-file
RestFn.java:425 clojure.lang.RestFn.invoke
layout.clj:17 picture-gallery.views.layout/picture-gallery.views.layout.RenderablePage
core.clj:94 compojure.core/make-route[fn]
core.clj:40 compojure.core/if-route[fn]
core.clj:25 compojure.core/if-method[fn]
core.clj:107 compojure.core/routing[fn]
core.clj:2515 clojure.core/some
core.clj:107 compojure.core/routing
RestFn.java:139 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
core.clj:112 compojure.core/routes[fn]
core.clj:107 compojure.core/routing[fn]
core.clj:2515 clojure.core/some
core.clj:107 compojure.core/routing
RestFn.java:139 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
core.clj:112 compojure.core/routes[fn] …Run Code Online (Sandbox Code Playgroud) 我正在使用Clojure(ring和compojure)来构建一个Web应用程序,我不知道从哪里开始使用https.我有一个需要保护的注册和登录,然后一旦他们通过身份验证,他们就需要保持https状态.
我似乎找不到一个关于一般设置https或专门设置clojure应用程序的好教程.
我找到了这个答案:如何在ring/compojure中启用https和http-> https重定向
这是否意味着我可以编写我的compojure应用程序,好像没有https并且让nginx坐在前面并为我处理所有这些事情?
根据路线上的Compojure文档,我可以轻松获得如下的单个参数:
(POST "/my-app" [param1 param2]
(str "<h1>Hello " param1 " and " param2 "</h1>"))
Run Code Online (Sandbox Code Playgroud)
如何获取所有参数,而不仅仅是单个参数?
当我尝试在使用Compojure模板创建的Clojure Webapp项目中使用POST方法时,得到了“ 无效的防伪令牌 ”。
我进行了研究,Ring中间件为来自其他站点的经过身份验证的请求创建了CSRF(跨站点请求表单)令牌(以使用已经登录并访问不允许访问的页面的其他人的凭据)。
这些令牌是默认的,我们需要在WebApp周围使用ring.middleware的wrap-params。无法到达任何地方。请帮忙 !!如何摆脱无效的防伪令牌。
我的handler.clj文件是:
(ns jsonparser-webapp.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[jsonparser-webapp.views :as views])
(:use [ring.middleware.params :only [wrap-params]])
(defroutes app-routes
(GET "/"
[]
(views/home-page))
(GET "/goto"
[]
(views/goto))
(POST "/posted"
{params :params}
(views/posted params))
(route/not-found "Not Found"))
(def app
(wrap-params app-routes site-defaults))
Run Code Online (Sandbox Code Playgroud)
我的views.clj文件是
(ns jsonparser-webapp.views
(:require [hiccup.page :as hic-p]
[hiccup.form :as hf]))
(defn gen-page-head
[title]
[:head
[:title title]])
(defn home-page
[]
(hic-p/html5
(gen-page-head "Json Parser Home.")
[:h1 "Welcome."]
[:p "Json Web App."] …Run Code Online (Sandbox Code Playgroud)