CodeGym /جاوا بلاگ /Random-SD /حصو 5. سروليٽس ۽ جاوا سروليٽ API. هڪ سادي ويب ايپليڪيشن ل...
John Squirrels
سطح
San Francisco

حصو 5. سروليٽس ۽ جاوا سروليٽ API. هڪ سادي ويب ايپليڪيشن لکڻ

گروپ ۾ شايع ٿيل
هي مواد "انٽرپرائز ڊولپمينٽ جو تعارف" سيريز جو حصو آهي. اڳيون مضمون: حصو 5. سروليٽس ۽ جاوا سروليٽ API.  هڪ سادي ويب ايپليڪيشن لکڻ - 1ڇا توهان اڳ ۾ ئي ڄاڻو ٿا ته جاوا ايپليڪيشنون ڪيئن لکجي جيڪي ڪنسول تي ٽيڪسٽ ڊسپلي ڪن ٿيون، پر توهان اڃا تائين نه ٿا ڄاڻو ته توهان جي پهرين ويب ايپليڪيشن ڪيئن ٺاهي؟ عظيم، پنهنجو پاڻ کي آرام سان ٺاهيو. هن آرٽيڪل ۾، اسان servlets سان واقف ٿينداسين ۽ هڪ ايپليڪيشن لکنداسين جنهن جي باري ۾ توهان پنهنجي دوستن کي JAR فائل موڪلڻ کان سواء ۽ انهن کي جاوا ڊائون لوڊ ڪرڻ تي مجبور ڪرڻ کان سواء فخر ڪري سگهو ٿا. اچو ته هڪ سادي ويب ايپليڪيشن لکون . جيڪڏهن توهان ويب ڊولپمينٽ ۾ استعمال ٿيندڙ طريقن سان اڳ ۾ ئي واقف نه آهيو، مان صلاح ڏيان ٿو ته توهان " انٽرپرائز ڊولپمينٽ جو تعارف " سيريز ۾ پهريون مضمون پڙهڻ سان شروع ڪريو.

هڪ servlet ڇا آهي؟

پهرين، اچو ته اهو معلوم ڪريون ته سروليٽس ڇا آهن ۽ توهان انهن جي باري ۾ اڪثر ٻڌو ٿا. Java Servlet API هڪ معياري API آهي جيڪو سرور تي لاڳو ٿيڻ جو ارادو رکي ٿو. اهو هڪ درخواست-جواب اسڪيم جي مطابق گراهڪن سان رابطو ڪري ٿو. هڪ servlet هڪ ڪلاس آهي جيڪو ڪلائنٽ کان درخواستون وصول ڪري سگهي ٿو ۽ ڪلائنٽ ڏانهن جواب واپس ڪري سگهي ٿو. حقيقت ۾، servlets بلڪل بلڊنگ بلاڪ آھن جيڪي اسان جاوا ۾ ڪلائنٽ-سرور آرڪيٽيڪچر ٺاھڻ لاءِ استعمال ڪندا آھيون. توهان کي ياد هوندو ته اسان اڳ ۾ ئي هن فن تعمير بابت سيريز جي هڪ ٻئي مضمون ۾ ڳالهايو آهي. اسان بش جي چوڌاري مارڻ وارا نه آهيون: اچو ته فوري طور تي ڪجهه ڪوڊ لکون.

توهان کي ويب ايپليڪيشن ٺاهڻ جي ڪهڙي ضرورت آهي

سڀ کان وڏي سهولت لاءِ جڏهن جاوا سروليٽس سان ڪم ڪري رهيا آهيو، توهان کي ضرورت آهي IntelliJ IDEA الٽيميٽ ايڊيشن. اهو هڪ ادا ڪيل پراڊڪٽ آهي، پر توهان 30 ڏينهن جي آزمائش کي چالو ڪري سگهو ٿا يا ابتدائي رسائي وارو نسخو استعمال ڪري سگهو ٿا، جيڪو هميشه مفت آهي. پڻ، انسٽال ڪريو Apache Tomcat - اسان جي ايپليڪيشن جو سرور. Tomcat هڪ سروليٽ ڪنٽينر آهي: اهو ايندڙ درخواستن تي عمل ڪري ٿو ۽ انهن کي اسان جي ايپليڪيشن ڏانهن منتقل ڪري ٿو. ڊائون لوڊ ڪريو Tomcat هتي .

اچو ته اسان جي پهرين ويب ايپليڪيشن ٺاهي

جيڪڏهن سڀ ڪجهه تيار آهي، هڪ Maven منصوبو ٺاهيو. جيڪڏهن توهان 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>

    سادي servlet ڪلاس:

    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. ايپليڪيشن کي هلائڻ لاء، توهان کي Tomcat ترتيب ڏيڻ جي ضرورت آهي:

    حصو 5. سروليٽس ۽ جاوا سروليٽ API.  هڪ سادي ويب ايپليڪيشن لکڻ - 2حصو 5. سروليٽس ۽ جاوا سروليٽ API.  هڪ سادي ويب ايپليڪيشن لکڻ - 3

  3. اڳيون، اسان ظاهر ڪريون ٿا ته Tomcat جو ڪهڙو نسخو استعمال ڪنداسين، ۽ سرور سان رابطي لاء URL ۽ بندرگاهه. توھان کي ڪجھھ ھجڻ گھرجي:

    حصو 5. سروليٽس ۽ جاوا سروليٽ API.  هڪ سادي ويب ايپليڪيشن لکڻ - 4
  4. ھاڻي اسان کي صرف ھڪڙي نموني بيان ڪرڻ جي ضرورت آھي (جماعت واري منصوبي کي JAR آرڪائيو ۾) جيڪو ڪنٽينر ۾ لڳايو ويندو. توھان ڪلڪ ڪري سگھو ٿا درست ڪريو بٽڻ ۽ چونڊيو جنگ ڌماڪو : ان جو مطلب آھي ته منصوبي جي تعمير ٿيڻ کان پوء، آرٽيڪل خودڪار طريقي سان سرورٽ ڪنٽينر ۾ رکيل آھي. حصو 5. سروليٽس ۽ جاوا سروليٽ API.  هڪ سادي ويب ايپليڪيشن لکڻ - 5

  5. ايپليڪيشن جي حوالي سان ڊفالٽ قيمت آهي servlets_war_exploded . ان جو مطلب اهو آهي ته اسان اپليڪيشن تائين رسائي حاصل ڪندا آهيون: http://localhost:8080/servlets_war_exploded .

    اسان ڪنهن به اضافي ٽيڪسٽ ڇو چاهيون ٿا؟ اچو ته خارج ڪريون جيڪو غير ضروري آهي. ھاڻي اسان جي ويب ايپليڪيشن جو پتو آھي: http://localhost:8080 .

    حصو 5. سروليٽس ۽ جاوا سروليٽ API.  هڪ سادي ويب ايپليڪيشن لکڻ - 6
  6. OK تي ڪلڪ ڪريو. اسان ڏسون ٿا ته اسان هاڻي ايپليڪيشن لانچ ڪري سگهون ٿا:

    حصو 5. سروليٽس ۽ جاوا سروليٽ API.  هڪ سادي ويب ايپليڪيشن لکڻ - 7

    هاڻي جڏهن توهان پنهنجي برائوزر ۾ ايپليڪيشن کوليو ٿا، توهان کي 404 غلطي حاصل ڪرڻ گهرجي. اهو سمجھ ۾ اچي ٿو، ڇاڪاڻ ته ايڊريس http://localhost:8080/ کي هڪ سرورٽ جي ضرورت آهي جيڪا "/" ڏانهن نقشي ٺاهي ٿي، پر اسان جو واحد سرورٽ نقشا "/hello" ڏانهن .

  7. اسان ان تي رسائي ڪري سگھون ٿا http://localhost:8080/hello . هڪ دفعو اسان اهو ڪريون ٿا، اسان کي متوقع جواب ملي ٿو - تار ”هيلو“!

جيڪڏهن سڀ ڪجهه ڪم ڪري رهيو آهي، اچو ته ڪوڊ جو تجزيو ڪريو. هڪ عام طبقي مان HTTP-servlet ٺاهڻ لاءِ ، ان کي HttpServlet ڪلاس جو وارث ٿيڻو پوندو. ڪلاس جي اعلان جي مٿان، اسان @WebServlet()تشريح کي ظاهر ڪندا آهيون. هي اهو آهي جتي اسان پابند (يا نقشو) سروليٽ کي مخصوص رستي ڏانهن ("/ هيلو"). هي تشريح صرف 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هاڻي servlet هڪ سيشن سان ڪم ڪري ٿو، هر دفعي صفحي جو دورو ڪرڻ جي قيمت وڌائي ٿو . جيڪڏهن visitCounterوصف اڃا تائين پيدا نه ڪيو ويو آهي (صفحي جي پهرين دوري تي)، طريقو getAttribute()واپس اچي ٿو null، تنهنڪري اسان کي null جي جانچ ڪرڻ جي ضرورت آهي. ساڳيو ئي درخواست جي پيٽرولن لاءِ وڃي ٿو. جيڪڏهن صارف صارف نام جي پيٽرولر کي پاس نٿو ڪري، ته پوء ان جو قدر null ٿيندو. انهي حالت ۾، اسان صارف کي هڪ گمنام دورو ڪندڙ طور سلام ڪريون ٿا. هڪ GET درخواست ۾ هڪ پيٽرولر کي پاس ڪرڻ لاء، هڪ سوال اسٽرنگ استعمال ڪيو ويندو آهي، مثال طور، اسان هيٺ ڏنل URL استعمال ڪري سگهون ٿا: http:// localhost:8080/hello؟ استعمال ڪندڙ جو نالو = پال. توھان وڌيڪ پڙھي سگھوٿا HTTP درخواستن بابت سيريز جي پوئين مضمون ۾. اسان جي ايپليڪيشن ۾ في الحال گهڻو منطق نه آهي، پر اهو ٿورڙو ناراض آهي ته اسان کي روٽ رستي ۾ 404 غلطي ملي ٿي. هن کي درست ڪرڻ لاءِ، اسان هڪ ٻيو سروليٽ ٺاهينداسين ۽ ان کي شروعاتي صفحي تي نقشي ۾ آڻينداسين: @WebServlet("/"). هن سرورٽ جو مقصد درخواستن کي "/ هيلو" رستي ڏانهن منتقل ڪرڻ آهي. هن کي ڪرڻ جا ٻه طريقا آهن: استعمال ڪندي "اڳتي" يا "ريڊائريڪٽ". شايد اھو انھن جي وچ ۾ فرق کي سمجھڻ جي قابل آھي. ھڪڙو پيش ڪندڙ نمائندو درخواست جي پروسيسنگ کي سرور تي ٻي خدمت ڏانھن موڪلي ٿو. ڪسٽمر ملوث نه آهي. ھن کي ڪرڻ لاء، ھيٺ ڏنل ڪوڊ شامل ڪريو نئين servlet جي doGet() طريقي ۾:
getServletContext().getRequestDispatcher("/hello").forward(req, resp);
هن ڪوڊ ۾، اسان servlet جي حوالي سان رسائي حاصل ڪندا آهيون، لاڳاپيل servlet لاء درخواست موڪليندڙ حاصل ڪريو، ۽ ان کي مخصوص دليلن (req، resp) سان مخصوص درخواست تي عمل ڪرڻ لاء پڇو. هڪ ريڊائريڪٽ ڪلائنٽ ڏانهن واپسي اهو پتو جيڪو ڪلائنٽ کي استعمال ڪرڻ گهرجي ان جي درخواست تي عمل ڪرڻ لاءِ. گھڻا برائوزر پاڻمرادو نيويگيٽ ڪندا آھن واپسي URL ڏانھن. ريٽائرمينٽ تي عمل ڪرڻ لاءِ، توھان کي ھي ڪوڊ شامل ڪرڻو پوندو:
resp.sendRedirect(req.getContextPath() + "/hello");
اسان پيراميٽر redirect()تي طريقو سڏين ٿا HttpServletResponse۽ ان کي پتو ڏيو جيڪو ڪلائنٽ استعمال ڪرڻ جي ضرورت آهي. هتي هڪ اهم تفصيل آهي: مڪمل ريڊائريڪٽ رستي جي آخر ۾ HTTP پيٽرولر پڻ شامل ڪيو وڃي، جيڪو تمام آسان ناهي. اسان جي صورتحال ۾، اهو استعمال ڪرڻ بهتر آهي forward، پر ڪڏهن ڪڏهن استعمال ڪرڻ redirectبهتر آهي. جيڪڏهن توهان فرق سمجھو ٿا ته اهي ڪيئن ڪم ڪن ٿا، توهان غلط چونڊ نه ڪندا. نئين servlet لاء ڪوڊ هن طرح ڏسجي ٿو:
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");
   }
}

خلاصو

توهان جي پهرين ويب ايپليڪيشن ٿي چڪي آهي. ايندڙ آرٽيڪل ۾، توهان سکو ته ڪيئن ان کي استعمال ڪرڻ کان سواء انٽيليج IDEA استعمال ڪرڻ. اسان هڪ درخواست لکي آهي جيڪا صرف GET درخواستن تي عمل ڪري ٿي. باقي HTTP طريقا ساڳي طريقي سان سنڀاليا ويا آهن - والدين طبقي جي لاڳاپيل طريقن کي ختم ڪندي. توهان نفيس ورسٽائل ويب ايپليڪيشنون ٺاهڻ لاءِ هن جهڙا سادو سرور استعمال ڪري سگهو ٿا. يقينا، وڏي فريم ورڪ استعمال ڪندي جيئن ته بهار اهو تمام آسان بڻائي ٿو. پر جيڪڏهن توهان واقعي چاهيو ٿا ته servlets جي سڀني صلاحيتن ۾ وڌيڪ گہرے، توهان پڙهي سگهو ٿا سرڪاري تفصيل . حصو 6. سروليٽ ڪنٽينرز حصو 7. متعارف ڪرائڻ MVC (ماڊل-ڏسو-ڪنٽرولر) نموني
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION