दिलचस्प पोस्ट
मैवेन के साथ एससीएम क्रेडेंशियल्स को एक्सट्रॉसिट करना जावास्क्रिप्ट || ऑपरेटर 'str' ऑब्जेक्ट पायथन में आइटम असाइनमेंट का समर्थन नहीं करता है जावा के सिंक्रनाइज़ कीवर्ड का सी # संस्करण? कोड में डेटाटामपटल बनायें लीगेंड को ggplot2 लाइन प्लॉट के लिए जोड़ें जिन्जा 2: एक पाश के अंदर एक वैरिएबल के मान को बदलें PHP में URL से पार्सिंग डोमेन एंड्रॉइड में अलग-अलग एप्लीकेशन में ब्रॉडकास्ट रिसीवर का उपयोग कैसे करें? Php स्क्रिप्ट के दोहरे उद्धरण गूंज MySQL के लिए स्केलिंग समाधान (प्रतिकृति, क्लस्टरिंग) एसवीएन – शाखा को वापस ट्रंक में विलय करने में असमर्थ – कई पेड़-संघर्ष सी # WinForms त्रुटिप्रदाता नियंत्रण अशक्त सूचक अपवाद – findViewById () Django रूपों में सीएसएस स्टाइल

javascript से जावा सर्वलेट को बुला रहा है

मैं एमवीसी डिजाइन पैटर्न का उपयोग कर एक वेब अनुप्रयोग बनाने का प्रयास कर रहा हूं। जीयूआई भाग के लिए मैं जावास्क्रिप्ट का उपयोग करना चाहूंगा। और नियंत्रक जावा Servlets के लिए

अब मैंने जावास्क्रिप्ट के साथ वास्तव में कभी काम नहीं किया है, इसलिए मुझे पता लगाना है कि जावा सर्विस को जावास्क्रिप्ट से कैसे कॉल करना है और सर्विस सर्विस से प्रतिक्रिया कैसे प्राप्त करें।

क्या कोई व्यक्ति मेरी सहायता कर सकता है?

वेब के समाधान से एकत्रित समाधान "javascript से जावा सर्वलेट को बुला रहा है"

तो क्या आप सबलेट को अजाक्स कॉल करना चाहते हैं? इसके लिए आपको जावास्क्रिप्ट में XMLHttpRequest ऑब्जेक्ट की आवश्यकता है। यहां एक फ़ायरफ़ॉक्स संगत उदाहरण है:

 <script> var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { var data = xhr.responseText; alert(data); } } xhr.open('GET', 'myservlet', true); xhr.send(null); </script> 

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

 <script src="http://code.jquery.com/jquery-latest.min.js"></script> <script> $.get('myservlet', function(data) { alert(data); }); </script> 

किसी भी तरह, सर्वर पर /myservlet को url-pattern /myservlet पर मैप किया जाना चाहिए (आप इसे अपने स्वाद में बदल सकते हैं) और कम से कम doGet() कार्यान्वित किया है और डेटा को प्रतिक्रिया के रूप में निम्नानुसार लिखें:

 String data = "Hello World!"; response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(data); 

यह Hello World! दिखाया जाना चाहिए Hello World! जावास्क्रिप्ट चेतावनी में

आप निश्चित रूप से doPost() का भी उपयोग कर सकते हैं, लेकिन फिर आपको xhr.open()xhr.open() में 'POST' उपयोग करना चाहिए या $.get() बजाय $.get() बजाय jQuery में उपयोग करना चाहिए।

फिर, HTML पृष्ठ में डेटा दिखाने के लिए, आपको HTML DOM को हेरफेर करना होगा। उदाहरण के लिए, आपके पास एक है

 <div id="data"></div> 

एचटीएमएल में जहां आप प्रतिक्रिया डेटा प्रदर्शित करना चाहते हैं, तो आप 1 उदाहरण के alert(data) के बदले ऐसा कर सकते हैं:

 document.getElementById("data").firstChild.nodeValue = data; 

JQuery के उदाहरण में आप इसे अधिक संक्षिप्त और अच्छे तरीके से कर सकते हैं:

 $('#data').text(data); 

कुछ कदम आगे जाने के लिए, आप अधिक जटिल डेटा को स्थानांतरित करने के लिए एक आसान सुलभ डेटा प्रारूप प्राप्त करना चाहते हैं। सामान्य प्रारूप XML और JSON हैं पिछले एक सबसे अधिक पसंद है क्योंकि यह अधिक संक्षिप्त है और जावा और जावास्क्रिप्ट दोनों में एक बहुत आसान तरीके से इस्तेमाल किया जा सकता है। जावा में, आप पूर्णतः योग्य जावा ऑब्जेक्ट्स को JSON में बदलने के लिए और इसके विपरीत Google Gson का उपयोग कर सकते हैं।

 List<Product> products = productDAO.list(); // Product is just a Javabean with properties `id`, `name` and `description`. String json = new Gson().toJson(products); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(json); 

जावास्क्रिप्ट में आप इसे "तुरन्त" प्राप्त करने के लिए jQuery के $.getJSON() का उपयोग कर सकते हैं। चलो इसे एक <table> में प्रदर्शित करें

 $.getJSON('myservlet', function(data) { var table = $('<table>').appendTo($('#data')); $.each(data, function(i, product) { var row = $('<tr>').appendTo(table); $('<td>').text(product.id).appendTo(row); $('<td>').text(product.name).appendTo(row); $('<td>').text(product.description).appendTo(row); }); }); 

यह भी देखें :

  • जावा / जेएसपी / जेएसएफ़ और जावास्क्रिप्ट
  • जावास्क्रिप्ट ट्यूटोरियल
  • JSON ट्यूटोरियल
  • jQuery ट्यूटोरियल

यहां कोड एजेएक्स का प्रयोग एक एचटीएमएल 5 दस्तावेज़ में गतिशील रूप से प्रिंट करने के लिए होगा (अजाक्स कोड इंटरनेट और WWW (डेइटेल) बुक करने के समान है):

जावास्क्रिप्ट कोड:

 var asyncRequest; function start(){ try { asyncRequest = new XMLHttpRequest(); asyncRequest.addEventListener("readystatechange", stateChange, false); asyncRequest.open('GET', '/Test', true); // /Test is url to Servlet! asyncRequest.send(null); } catch(exception) { alert("Request failed"); } } function stateChange(){ if(asyncRequest.readyState == 4 && asyncRequest.status == 200) { var text = document.getElementById("text"); // text is an id of a text.innerHTML = asyncRequest.responseText; // div in HTML document } } window.addEventListener("load", start(), false); 

सर्विस कोड जावा कोड:

 public class Test extends HttpServlet{ @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException{ resp.setContentType("text/plain"); resp.getWriter().println("Servlet wrote this! (Test.java)"); } } 

HTML दस्तावेज़

  <div id = "text"></div> 

संपादित करें

जब मैंने वेब प्रोग्रामिंग के साथ नया था तब मैंने ऊपर जवाब लिखा था मैं इसे खड़े होने देता हूं, लेकिन जावास्क्रिप्ट का हिस्सा निश्चित रूप से jQuery में होना चाहिए, यह कच्चे जावास्क्रिप्ट की तुलना में 10 गुना अधिक आसान है।

मैं वास्तव में आपको जावास्क्रिप्ट कॉल्स के लिए jquery और सेवा स्तर के लिए जर्सी जैसे JSR311 के कुछ कार्यान्वयन का सुझाव देता हूं, जो आपके नियंत्रकों को सौंपेंगे।

इससे आपको एचटीटीपी कॉल्स और आपके डेटा सीरियलाइजेशन को संभालने के सभी अंतर्निहित तर्क के साथ मदद मिलेगी, जो एक बड़ी मदद है।

क्षमा करें, मैं jsp नहीं javascript पढ़ता हूँ। आपको ऐसा कुछ करने की आवश्यकता है (ध्यान दें कि यह एक सापेक्ष यूआरएल है और यह जावास्क्रिप्ट दस्तावेज़ के यूआरएल के आधार पर भिन्न हो सकता है):

 document.location = 'path/to/servlet'; 

जहां web.xml में आपके सबलेट मैपिंग कुछ ऐसा दिखता है:

 <servlet-mapping> <servlet-name>someServlet</servlet-name> <url-pattern>/path/to/servlet*</url-pattern> </servlet-mapping> 
  function callServlet() { document.getElementById("adminForm").action="./Administrator"; document.getElementById("adminForm").method = "GET"; document.getElementById("adminForm").submit(); 

}

 <button type="submit" onclick="callServlet()" align="center"> Register</button>