2010-02-15 8 views
8

क्या आप एक लिंक के साथ सर्वलेट को कॉल कर सकते हैं? उदाहरण के लिएक्या आप एक लिंक के साथ एक सर्वलेट बुला सकते हैं?

<a href="/servletName">link text</a> 

और संभावित रूप से क्वेरी ऑब्जेक्ट में उन्हें जोड़कर अनुरोध ऑब्जेक्ट को पैरामीटर पास करें।

नहीं, मैं बात इस तरह का दिखाई देता है कि:

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(/MyServlet); 
dispatcher.include(request,response); 

लेकिन मैं यह कैसे ट्रिगर करेगा? उदाहरण के लिए यदि यह जावास्क्रिप्ट कोड था तो मैं इसे एक jQuery क्लिक फ़ंक्शन में डाल सकता था, या यदि यह एक सर्वलेट था तो मैं इसे एक विधि में डाल दूंगा।

लेकिन मैं इस कोड को जेएसपी के भीतर से कैसे कॉल करूं? जहां तक ​​मुझे पता है कि आप जावास्क्रिप्ट घटनाओं के साथ जावा कोड को कॉल नहीं कर सकते हैं।

उत्तर

11
<a href="servletUrl?param=value">click</a> 

पूरी तरह से कानूनी है और काम करेगा।

सर्वलेट की doGet(..) विधि कहा जा कर देगा कि, और आप पैरामीटर request.getParameter("param")

+2

... जो विशेष रूप से 'doGet() 'को कॉल करेगा। – BalusC

+0

यह आईई में काम नहीं कर रहा है लेकिन यह फ़ायरफ़ॉक्स – Ankur

+2

@ अंकुर में करता है: यह निश्चित रूप से ब्राउज़र पर निर्भर नहीं है। समस्या एचटीएमएल/जेएस कोड या ब्राउज़र में एक कैश किए गए पृष्ठ में है (Ctrl + F5 या पुनरारंभ करें)। – BalusC

2

का उपयोग कर प्राप्त कर सकते हैं शायद निम्नलिखित क्या आप के बाद कर रहे हैं है:

<jsp:include page="/MyServlet"> 
    <jsp:param name="param" value="value"/> 
</jsp:include> 
10

बस एक गलत धारणा स्पष्ट करने के लिए :

जहाँ तक मुझे पता है कि आप जावास्क्रिप्ट घटनाओं के साथ जावा कोड को कॉल नहीं कर सकते हैं।

आप जावास्क्रिप्ट कोड (और घटनाओं) के साथ जावा कोड को पूरी तरह से कॉल कर सकते हैं। बिंदु पर, आपको बस जावास्क्रिप्ट को सर्वर के पक्ष में एक पूर्ण HTTP अनुरोध भेजने की आवश्यकता है। इसके लिए मूल रूप से 3 तरीके हैं।

  1. पहला तरीका मौजूदा लिंक/बटन/फॉर्म के आमंत्रण को अनुकरण करना है। जैसे

    <a id="linkId" href="http://www.google.com/search?q=balusc">Link</a> 
    
    <script type="text/javascript"> 
        document.getElementById('linkId').click(); 
    </script> 
    

    और

    <form id="formId" action="http://www.google.com/search"> 
        <input type="text" id="inputId" name="q"> 
    </form> 
    
    <script type="text/javascript"> 
        document.getElementById('inputId').value = 'balusc'; 
        document.getElementById('formId').submit(); 
    </script> 
    
  2. दूसरा तरीका एक सादे GET अनुरोध आग विंडो स्थान का प्रयोग है। उदाहरण के लिए:

    <script type="text/javascript"> 
        var search = 'balusc'; 
        window.location = 'http://www.google.com/search?q=' + search; 
    </script> 
    
  3. तीसरा रास्ता एक अतुल्यकालिक अनुरोध आग और परिणाम पर कार्रवाई करने के XMLHttpRequest ऑब्जेक्ट का प्रयोग है। यह तकनीक "अजाक्स" का मूल विचार है।

    <script type="text/javascript"> 
        function getUrl(search) { 
         var xhr = new XMLHttpRequest(); 
         xhr.onreadystatechange = function() { 
          if (xhr.readyState == 4) { 
           var responseJson = eval('(' + xhr.responseText + ')'); 
           var url = responseJson.responseData.results[0].unescapedUrl; 
           var link = document.getElementById('linkId'); 
           link.href = link.firstChild.nodeValue = url; 
           link.onclick = null; 
          } 
         } 
         var google = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=' 
         xhr.open('GET', google + search, true); 
         xhr.send(null); 
        } 
    </script> 
    
    <p>My homepage is located at: <a id="linkId" href="#" onclick="getUrl('balusc')">click me!</a></p> 
    

    यह jQuery साथ एक छोटा और crossbrowsercompatible ढंग से लिखा जा सकता है: यहाँ एक Firefox संगत उदाहरण है।

उपरोक्त उदाहरणों को अपने पर्यावरण में काम करने के लिए बस अपने स्वयं के सर्वलेट के साथ http://www.google.com/search को प्रतिस्थापित करें।

अधिक पृष्ठभूमि जानकारी के लिए, आपको this article भी उपयोगी मिल सकता है।

+0

पर एक फॉर्म पोस्ट करते हैं तो सभी कोड – Ankur

+2

के लिए धन्यवाद गलत धारणा को और स्पष्ट करने के लिए - आप 'जावास्क्रिप्ट से जावा को कॉल नहीं कर सकते', लेकिन आप एक यूआरएल का आह्वान कर सकते हैं जिसके परिणामस्वरुप जावा कोड निष्पादित हो रहा है। अंतर सूक्ष्म है, लेकिन समझने के लिए महत्वपूर्ण है। – belugabob

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