• 0
ramy86alisawi

آلية عمل Java Server Page

سؤال

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

آلية عمل Java Server Page :

JSP هي لغة برمجة لتوليد صفحات الويب ديناميكيا تتميز بقوة ادائها و اتساع مجالات استخدامها لانها تحمل كافة ميزات الجافا مثل خاصية العمل على انظمة تشغيل مختلفة و القدرة على الاتصال بين عدة مخدمات ذات انظمة تشغيل مختلفة للحصول على المعلومات وسوف نوضح قليلا في هذه المقالة كيفية عمل هذه التقنية و لماذا تعاني من البطئ في التشغيل مقارنة بباقي لغات البرمجة المشابهة (PHP - ASP ) . في حقيقة الامر ان JSP ليست سوى واجهة لتسهيل استخدام الـ Servlet بكلام آخر يمكن الاستغناء عن JSP تماما و لكن ذلك سوف يزيد من صعوبة اظهار الرد بصيغة HTML فما الذي يحدث حقيقة عندما نطلب صفحة JSP من مخدم (منصب عليه Tomcat مثلا) يحدث احد الامرين التاليين اذا كانت مشغلة من قبل فسوف يتم تشغيل السيرفلت و يتم عرض الصفحة اما اذا كان هذا اول تشغيل للصفحة فسوف يتم تحويل صفحة الجي اس بي الى ملف جافا مصدري و بعدها يتم ترجمته و انتاج كلاس جديد (سيرفلت جديد ) يتم تشغيله و تعرض الصفحة و هنا يحدث البطئ التي تعاني منه هذه التقنية و كما لاحظتم فهو يحدث عند التشغيل في اول مرة فقط حيث يتم تحويل و ترجمة و من ثم تشغيل و العرض و بعدها اذا طلبت الصفحة مرة اخرى فسيتم التشغيل و ثم العرض فقط و هذه العملية لا تعاني من البطئ ابدا و لذا لا يصح اتهام اللغة بالبطئ بالاداء دوما و طبعا تعاد عملية الترجمة و التحويل في كل مرة تجري فيها تعديلا حتى لو كان بسيطا على صفحة الـ JSP .

و خلاصة الامر ان التقنيتان و جهان لعملة واحدة و لكن عند فهمهما معا سوف تعلم متى تعتمد على JSP او متى تعتمد على Servlet و يمكنني تلخيص هذه المعرفة و بابسط ما يمكن لكي تدرك متى يحين استخدام كل واحدة منهم، حيث سوف تجد سهولة كبيرة تقدمها JSP عندما تحتوي الصفحة على خرج كبير على شكل HTML حيث تستطيع البرمجة و التصميم بواسطة HTML بالشكل المعتاد و تدخل معها كود JSP اما للاضافة او الحذف او التعديل على محتويات و اجزاء صفحة HTML اما عند اعتمادك على Servlet فستجد امكانية و سهولة اكبر للوصول الى الكلاسات و الحزم الاخرى و تبادل المعلومات معها و بمعنى آخر تتيح لك مكان واسع لكتابة الاكواد البرمجية الحقيقية و المعقدة و بالطبع تستطيع الاستفادة من مزايا و التخلص من عيوب التقنيتين عند استخدامها معاً فمثلا تضع الكود البرمجي العام في Beans على حسب الحاجة مثلا ( للتعامل مع قواعد البيانات- لحساب الزمن – لادارة المفات – الخ ) و من ثم تبرمج Servlet تضع فيها الاكواد المتوسطة و التي تهدف الى الجمع و استخلاص المفيد من Beans المختلفة و ترسله الى الاطراف المستفيدة و اذا كان الخرج عبارة عن صفحة HTML معقدة نسبيا فالافضل ان تترك المهمة الى JSP و بحيث تكون قد سهلت الحصول على المعلومات قدر الامكان لتلافي التعقيد في كود الـ JSP .

و المثال التالي يوضح فكرة عمل JSP :

ليكون لدينا الصفحة

ArabTeam2000.jsp

<html>
<head>
<title>Confusing !!! JSP or Servlet??</title>
<% String ramy="Hi Ramy,, I heat you so much...whatever"; %>
</head>

<body>
<%=ramy%>
</body>

</html>

و بما انها جديدة سوف تمر على المراحل التي تم ذكرها سابقاً و سيولد الحاوي ( Tomcat في مثالنا ) كود جافا مصدري داخل مجلد يحوي اسم التطبيق الذي هو بداخل المجلد work و فيما يلي كود السيرفلت المولد نتيجة لصفحة JSP السابقة :

