2009-09-23 19 views
21

तो हाल ही में मैं क्लोजर में देख रहा हूं, और मुझे भाषा पसंद है। मैं देखना चाहता हूं कि मैं खुद को चुनौती देने के लिए इसमें एक छोटा सा वेब एप्लिकेशन कर सकता हूं या नहीं। हालांकि, मेरे पास जावा से संबंधित वेब अनुप्रयोगों को स्थापित करने में बिल्कुल कोई अनुभव नहीं है। असल में, मुझे जावा के साथ वास्तव में बहुत अधिक अनुभव नहीं है। मैं कहाँ से प्रारम्भ करूँ? मुझे अपाचे और एलएएमपी स्टैक के साथ बहुत अनुभव है, और मुझे अपाचे पर पता है कि मैं ज्यादातर मामलों में फास्ट-सीजीआई का उपयोग करता हूं, लेकिन मुझे जावा दुनिया में समतुल्य नहीं पता (यदि कोई है तो)।क्लोजर वेब एप्लिकेशन - मैं कहां से शुरू करूं?

असल में, मैं सिर्फ सर्वर की स्थापना और हो रही है इसे शुरू के साथ मदद की जरूरत है। मैं समझता हूं (कुछ हद तक) शुद्ध जावा एप्लिकेशन को कैसे तैनात किया जाए, लेकिन शुद्ध क्लोजर एप्लिकेशन के बारे में क्या? वह कैसे काम करता है? मुझे लगता है, एक ऐसी दुनिया से आ रहा है जहां सभी वेब अनुप्रयोग स्क्रिप्टिंग भाषाओं में लिखे गए हैं, यह मेरे लिए बिल्कुल नया है।

ओह, और वैसे, मैं क्लोजर फ्रेमवर्क जैसे कंपोजर का उपयोग नहीं करना चाहता हूं। इससे इस के सीखने के हिस्से को हराया जाएगा।

अग्रिम धन्यवाद।

उत्तर

17

मैं आपको सर्वलेट-एपीआई सीखकर शुरू करने की सलाह दूंगा, जो जावा दुनिया में HTTP अनुरोधों और प्रतिक्रियाओं से संबंधित सभी चीजों का समर्थन करता है। HttpServletRequest और HttpServletResponse यहां बहुत सारी जमीन शामिल हैं। जेटी यहाँ एक अच्छी पसंद है; क्लोजर और जेटी के बारे में http://robert.zubek.net/blog/2008/04/26/clojure-web-server/ (जेटी 6 का उपयोग करके) के बारे में अच्छी शुरुआत है।

कहा जा रहा है कि, कॉम्पोजर का मूल मॉडल बहुत कम स्तर वाला है: यह क्लोजर-डेटास्ट्रक्चर में अनुरोधों और प्रतिक्रियाओं को लपेटता है, लेकिन आप अभी भी सभी राउटिंग के लिए ज़िम्मेदार हैं, सही प्रतिक्रिया कोड उत्पन्न करते हैं। एक ETag आदि उत्पन्न करना, जो कभी-कभी लैंप-स्टैक के मुकाबले अधिक निम्न स्तर की सामग्री होती है।

(ns servlet 
((:gen-class :extends javax.servlet.http.HttpServlet)) 

(defn -doGet 
    [_ request response] 
    (.setContentType response "text/html") 
    (let w (.getWriter response)] 
     (.println w 
     (str "<html>" 
      "<head>" 
      "<title>Hello World!</title>" 
      "</head>" 
      "<body>" 
      "<h1>Hello " 
      (.getParameter request "Name") 
      "</h1>" 
      "</body>" 
      "</html>")))) 

(defn -doPost [_ request response] 
    (-doGet nil request response)) 

तो एक वेब बनाने के लिए:

+2

हम्म, ठीक है, मैं यह काम करने के बारे में एक विचार प्राप्त करने के लिए कंपोजर के स्रोत कोड पर एक नज़र डालेगा। अगर मैं गंभीर रूप से एक पूर्ण वेब अनुप्रयोग लिख रहा था, तो शायद मैं इसका उपयोग करूँगा, लेकिन मैं स्वयं को जावा सर्वर के काम के तरीके से पेश करने के लिए खुद को यह परत लिखना चाहता हूं। +1 –

+3

क्लोजर के डेटा संरचनाओं के लिए HTTP-प्रतिक्रिया और अनुरोध के बीच मैपिंग का एक अच्छा अवलोकन के लिए, जैसा कि इसे रिंग और कंपोज़र में उपयोग किया जाता है, मैं अनुशंसा करता हूं कि http://github.com/mmcgrana/ring/blob/master/ एसपीईसी – pmf

+0

मैं निश्चित रूप से अंगूठी में देखता हूं, क्योंकि यह क्लोजर को सर्वलेट के बराबर प्रदान करता है और आवश्यकतानुसार अधिक जावा जानने की आवश्यकता के साथ काफी मदद करता है। मैंने देखा है कि प्रत्येक क्लोजर वेब ढांचा, इसे अनुवाद परत के रूप में उपयोग करते हुए इसके शीर्ष पर बैठता है। – deterb

3

यदि आप कंपोजर या अन्य का उपयोग नहीं करना चाहते हैं तो आपको या तो वेबसर्वर लोड होना होगा और अपने जेएआर को कॉल करना होगा, या सॉकेट का उपयोग करके एक वेबसर्वर लिखना होगा। उस अर्थ में आप वेब पर सेट करने के लिए वेब पर कई guides का पालन कर सकते हैं, और compile a JAR

This ऐसा लगता है कि आप क्या कर रहे हैं।

+0

अहा, एक जार संकलन के लिए लिंक मैं के लिए क्या देख रहा था है! मुझे यकीन नहीं था कि क्लोजर को वेब सर्वर पर कैसे चलाना था। जैसे मैंने कहा, मैं एक स्क्रिप्टिंग भाषा पृष्ठभूमि से आया हूं, जहां आप फ़ाइलों को एक विशिष्ट निर्देशिका में डालते हैं और आप कर चुके हैं। +1 :) –

+0

यह भी उपयोगी हो सकता है: http://markmail.org/message/mipzbehperyyd67j –

-1

वैसे आप ठीक से FastCGI सीधे clojure से उपयोग कर सकते हैं। फास्टसीजीआई एक बहुत ही सरल प्रोटोकॉल है, इसलिए स्वयं को क्लोजर में सर्वर लिखना मुश्किल नहीं होना चाहिए (मुझे संदेह है कि क्लोजर के लिए ऐसा करने के लिए एक लाइब्रेरी है, लेकिन जावा के लिए भी एक हो सकता है)।

1

यदि आप फास्टसीजीआई के साथ जाने जा रहे हैं तो यह ध्यान रखना एक बात है कि जावा अन्य स्क्रिप्टिंग भाषाओं की तरह नहीं है, वहां रूबी या पायथन के विपरीत जेवीएम शुरू करने के लिए एक प्रारंभ समय है। और यह प्रत्येक अनुरोध के लिए JVM प्रारंभ करने के लिए एक भारी ऑपरेशन है।

तो मैं तुम्हें सवाल सही ढंग से आप अनुप्रयोग बनाने के लिए एक देशी जावा रास्ता तलाश कर रहे हैं समझते हैं। यदि ऐसा कंपोज़र बिल्कुल सही करता है कि यह दृश्यों के पीछे आपके लिए एक सर्वलेट बनाता है तो अंत में आप जावा में वाले लोगों की तरह क्लोजर वेब एप्लिकेशन बना सकते हैं और इसे किसी भी एप्लिकेशन सर्वर पर तैनात कर सकते हैं।

+0

हां, आपने मेरा प्रश्न सही ढंग से समझा। मैं समझता हूं कि कंपोज़र यह करता है, लेकिन * यह * यह कैसे करता है? मैं मूल रूप से पूछ रहा हूं कि यह सब कैसे काम करता है। मुझे पता है कि मैं सिर्फ कंपोजर का उपयोग कर सकता हूं, लेकिन मैं यह समझने की कोशिश कर रहा हूं कि जावा-आधारित वेब एप्लिकेशन कैसे काम करते हैं। –

14

वास्तव में एक आसान तरीका आरंभ करने के लिए एक सर्वलेट कि, बिलाव या इसी तरह की पर चलता है, उदाहरण के लिए बनाने के लिए है।अपने वेब-INF फ़ोल्डर

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
id="WebApp_ID" version="2.5"> 

<display-name>Clojure Servlet</display-name> 

<servlet> 
<servlet-name>hello</servlet-name> 
<servlet-class>servlet</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>hello</servlet-name> 
<url-pattern>/hello</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
<welcome-file>index.html</welcome-file> 
</welcome-file-list> 
</web-app> 

संकलन और इस पैकेज एक युद्ध में में एक्सएमएल, और यह सिर्फ एक नियमित रूप से जावा सर्वलेट की तरह व्यवहार करेंगे। टॉमकैट पर तैनात करने के लिए, बस वेबपैस फ़ोल्डर में युद्ध छोड़ दें और टॉमकैट शुरू करें।

एक विस्तृत उदाहरण यहाँ उपलब्ध http://github.com/yogthos/clojure-maven-examples

संबंधित मुद्दे