2011-11-01 5 views
5

링 핸들러에서 HttpServletRequest 객체를 가져 오는 방법이 있습니까? 웹 앱 개발에 노아를 사용하고 있습니다. URI를 처리 할 때 HttpServletRequest obj를 가져와야합니다. 그래서 (noir.request.ring-request) 함수를 사용하여 다음을 포함하는 링 요청 맵을 얻습니다. 서블릿 요청 키. 값은 nil입니다. 이것이 올바른 방법일까요, 아니면 뭔가를 놓칠 수 있습니까?링 핸들러에서 HttpServletRequest를 얻는 방법은 무엇입니까?

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

결과 :

그것은 반지의 요청에지도처럼 보이는
{: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

: 특히 당신은 같은과

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

을 대체 할 것이다? 어쩌면 이것을 달성 할 다른 방법이있을 수 있습니다. –

답변

1

는 사용자가 웹 서버에 사용하는 어댑터를 기반으로하여 구성되어

다음

는 코드입니다. 부두의 경우,이 ring.adapter.jetty에서 발생 : 내가 당신이라면, 명시 적으로 요청지도에 필요한 추가하는 내 자신의 어댑터를 만들 것

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

. 당신이 요청 객체에 무엇을하려고 관심 아웃

request-map (assoc (servlet/build-request-map request) :jetty-request request)