2010-11-06 17 views
17

के साथ सरल कैलक्यूलेटर यह मेरे previous question की निरंतरता की तरह है, लेकिन मुझे लगता है कि यह अपने आप पर होने के लायक है, खासकर मुझे बहुत विस्तृत उत्तर के कारण।जेएसपी/सर्वलेट और अजाक्स

मैं jsp में एक साधारण कैलकुलेटर बनाना चाहता हूं। संख्याओं और एक बटन के लिए दो टेक्स्टबॉक्स होंगे। आदर्श रूप में, मैं पृष्ठ को पुनः लोड किए बिना पृष्ठ में दिखाना चाहता हूं, लेकिन मुझे जो जवाब मिला, वह मेरे पैमाने के लिए बहुत बड़ा लगता है। मैं या तो सोच सकता हूं: 1) किसी तीसरे टेक्स्टबॉक्स के उत्तर को मुद्रित करें (क्या यह संभव है?) या किसी भी तरह से उसी पृष्ठ को लोड करना (जोड़ बटन और सभी के साथ) जवाब के साथ लोड करना (और विभिन्न संख्याएं दर्ज करने में सक्षम होना) ।

क्या आप ऐसा करने का एक अच्छा तरीका सुझा सकते हैं?

+0

है आप किसी भी सर्वलेट्स के बिना इसे बना सकते हैं। केवल एचटीएमएल + जावास्क्रिप्ट के साथ। एक और तरीका - सर्वर पर गणना करें। पृष्ठ रीलोडिंग से बचने के लिए यहां आपको अजाक्स की आवश्यकता है। जिस तरह से आप पसंद करते हैं और आपको समस्याएं कहां मिलती हैं? –

उत्तर

23

यह मेरे पैमाने

यह वास्तव में संदर्भ और कार्यात्मक जरूरतों पर निर्भर करता है के लिए बहुत बड़ा लगता है। हालांकि यह बहुत सरल और मामूली है। यह और अधिक लगता है कि यह आपके लिए "बहुत अधिक जानकारी" है और आपको वास्तव में अलग-अलग अवधारणाओं (HTTP, HTML, CSS, JS, JS, Java, JSP, Servlet, Ajax, JSON, आदि) व्यक्तिगत रूप से सीखने की आवश्यकता है ताकि आप बड़ी तस्वीर (उन सभी भाषाओं/तकनीकों का योग) अधिक स्पष्ट हो जाता है। आपको this answer उपयोगी हो सकता है।

वैसे भी, इस तरीके से अजाक्स के बिना सिर्फ JSP/Servlet के साथ यह कर सकता है:

calculator.jsp:

<form id="calculator" action="calculator" method="post"> 
    <p> 
     <input name="left"> 
     <input name="right"> 
     <input type="submit" value="add"> 
    </p> 
    <p>Result: <span id="result">${sum}</span></p> 
</form> 

CalculatorServlet साथ जो /calculator के url-pattern पर मैप किया गया है:

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    Integer left = Integer.valueOf(request.getParameter("left")); 
    Integer right = Integer.valueOf(request.getParameter("right")); 
    Integer sum = left + right; 

    request.setAttribute("sum", sum); // It'll be available as ${sum}. 
    request.getRequestDispatcher("calculator.jsp").forward(request, response); // Redisplay JSP. 
} 

अजाक्सिका बनाना काम करने के लिए सामान भी मुश्किल नहीं है। यह JSP के एचटीएमएल <head> अंदर निम्नलिखित जे एस सहित की बात है (सही करने के लिए स्क्रॉल करें कोड टिप्पणियों को देखने के लिए जो बताता है कि हर एक लाइन करता है):

<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script> 
    $(document).ready(function() {             // When the HTML DOM is ready loading, then execute the following function... 
     $('#calculator').submit(function() {           // Locate HTML element with ID "calculator" and execute the following function on its "submit" event... 
      $form = $(this);               // Wrap the form in a jQuery object first (so that special functions are available). 
      $.post($form.attr('action'), $form.serialize(), function(responseText) { // Execute Ajax POST request on URL as set in <form action> with all input values of the form as parameters and execute the following function with Ajax response text... 
       $('#result').text(responseText);          // Locate HTML element with ID "result" and set its text content with responseText. 
      }); 
      return false;               // Prevent execution of the synchronous (default) submit action of the form. 
     }); 
    }); 
</script> 

और doPost के अंतिम दो पंक्तियों को बदलने इस प्रकार है:

response.setContentType("text/plain"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(String.valueOf(sum)); 

तुम भी यह एक सशर्त जांच कर सकते हैं ताकि आपके प्रपत्र अभी भी मामला है कि उपयोगकर्ता जे एस अक्षम है के लिए काम करता है:

if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) { 
     // Ajax request. 
     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(String.valueOf(sum)); 
    } else { 
     // Normal request. 
     request.setAttribute("sum", sum); 
     request.getRequestDispatcher("calculator.jsp").forward(request, response); 
    } 
+0

पहले स्निपेट के लिए एक फॉलो अप: यदि मैं एक और बटन जोड़ता हूं जो घटाव करता है, तो मैं उस सर्वलेट को कैसे बता सकता हूं जिसे किसी को धक्का दिया गया था? –

