CodeGym /Java Blog /यादृच्छिक /भाग 5. सर्व्हलेट्स आणि Java सर्व्हलेट API. एक साधा वेब अन...
John Squirrels
पातळी 41
San Francisco

भाग 5. सर्व्हलेट्स आणि Java सर्व्हलेट API. एक साधा वेब अनुप्रयोग लिहित आहे

यादृच्छिक या ग्रुपमध्ये प्रकाशित केले
ही सामग्री "एंटरप्राइज डेव्हलपमेंटची ओळख" मालिकेचा भाग आहे. मागील लेख: भाग 5. सर्व्हलेट्स आणि Java सर्व्हलेट API.  साधे वेब ऍप्लिकेशन लिहिणे - १कन्सोलवर मजकूर प्रदर्शित करणारे Java अॅप्लिकेशन्स कसे लिहायचे हे तुम्हाला आधीच माहित आहे, परंतु तुमचा पहिला वेब अॅप्लिकेशन कसा तयार करायचा हे तुम्हाला अजूनही माहित नाही? छान, स्वतःला आरामदायक बनवा. या लेखात, आम्ही सर्व्हलेट्सशी परिचित होऊ आणि एक अनुप्रयोग लिहू ज्याबद्दल तुम्ही तुमच्या मित्रांना JAR फाइल न पाठवता आणि त्यांना Java डाउनलोड करण्यास भाग पाडल्याशिवाय फुशारकी मारू शकता. चला एक साधा वेब अनुप्रयोग लिहूया . जर तुम्हाला वेब डेव्हलपमेंटमध्ये वापरल्या जाणार्‍या पद्धतींबद्दल आधीच माहिती नसेल, तर मी शिफारस करतो की तुम्ही " एंटरप्राइज डेव्हलपमेंटचा परिचय " मालिकेतील पहिला लेख वाचून सुरुवात करा.

सर्व्हलेट म्हणजे काय?

प्रथम, सर्व्हलेट्स काय आहेत आणि आपण त्यांच्याबद्दल वारंवार का ऐकतो ते शोधूया. Java Servlet API हे एक प्रमाणित API आहे जे सर्व्हरवर कार्यान्वित करायचे आहे. विनंती-प्रतिसाद योजनेनुसार ते ग्राहकांशी संवाद साधते. सर्व्हलेट हा एक वर्ग आहे जो क्लायंटकडून विनंत्या प्राप्त करू शकतो आणि क्लायंटला प्रतिसाद देऊ शकतो . खरं तर, सर्व्हलेट्स हे अगदी बिल्डिंग ब्लॉक्स आहेत जे आम्ही Java मध्ये क्लायंट-सर्व्हर आर्किटेक्चर तयार करण्यासाठी वापरतो. तुम्हाला आठवत असेल की आम्ही त्या वास्तुकलेबद्दल या मालिकेतील आणखी एका लेखात आधीच बोललो होतो. आम्ही झुडूप भोवती मारणार नाही: चला लगेच काही कोड लिहू.

वेब ऍप्लिकेशन तयार करण्यासाठी तुम्हाला काय आवश्यक आहे

Java servlets सह काम करताना सर्वात जास्त सोयीसाठी, तुम्हाला IntelliJ IDEA अल्टिमेट एडिशन आवश्यक आहे. हे एक सशुल्क उत्पादन आहे, परंतु तुम्ही 30-दिवसांची चाचणी सक्रिय करू शकता किंवा लवकर प्रवेश आवृत्ती वापरू शकता, जी नेहमी विनामूल्य असते. तसेच, Apache Tomcat — आमच्या ऍप्लिकेशनचा सर्व्हर इंस्टॉल करा. Tomcat एक सर्व्हलेट कंटेनर आहे: ते येणार्‍या विनंत्यांवर प्रक्रिया करते आणि आमच्या अर्जाकडे पाठवते. येथे टॉमकॅट डाउनलोड करा .

चला आमचे पहिले वेब ऍप्लिकेशन तयार करू

सर्वकाही तयार असल्यास, एक Maven प्रकल्प तयार करा. तुम्ही मावेनशी परिचित नसल्यास, मागील लेख पहा . चला सुरवात करूया!
  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. सर्व्हलेट्स आणि Java सर्व्हलेट API.  एक साधा वेब अनुप्रयोग लिहिणे - 2भाग 5. सर्व्हलेट्स आणि Java सर्व्हलेट API.  एक साधा वेब अनुप्रयोग लिहिणे - 3

  3. पुढे, आम्ही टॉमकॅटची कोणती आवृत्ती वापरू आणि सर्व्हरशी संप्रेषण करण्यासाठी URL आणि पोर्ट सूचित करतो. आपल्याकडे असे काहीतरी असावे:

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

  5. ऍप्लिकेशन संदर्भासाठी डीफॉल्ट मूल्य servlets_war_exploded आहे . याचा अर्थ आम्ही येथे ऍप्लिकेशन ऍक्सेस करतो: http://localhost:8080/servlets_war_exploded .

    आम्हाला कोणताही अतिरिक्त मजकूर का हवा आहे? जे अनावश्यक आहे ते हटवू. आता आम्ही आमच्या वेब ऍप्लिकेशनचा पत्ता आहे: http://localhost:8080 .

    भाग 5. सर्व्हलेट्स आणि Java सर्व्हलेट API.  एक साधा वेब अनुप्रयोग लिहिणे - 6
  6. ओके क्लिक करा. आम्ही पाहतो की आम्ही आता अनुप्रयोग लाँच करू शकतो:

    भाग 5. सर्व्हलेट्स आणि Java सर्व्हलेट API.  एक साधा वेब अनुप्रयोग लिहिणे - 7

    आता जेव्हा तुम्ही तुमच्या ब्राउझरमध्ये अॅप्लिकेशन उघडता तेव्हा तुम्हाला 404 एरर मिळेल. हे अर्थपूर्ण आहे, कारण http://localhost:8080/ या पत्त्याला "/" वर मॅप करणार्‍या सर्व्हलेटची आवश्यकता आहे, परंतु आमचे एकमेव सर्व्हलेट नकाशे "/hello" वर आहेत .

  7. आम्ही http://localhost:8080/hello येथे प्रवेश करू शकतो . एकदा आम्ही ते केल्यावर, आम्हाला अपेक्षित उत्तर मिळेल — स्ट्रिंग "हॅलो"!

सर्वकाही कार्य करत असल्यास, चला कोडचे विश्लेषण करूया. सामान्य वर्गातून HTTP-servlet बनवण्यासाठी , त्याला HttpServlet वर्ग वारसा मिळाला पाहिजे. वर्ग घोषणेच्या वर, आम्ही @WebServlet()भाष्य सूचित करतो. येथेच आम्ही सर्व्हलेटला विशिष्ट मार्गावर ("/hello") बांधतो (किंवा नकाशा). हे भाष्य फक्त Java Servlet API 3.0 मध्ये दिसून आले, त्यामुळे इंटरनेटमध्ये बरीच उदाहरणे आहेत जिथे XML फाइलद्वारे सर्व्हलेट मॅपिंग होते. हे आता आवश्यक नाही. GET विनंत्या हाताळण्यासाठी , आम्ही 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("/"). या सर्व्हलेटचा उद्देश "/hello" मार्गावर विनंत्या पुनर्निर्देशित करणे आहे. हे करण्याचे दोन मार्ग आहेत: "फॉरवर्ड" किंवा "पुनर्निर्देशित" वापरणे. कदाचित त्यांच्यातील फरक समजून घेणे फायदेशीर आहे. सर्व्हरवरील दुसर्‍या सर्व्हलेटला विनंतीची प्रक्रिया अग्रेषित करतो . ग्राहक गुंतलेला नाही. हे करण्यासाठी, नवीन सर्व्हलेटच्या doGet() पद्धतीमध्ये खालील कोड जोडा:

getServletContext().getRequestDispatcher("/hello").forward(req, resp);
या कोडमध्ये, आम्ही सर्व्हलेट संदर्भामध्ये प्रवेश करतो, संबंधित सर्व्हलेटसाठी विनंती प्रेषक मिळवतो आणि निर्दिष्ट युक्तिवादांसह (req, resp) विशिष्ट विनंतीवर प्रक्रिया करण्यास सांगतो. रीडायरेक्ट क्लायंटला तो पत्ता देतो जो क्लायंटने त्याच्या विनंतीवर प्रक्रिया करण्यासाठी वापरला पाहिजे . बहुतेक ब्राउझर परत दिलेल्या URL वर स्वयंचलितपणे नेव्हिगेट करतात. पुनर्निर्देशन लागू करण्यासाठी, तुम्हाला हा कोड जोडण्याची आवश्यकता आहे:

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 न वापरता ते कसे उपयोजित करायचे ते शिकाल. आम्ही एक अर्ज लिहिला जो फक्त GET विनंत्यांवर प्रक्रिया करतो. उर्वरित HTTP पद्धती अशाच प्रकारे हाताळल्या जातात — पालक वर्गाच्या संबंधित पद्धती ओव्हरराइड करून. अत्याधुनिक अष्टपैलू वेब अॅप्लिकेशन्स तयार करण्यासाठी तुम्ही यासारखे साधे सर्व्हलेट्स वापरू शकता. अर्थात, स्प्रिंगसारख्या मोठ्या फ्रेमवर्कचा वापर केल्याने हे खूप सोपे होते. परंतु जर तुम्हाला सर्व्हलेटच्या सर्व क्षमतांचा सखोल अभ्यास करायचा असेल तर तुम्ही अधिकृत तपशील वाचू शकता . भाग 6. सर्वलेट कंटेनर भाग 7. MVC (मॉडेल-व्ह्यू-कंट्रोलर) नमुना सादर करत आहे
टिप्पण्या
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION