2011-11-01 31 views
5

Có cách nào để lấy đối tượng HttpServletRequest trong trình xử lý Ring không? Tôi đang sử dụng Noir để phát triển một ứng dụng web. Tôi cần phải nhận được HttpServletRequest obj khi xử lý một URI. Vì vậy, tôi sử dụng hàm (noir.request.ring-request) để lấy lại bản đồ yêu cầu vòng chứa: khóa yêu cầu servlet, nhưng giá trị là không. Đây có phải là cách đúng để làm điều đó hay tôi bỏ lỡ điều gì đó?Cách nhận HttpServletRequest trong trình xử lý Ring?

Sau đây là đoạn code:

(ns my-app 
    (:use noir.request)) 
(defpage [:get "/app"] [] 
    (str (ring-request))) 

kết quả:

{: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 #, :body #, :servlet-context #} 
+0

Ra quan tâm, những gì bạn đang cố gắng để làm cho các đối tượng yêu cầu? Có thể có một số cách khác để thực hiện điều này. –

Trả lời

1

Dường như bản đồ theo yêu cầu vòng được xây dựng dựa trên adapter bạn đang sử dụng cho các máy chủ web. Trong trường hợp của cầu cảng, điều này xảy ra trong ring.adapter.jetty:

https://github.com/ring-clojure/ring/blob/master/ring-jetty-adapter/src/ring/adapter/jetty.clj

Nếu tôi là bạn, tôi sẽ tạo ra bộ chuyển đổi của riêng tôi mà rõ ràng cho biết thêm những gì bạn cần bản đồ theo yêu cầu. Cụ thể bạn sẽ thay thế

request-map (servlet/build-request-map request)

với một cái gì đó như:

request-map (assoc (servlet/build-request-map request) :jetty-request request)
Các vấn đề liên quan