+1

बटन का नाम और मान अनुरोध पैरामीटर के रूप में भी भेजा जाता है। बस इसकी उपस्थिति और/या इसके मूल्य की जांच करें। यह भी देखें [यह उत्तर] (http://stackoverflow.com/questions/954327/hidden-features-of-html/1978039#1978039)। – BalusC

+0

@ बालससी: जेएस उदाहरण के साथ बटन के मूल्य को कैसे पास करें (JQuery यह "इनपुट" इनपुट तत्वों के लिए नहीं करता है)? – AndrewBourgeois

2

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

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 
    int a = Integer.valueOf(request.getParameter("a")); 
    int b = Integer.valueOf(request.getParameter("b")); 
    int res = a + b; 
    response.getWriter().println(res); 
} 
1

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

मेरी राय में, हमें सर्वर पर कम से कम लोड बनाए रखने की कोशिश करनी चाहिए। सर्वर को लोड क्यों करें जब यह क्लाइंट साइड पर किया जा सकता है?

अतिरिक्त गणना जैसे घटाव, घटाव, गुणा और विभाजन जावास्क्रिप्ट कार्यों जैसे ए (ए, बी), उप (ए, बी), मुल (ए, बी), div (ए, बी) लिखकर प्राप्त किया जा सकता है। और इन कार्यों को अलग-अलग बटन क्लिक घटनाओं पर बुलाया जा सकता है।

+0

जैसा कि आप कल्पना कर सकते हैं, मैंने इस सवाल से पूछा (बहुत समय पहले) क्योंकि मैं ऑनलाइन कैलकुलेटर के आधार पर स्टार्टअप बनाना चाहता था, लेकिन क्योंकि मैं चाहता था जेएसपी सीखें। –

+0

ठीक है। इसे मिला। :)। बस मदद करने की कोशिश की। मेरी रक्षा में मैंने अभी जवाब लिखने के लिए स्टैक ओवरफ्लो का उपयोग करना शुरू कर दिया। पहले मेरे लिए यह केवल पढ़ने के लिए था। :)। इसलिए ध्यान नहीं दिया कि इस सवाल को बहुत समय पहले पूछा गया था। –

+0

यह ठीक है। समुदाय में आपका स्वागत है :) –

3

मुझे यकीन है कि अगर यह मदद कर सकते हैं नहीं कर रहा हूँ, लेकिन यह कम से कम एक सरल कैलकुलेटर कार्यक्रम

 protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    /*READ THE FIRST NUMBER FROM TEXTBOX NAMED num1*/ 
    Integer num1= Integer.parseInt(request.getParameter("num1")); 

    /*READ THE SECOND NUMBER FROM TEXTBOX NAMED num2*/ 
    Integer num2=Integer.parseInt(request.getParameter("num2")); 

    /*READ THE OPERATOR VALUE FROM SELECT TAG NAMED operator*/ 
    String operator=request.getParameter("operator"); 

    /*THE FINAL RESULT*/ 
    Integer result=0; 

    /*THE RESPONSE TO THE CLIENT WILL BE IN HTML FORMAT*/ 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    try { 
     /*ALTERNATIVELY IF STATEMENT CAN ALSO BE USED 
        if("+".equals(operator)) 
     { 
      result = num1 + num2; 
     } 
     else if("-".equals(operator)) 
     { 
      result = num1 - num2; 
     } 
     else if("*".equals(operator)) 
     { 
      result = num1 * num2; 
     } 
     else if ("/".equals(operator)) 
     { 
      result = num1/num2; 
     } 

     */ 
     switch(operator) 
     { 
      case("+"): /*IF PLUS*/ 
       result=num1+num2; 
       break; 
      case("-"): /*IF MINUS*/ 
       result=num1-num2; 
       break; 
      case("*"): /*IF MULTIPLICATION*/ 
       result=num1*num2; 
       break; 
      case("/"): /*IF DIVISION*/ 
       result=num1/num2; 
       break; 
     } 

     /* TODO output your page here. You may use following sample code. */ 
     out.println("<!DOCTYPE html>"); 
     out.println("<html>"); 
     out.println("<head>"); 
     out.println("<title>Servlet ServletCalculator</title>");    
     out.println("</head>"); 
     out.println("<body>"); 
     /*THE PART OF OUTPUT TO THE CLIENT*/ 
     out.println("<h1>" + num1 +" "+operator+" "+num2+" = " + result+"</h1>"); 
     out.println("</body>"); 
     out.println("</html>"); 
    } finally {    
     out.close(); 
    } 
} 

है और html

<!DOCTYPE html> 
    <html> 
     <body> 
      <form action="ServletCalculator"> 
       enter first number <input name="num1" type="text"/> 
     <select name="operator"> 
      <option value="+"> + </option> 
      <option value="-"> - </option> 
      <option value="*"> * </option> 
      <option value="/">/</option> 
     </select> 
     enter second number <input name="num2" type="text"/> 
     <button type="submit"> Calculate </button> 
      </form> 
     </body> 
    </html> 
संबंधित मुद्दे