ArabTeam2000$jsp.java

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import org.apache.jasper.runtime.*;


public class ArabTeam2000$jsp extends HttpJspBase {


   static {
   }
   public ArabTeam2000$jsp( ) {
   }

   private static boolean _jspx_inited = false;

   public final void _jspx_init() throws org.apache.jasper.runtime.JspException {
   }

   public void _jspService(HttpServletRequest request, HttpServletResponse  response)
       throws java.io.IOException, ServletException {

       JspFactory _jspxFactory = null;
       PageContext pageContext = null;
       HttpSession session = null;
       ServletContext application = null;
       ServletConfig config = null;
       JspWriter out = null;
       Object page = this;
       String  _value = null;
       try {

           if (_jspx_inited == false) {
               synchronized (this) {
                   if (_jspx_inited == false) {
                       _jspx_init();
                       _jspx_inited = true;
                   }
               }
           }
           _jspxFactory = JspFactory.getDefaultFactory();
           response.setContentType("text/html;charset=ISO-8859-1");
           pageContext = _jspxFactory.getPageContext(this, request, response,
              "", true, 8192, true);

           application = pageContext.getServletContext();
           config = pageContext.getServletConfig();
           session = pageContext.getSession();
           out = pageContext.getOut();

           // HTML // begin [file="/ArabTeam2000.jsp";from=(0,0);to=(3,0)]
               out.write("<html>\r\n<head>\r\n<title>Confusing !!! JSP or Servlet??</title>\r\n");

           // end
           // begin [file="/ArabTeam2000.jsp";from=(3,2);to=(3,58)]
                String ramy="Hi Ramy,, I heat you so much...whatever";
           // end
           // HTML // begin [file="/ArabTeam2000.jsp";from=(3,60);to=(7,0)]
               out.write("\r\n</head>\r\n\r\n<body>\r\n");

           // end
           // begin [file="/ArabTeam2000.jsp";from=(7,3);to=(7,7)]
               out.print(ramy);
           // end
           // HTML // begin [file="/ArabTeam2000.jsp";from=(7,9);to=(11,0)]
               out.write("\r\n</body>\r\n\r\n</html>\r\n");

           // end

       } catch (Throwable t) {
           if (out != null && out.getBufferSize() != 0)
               out.clearBuffer();
           if (pageContext != null) pageContext.handlePageException(t);
       } finally {
           if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);
       }
   }
}

و السلام عليكم و رحمة الله....

اي استفسار عن المقالة هذه سيكون موضع ترحيب بالنسبة لي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

7 إجابة على هذا السؤال .

  • 0

ما شاء الله عليك أخي رامي

دوماً متألق :)

جزاكم الله كل الخير على هذا المقال الرائع ،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخ رامي توجد لدي أسئلة :

1- هل يمكن لمبرمج أن يستخدم ال JSP بدون أي استخدام للسيرفلت أم أنه سوف يظل يعود لها دائما ؟؟

2- هل ال Beans مهمة جدا بالنسبة لل JSP أم أنه من الممكن تصميم عدة مواقع متكاملة بال JSP بدون استخدام ال Beans ؟

3- هل تنصح المبرمجين بلغات برمجة أخرى مثل PHP و ASP وغيرها أن يتعلموا ال JSP باعتبارها أفضل وما هي مصادر قوتها بالنسبة للغات الأخرى ؟

مع جزيل الشكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ولا يهمك اخي..

1- نعم يمكنك ان تعمل كل ما تريد بواسطة JSP فقط و لكن لا بد لك ان تعرف بانها تحول بالنهاية الى سيرفلت ولكن الحاوي هو من يولد الكود و ليس انت.

2- اعتقد هي مهمة لدرجة كبيرة مثلا يوجد كود للاتصال بقاعدة بيانات هي من المعقول تكراره في كل صفحة JSP تود الاتصال بقاعدة معينة!! او اغلب الصفحات تحتاج معلومة معينة مثلا الوقت و التاريخ بصيغة معينة يحتاج كتابة بعض الاسطر هل من الجيد تكراراها في كل صفحات JSP ام نكتبها مرة واحدة و نذكر اسم الطريقة فقط الموجود في البينز للحصول على المطلوب.

3- الحقيقة انا لا اعرف على باقي هذه اللغات لذا لا استطيع الحكم...

و اي استفسار آخر اهلا وسهلا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لك أخي رامي على الرد الوافي

يعطيك العافية

:)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

المتميز دوماً الاخ رامي

شكراً لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اشكرك على هذا الشرح الوافي ..

جاري التمعن في الشرح :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخ رامي و الله مبدع و نتظر منك المزيد.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .