السبت، 11 أبريل 2009

الدرس الثاني, servlet



السلام عليكــم ورحمـة الله وبركاته ،،


شفنا في الدرس الاول مثال على ال servlet بيطبع جملة Hello World!

حكينا انه ال servlet عبارة عن كلاس جافا عاملة extends للكلاس HttpServlet

وبتورث منها الميثودس اللي فيها 



من اهم الميثودز اللي عنا حاليا

init()

service()

destroy()

الميثود init() هيا الميثود الرئيسية في servlet وبتشبه الميثود init() اللي موجودة في الـ applet 

بيتم استدعائها مرة وحدة فقط عند استدعاء الـ servlet اول مرة , طبعا مش حتلزمنا في الشغل حاليا.



الميثود service() هيا الميثود اللي بتكون شغالة بعد ما تشتغل الـservlet



يعني الـ Servlet life cycle بتبدأ من استدعاء السيرفر للميثود init حيث يتم انشاء الـ servlet

بعد عملة انشاء الـ servlet تدخل الـ servlet في servicing stat وذلك بعد استدعاء السيرفر للميثود service() وتبقة ال servlet في servicing stat الي ان يستدعي السيرفر الميثود destroy. 


طبعا في مثودز كثر غير الثلاثة اللي ذكرتهم فوق بس خلينا نمشي وحدة وحدة 



اكثر ميثودز حنستخدمهم هما

doGet()

doPost()

خلينا نشوف مثال على الميثود doGet



كود
  import java.io.*;

  import java.net.*;

  import java.util.*;

  import javax.servlet.*;

  import javax.servlet.http.*;

   

  public class DoGetExample extends HttpServlet{

   

  public void doGet(HttpServletRequest req, HttpServletResponse res) throws javax.servlet.ServletException, java.io.IOException 

              {

                          String username = req.getParameter("username");




                                      PrintWriter pw = res.getWriter();

                                      pw.println("");

                                      pw.println("");

                                      pw.println("");

                                      pw.println("");

                                      pw.println("

Thank you "+username+" for join our JSP course

");

                                      pw.println("");

                                      pw.println("");

           }  }



نكمل شرح الدرس الثاني

حنروح على المجلد webapps

C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps

وحنعمل فيه مجلد جديد ونسميه مثلا hanytest

حنعمل في داخله مجلد جديد ونسميه WEB-INF

حنعمل مجلد جديد داخل مجلد WEB-INF ونسميه classes

في داخل مجلد classes حنعمل ملف جافا ونسميه DoGetExample.java

ونكتب فيه الكود اللي موجود فوق ونعمل كمبايل اله

في داخل مجلد WEB-INF حنعمل ملف ونسميه web.xml

وحنكتب فيه الكود التالي وبنعمل save

كود
  
  

    

      
DoGetExample
      
DoGetExample
    

    

        
DoGetExample
        
/DoGetExample
    

  


في داخل المجلد hanytest حنعمل ملف ونسميه index.html

وحنكتب فيه الكود التالي وبنعمل save

كود
  
  
        
  
  
  

Please enter your name


  

 
   Name  

  

  

  
  


هيك الملفات جاهزة

طبعا حشرح كل اشي بالتفصيل بعد ما تعملوا الملفات هاي عندكم 

حتى اعطي فرصة للي مش نازل عنده السيرفر انه يجهز حاله 

اذا في اي استفسار تفضلوا اسألوا 
هلاء بدي اشرح الاكواد اللي كتبتهم فوق 

ونفهم حبة حبة 


نمسك كود السيرفلت اللي عنا 

طبعا اول جزئية في كلاس السيرفلت عنا الـ imports وهاي دايما لازم تكون موجودة 

كود
import java.io.*;
import java.net.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;


بعد هيك عرفنا الكلاس سميناها DoGetExample وعملنا extends للكلاس HttpServlet

حنلاقي بعد هيك ميثود اسمها doGet 

طيب الميثود اللي اسمها service اللي شفناها في الدرس الاول وين راحت ؟ شو بتفرق عن doGet

حكينا اول ما بتم استدعاء السيرفلت بتشتغل الميثود init() حتى يتم تكوين الـ servlet

بعد ما يتم انشائها بتدخل الـ servlet تعتنا في مرحلة service وبتكون جاهزة للشغل 

طيب متى انا حستخدم الميثود service ?

الميثود service بستخدمها لما بدي اكون اعمل شغل داخلي مثلا يعني اليوزر ملوش دخل فيه 

او بدي اطبع صفحة html ممكن استخدمها 

طيب شو حكاية goGet و ال doPost ؟

ال doGet و ال doPost بستخدمهم لما بدي اخد قيم من اليوزر واعمل علهم شغل وبعد هيك اطلع الناتج لليوزر

طيب شو الفرق بينهم ؟

doGet بتم ارسال القيم مع ال url اما ال doPost بيتم ارسالها مباشرة للكلاس تعتنا يعني مش حتظهر البيانات تعتي في url

انا هون بدي اشوف كيف الفرق بينهم عشان هيك استخدمت doGet وفي مثال تاني حنستخدم doPost

نرجع للكود تبعنا عند الميثود doGet 

الميثود doGet بتاخد قيمتين الاولى HttpServletRequest والتانية HttpServletResponse

وبتعمل throws للاكسبشن من نوع ServletException والاكسبشن من نوع IOException

كود
String username = req.getParameter("username");


هون عرفنا سترينج بدنا نحط فيها القيمة اللي بناخدها من اليوزر 

عنا req اللي هيا من نوع HttpServletRequest واللي بتتضمن كل القيم اللي اخدناها لليوزر وبتم تحديد القيمة عن طريق اسمها 

يعني في html لما اعرف متغير اسمه لازم ما يتكرر عشان اقدر اجيب منه البيانات اللي عايز اشتغل عليها واللي هون معرفينه username

بعد هيك عنا الكود هذا شفناه في الدرس الاول وعرفنا شو هو 

كود
PrintWriter pw = res.getWriter();

pw.println("");

pw.println("");

pw.println("");

pw.println("");

pw.println("

Thank you "+username+" for join our JSP course

");

pw.println("");

pw.println("");




الجديد علينا هون 

Thank you "+username+" for join our JSP course

اللي هو username طبعا هاي حترجعلنا سترينج 

طبعا هون ما ننسى انه احنا بنبرمج جافا يعني هاي الجملة مرة علينا زيها كثير 

بدي اطبع قيمة متغير وسط جملة بنعمل زي ما احنا عاملين فوق 


نروح هلا على ملف web.xml نشوف شو فيه

كود

  


قلنا نعتبر الجزئية هاي في الوقت الحالي نسخ لصق لما يجي وقتها حنفهمها

ننتقل للي بعدها 

كود

      
DoGetExample
      
DoGetExample
    


هون عرفنا السيرفلت تعتنا حطيت servlet-name نفس اسم ال servlet-class اللي بده يغيره يغيره بكيفه 

كود

        
DoGetExample
        
/DoGetExample
    


هون عرفنا كيف حنستدعي السيرفلت تعتنا وحطيتها /DoGetExample

اللي بده يغيرها هو حر 

هلا نروح لملف index.html

كود

  
        
  
  
  

Please enter your name


  


   Name  

  

  

  
  



طبعها اغلب التاجز اللي عنا معروفة الجزئية اللي بتهمنا هية جزئية body

كود
  

Please enter your name



هون حطبع لليوزر جملة Please enter your name بالخط العريض 

كود


هون عملت form وحددت الاكشين تبعه على السيرفلت تعتنا فاعطيته اسم الملجد hanytest مسبوق ب /
بعدين اعطيته السيرفلت تعتنا زي ما عرفتها في
/DoGetExample تماما 

بعد هيك حددت الميثود اللي يبعت من خلالها البيانات للسيرفلت تعتنا method="GET"

كود
Name  


هون عملت textfeald عشان اليوزر يدخل فيه اسمه والليبل هو Name واعطيته اسم عشان اتعامل معه فيه username

كود


هون عملت زر لل submit عشان بعد ما يدخل اليوزر اسمه يضغط عليه و يتم ارساله للسيرفلت تعتنا 

بعد هيك بنغلق التاجز اللي فتحناها 

لو شغلنا السيرفر 

وفتحنا المتصفح اللي عنا وكتبنا الرابط

http://localhost:8080/hanytest/

طبعا لازم نتأكد انه كتبنا رقم البورت صح زي ما حطيناه في الاعدادات 8080

اذا حد مغيره يكتبه زي ما هو كتبه عنده

حتفتح عنا صفحة index.html 

وحتظهر زي ما مهو مبين بالصورة 



حكتب اسمي hany srour

وحضغط على submit

حيتم ارسال اسمي للسيرفلت عن طريق الميثود get 

وحيطلعلنا في الصفحة مكتوب 

Thank you hany srour for join our JSP course

لو طلعنا على الرابط فوق حنشوف التالي

http://localhost:8080/hanytest/DoGetExampl...name=hany+srour

يعني تم ارسال الاسم من خلال الرابط 

وهذا الفرق بين الميثود get والميثود post

الميثود get زي ما شفنا بتظهر البيانات اللي برسلها في الرابط تبع الصفحة يعني الكل بقدر يشوفها 

الميثود post مش حيبين اشي في الرابط من البيانات 

لو رحنا عدلنا على الكود فوق وحطينا في السيرفلت بدال كلمة doGet حطينا doPost وعملنا كمبايل

ورحنا على الملف index.html وحطينا بدال GET كتبنا POST وعملنا حفظ

وعملنا اعادة تشغيل للسيرفر

وطلبنا الصفحة index.html مرة تانية وكتبنا الاسم hany srour

وضغطنا على submit

حيكتبلنا في الصفحة Thank you hany srour for join our JSP course

لو اطلعنا على الرابط فوق حنلاقيه هيك

http://localhost:8080/hanytest/DoGetExample

هي الفرق بين الميثود get والميثود post

هلا اللي بحب اذكر فيه 

انه اليوزر ما بيتعامل مع السيرفلت مباشرة

اليوزر بتعامل مع html وهيا بتتعامل مع السيرفلت 

انتهى الدرس الثاني مش حضيف معلومات جديدة عليه بس حعطيكم امثلة اكثر حتى توضح الصورة اكثر 

و في الدروس القادمة ان شاء الله الجزئية اللي بشرحها مش حشرحها تاني عشان هيك المتابعة ضرورية 

واللي بيحب انه يتعلم بتفاصيل اكثر يحمل الكتاب ويقرأ منه انا تقريبا اغلب شرحي حيكون منه 

تحياتي 

ليست هناك تعليقات:

إرسال تعليق