CodeGym/Java Blog/अनियमित/भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई। एक साधारण वेब एप्...
John Squirrels
स्तर 41
San Francisco

भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई। एक साधारण वेब एप्लिकेशन लिखना

अनियमित ग्रुप में प्रकाशित
सदस्य
यह सामग्री "उद्यम विकास का परिचय" श्रृंखला का हिस्सा है। पिछले लेख: भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई।  एक साधारण वेब एप्लिकेशन लिखना - 1क्या आप पहले से जानते हैं कि कंसोल पर टेक्स्ट प्रदर्शित करने वाले जावा एप्लिकेशन कैसे लिखे जाते हैं, लेकिन आप अभी भी नहीं जानते कि अपना पहला वेब एप्लिकेशन कैसे बनाएं? बढ़िया, अपने आप को सहज बनाओ। इस लेख में, हम सर्वलेट्स से परिचित होंगे और एक ऐसा एप्लिकेशन लिखेंगे, जिसके बारे में आप अपने दोस्तों को बिना JAR फाइल भेजे और उन्हें जावा डाउनलोड करने के लिए मजबूर किए बिना डींग मार सकते हैं। आइए एक साधारण वेब एप्लिकेशन लिखें । यदि आप पहले से ही वेब विकास में उपयोग किए जाने वाले दृष्टिकोणों से परिचित नहीं हैं, तो मेरा सुझाव है कि आप " उद्यम विकास का परिचय " श्रृंखला में पहला लेख पढ़कर शुरू करें।

सर्वलेट क्या है?

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

वेब एप्लिकेशन बनाने के लिए आपको क्या चाहिए

Java सर्वलेट्स के साथ काम करते समय सबसे अधिक सुविधा के लिए, आपको IntelliJ IDEA अल्टीमेट एडिशन की आवश्यकता है। यह एक सशुल्क उत्पाद है, लेकिन आप 30-दिन के परीक्षण को सक्रिय कर सकते हैं या शुरुआती एक्सेस संस्करण का उपयोग कर सकते हैं, जो हमेशा निःशुल्क होता है। साथ ही, Apache Tomcat — हमारे एप्लिकेशन का सर्वर इंस्टॉल करें। टॉमकैट एक सर्वलेट कंटेनर है: यह आने वाले अनुरोधों को संसाधित करता है और उन्हें हमारे आवेदन में भेजता है। टॉमकैट को यहां से डाउनलोड करें ।

आइए अपना पहला वेब एप्लिकेशन बनाएं

यदि सब कुछ तैयार है, तो मावेन प्रोजेक्ट बनाएं। यदि आप मावेन से परिचित नहीं हैं, तो पिछले लेख पर एक नज़र डालें । चलो शुरू करें!
  1. Pom.xml में, javax.servlet-api निर्भरता जोड़ें और WAR पैकेजिंग निर्दिष्ट करें:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
    
       <groupId>org.example</groupId>
       <artifactId>servlets</artifactId>
       <version>1.0-SNAPSHOT</version>
       <packaging>war</packaging>
    
       <dependencies>
           <dependency>
               <groupId>javax.servlet</groupId>
               <artifactId>javax.servlet-api</artifactId>
               <version>4.0.1</version>
           </dependency>
       </dependencies>
    </project>

    सरल सर्वलेट वर्ग:

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/hello")
    public class MainServlet extends HttpServlet {
    
       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           resp.setContentType("text/html");
           PrintWriter printWriter = resp.getWriter();
           printWriter.write("Hello!");
           printWriter.close();
       }
    }
  2. एप्लिकेशन चलाने के लिए, आपको टॉमकैट कॉन्फ़िगरेशन बनाने की आवश्यकता है:

    भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई।  एक साधारण वेब एप्लिकेशन लिखना - 2भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई।  एक साधारण वेब एप्लिकेशन लिखना - 3

  3. अगला, हम इंगित करते हैं कि हम टॉमकैट के किस संस्करण का उपयोग करेंगे, और सर्वर के साथ संचार करने के लिए URL और पोर्ट। आपके पास ऐसा कुछ होना चाहिए:

    भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई।  एक साधारण वेब एप्लिकेशन लिखना - 4
  4. अब हमें केवल आर्टिफैक्ट निर्दिष्ट करने की आवश्यकता है (एक जेएआर संग्रह में एकत्रित परियोजना) जिसे कंटेनर में तैनात किया जाएगा। आप फिक्स बटन पर क्लिक कर सकते हैं और युद्ध विस्फोट का चयन कर सकते हैं : इसका मतलब है कि प्रोजेक्ट के पुनर्निर्माण के बाद, आर्टिफैक्ट स्वचालित रूप से सर्वलेट कंटेनर में रखा जाएगा। भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई।  एक साधारण वेब एप्लिकेशन लिखना - 5

  5. एप्लिकेशन संदर्भ के लिए डिफ़ॉल्ट मान servlets_war_exploded है । इसका मतलब है कि हम एप्लिकेशन को यहां एक्सेस करते हैं: http://localhost:8080/servlets_war_exploded

    हमें कोई अतिरिक्त टेक्स्ट क्यों चाहिए? जो अनावश्यक है उसे हटा दें। अब हम अपने वेब एप्लिकेशन का पता है: http://localhost:8080

    भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई।  एक साधारण वेब एप्लिकेशन लिखना - 6
  6. ओके पर क्लिक करें। हम देखते हैं कि अब हम एप्लिकेशन लॉन्च कर सकते हैं:

    भाग 5. सर्वलेट्स और जावा सर्वलेट एपीआई।  एक साधारण वेब एप्लिकेशन लिखना - 7

    अब जब आप अपने ब्राउज़र में एप्लिकेशन खोलते हैं, तो आपको 404 त्रुटि मिलनी चाहिए। यह समझ में आता है, क्योंकि पते http://localhost:8080/ को एक सर्वलेट की आवश्यकता होती है जो "/" पर मैप करता है, लेकिन हमारा एकमात्र सर्वलेट "/hello" पर मैप करता है ।

  7. हम इसे http://localhost:8080/hello पर एक्सेस कर सकते हैं । एक बार जब हम ऐसा कर लेते हैं, तो हमें अपेक्षित उत्तर मिलता है - स्ट्रिंग "हैलो"!

यदि सब कुछ काम कर रहा है, तो आइए कोड का विश्लेषण करें। एक सामान्य वर्ग से HTTP-सर्वलेट बनाने के लिए , इसे HttpServlet वर्ग को इनहेरिट करना होगा। वर्ग घोषणा के ऊपर, हम @WebServlet()एनोटेशन इंगित करते हैं। यह वह जगह है जहां हम सर्वलेट को एक विशिष्ट पथ ("/ हैलो") से बांधते हैं (या मैप करते हैं)। यह एनोटेशन केवल जावा सर्वलेट एपीआई 3.0 में दिखाई दिया, इसलिए इंटरनेट में ऐसे कई उदाहरण हैं जहां एक्सएमएल फ़ाइल के माध्यम से सर्वलेट मैपिंग होती है। यह अब आवश्यक नहीं है। जीईटी अनुरोधों को संभालने के लिए , हम doGet()विधि को ओवरराइड करते हैं। विधि के मापदंडों पर ध्यान दें: HttpServletRequestऔर HttpServletResponse। वस्तु HttpServletRequestहमें अनुरोध के बारे में सभी आवश्यक जानकारी प्रदान करती है। में HttpServletResponse, हम अपनी प्रतिक्रिया लिखते हैं और आवश्यक हेडर सेट करते हैं।

मापदंडों और एक सत्र के साथ काम करना

आइए अपने सर्वलेट में सुधार करें ताकि यह अनुरोध मापदंडों को संसाधित कर सके और एक सत्र के साथ काम कर सके:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       HttpSession session = req.getSession();
       Integer visitCounter = (Integer) session.getAttribute("visitCounter");
       if (visitCounter == null) {
           visitCounter = 1;
       } else {
           visitCounter++;
       }
       session.setAttribute("visitCounter", visitCounter);
       String username = req.getParameter("username");
       resp.setContentType("text/html");
       PrintWriter printWriter = resp.getWriter();
       if (username == null) {
           printWriter.write("Hello, Anonymous" + "<br>");
       } else {
           printWriter.write("Hello, " + username + "<br>");
       }
       printWriter.write("Page was visited " + visitCounter + " times.");
       printWriter.close();
   }
}
अब सर्वलेट एक सत्र के साथ काम करता है, visitCounterहर बार पृष्ठ पर जाने के मूल्य में वृद्धि करता है। यदि visitCounterविशेषता अभी तक नहीं बनाई गई है (पृष्ठ की पहली यात्रा पर), getAttribute()विधि शून्य हो जाती है, इसलिए हमें शून्य की जांच करने की आवश्यकता है। वही अनुरोध मापदंडों के लिए जाता है। यदि उपयोगकर्ता उपयोगकर्ता नाम पैरामीटर पास नहीं करता है, तो इसका मान शून्य होगा। इस मामले में, हम एक गुमनाम आगंतुक के रूप में उपयोगकर्ता का अभिवादन करते हैं। GET अनुरोध में एक पैरामीटर पास करने के लिए, एक क्वेरी स्ट्रिंग का उपयोग किया जाता है, उदाहरण के लिए, हम निम्नलिखित URL का उपयोग कर सकते हैं: http:// localhost:8080/hello? उपयोगकर्ता नाम = पॉल। आप पिछले लेख में HTTP अनुरोधों के बारे में अधिक पढ़ सकते हैंश्रंखला में। हमारे आवेदन में वर्तमान में अधिक तर्क नहीं है, लेकिन यह थोड़ा कष्टप्रद है कि हमें रूट पथ पर 404 त्रुटि मिलती है। इसे ठीक करने के लिए, हम एक और सर्वलेट बनाएंगे और इसे स्टार्ट पेज पर मैप करेंगे: @WebServlet("/"). इस सर्वलेट का उद्देश्य अनुरोधों को "/ हैलो" पथ पर पुनर्निर्देशित करना है। ऐसा करने के दो तरीके हैं: "आगे" या "रीडायरेक्ट" का उपयोग करना। शायद उनके बीच के अंतर को समझना सार्थक है। एक अग्रेषित प्रतिनिधि सर्वर पर किसी अन्य सर्वलेट के अनुरोध को संसाधित करता है। ग्राहक शामिल नहीं है। ऐसा करने के लिए, निम्नलिखित कोड को नए सर्वलेट के doGet () विधि में जोड़ें:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
इस कोड में, हम सर्वलेट संदर्भ का उपयोग करते हैं, प्रासंगिक सर्वलेट के लिए अनुरोध डिस्पैचर प्राप्त करते हैं, और निर्दिष्ट तर्कों (req, resp) के साथ एक विशिष्ट अनुरोध को संसाधित करने के लिए कहते हैं। रीडायरेक्ट क्लाइंट को उस पते पर लौटाता है जिसका उपयोग क्लाइंट को उसके अनुरोध को संसाधित करने के लिए करना चाहिए अधिकांश ब्राउज़र स्वचालित रूप से लौटाए गए यूआरएल पर नेविगेट करते हैं। रीडायरेक्ट लागू करने के लिए, आपको यह कोड जोड़ना होगा:
resp.sendRedirect(req.getContextPath() + "/hello");
हम पैरामीटर redirect()पर विधि को कॉल करते हैं HttpServletResponseऔर उस पते को पास करते हैं जिसे क्लाइंट को उपयोग करने की आवश्यकता होती है। यहाँ एक महत्वपूर्ण विवरण दिया गया है: पूर्ण रीडायरेक्ट पथ के अंत में HTTP पैरामीटर भी जोड़े जाने चाहिए, जो बहुत सुविधाजनक नहीं है। हमारी स्थिति में, इसका उपयोग करना बेहतर होता है forward, लेकिन कभी-कभी उपयोग करना redirectबेहतर होता है। यदि आप उनके काम करने के तरीके में अंतर को समझते हैं, तो आप गलत चुनाव नहीं करेंगे। नए सर्वलेट का कोड इस तरह दिखता है:
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/")
public class IndexServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        getServletContext().getRequestDispatcher("/hello").forward(req, resp);
       resp.sendRedirect(req.getContextPath() + "/hello");
   }
}

सारांश

आपका पहला वेब एप्लिकेशन हो गया है। अगले लेख में, आप जानेंगे कि IntelliJ IDEA का उपयोग किए बिना इसे कैसे परिनियोजित किया जाए। हमने एक ऐसा एप्लिकेशन लिखा है जो केवल अनुरोधों को प्राप्त करता है। शेष HTTP विधियों को समान तरीके से नियंत्रित किया जाता है - मूल वर्ग के संबंधित तरीकों को ओवरराइड करके। परिष्कृत बहुमुखी वेब एप्लिकेशन बनाने के लिए आप इस तरह के सरल सर्वलेट का उपयोग कर सकते हैं। बेशक, स्प्रिंग जैसे बड़े ढांचे का उपयोग करना इसे बहुत आसान बनाता है। लेकिन अगर आप वास्तव में सर्वलेट्स की सभी क्षमताओं में गहराई से उतरना चाहते हैं, तो आप आधिकारिक विनिर्देश पढ़ सकते हैं । भाग 6. सर्वलेट कंटेनर भाग 7. एमवीसी (मॉडल-व्यू-कंट्रोलर) पैटर्न का परिचय
टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं