الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

MVC ، لا أستطيع تطبيقه مع Index.jsp .

بدأه Abdullah.Alshammeri في 4 أبريل 2010 · 9 رد · 812 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سؤال آخر :-( .

مشروعي من المفترض أن يكون MVC ( ثلاث طبقات ) ، و أرغب في أن يصبح برنامجي بهذا الشكل :

Controller : هي Servlets التي تقوم بتحليل وتلقي الطلبات ثم التواصل مع طبقة الـ Model فاستدعاء ملف العرض jsp .

Model : كلاسات الجافا .

View : ملفات JSP ..

الصفحة الرئيسية لموقعي هي index.jsp ، وأنا أريد أن يبدأ الزائر من هذه الصفحة ، ويمكن أن تظهر الطلبات بهذه الطريقة :

index.jsp?section=article&id=10

وكود index.jsp ، يقوم بالتعرف على section المطلوب .. ثم تضمين ملف jsp المناسب :

 	<div class="midcol">
 	<!-- Which section? -->
 	<%String fileName = request.getParameter("section");
 	if (fileName == null) {
 	fileName = "WEB-INF/jspf/frontpage.jsp";
 	} else {
 	fileName = "WEB-INF/jspf/" + fileName + ".jsp";
 	}
 	%>
 	<jsp:include page='<%= fileName%>' />
 	</div>

المشكلة هنا ، أنه عند تضمين الملف article.jsp .. أصبح هو Controller ، لأنه هو من سيضطر لتحليل request ، وليس Servlet !

وبنفس الوقت .. لا أجد حل غير عملية تضمين ملف article.jsp ؟ لأقسّم عملية العرض على عدة ملفات !

فصرت لا أستطيع أن أجعل طبقة Controller من مسؤولية Servlet ( الا في حالة واحدة .. وهي ارسال بيانات Form معين ، post - get ) .

السؤال :

- ماهو الحل لهذه المشكلة .. بحيث أرتب عملي ليكون Servlet هو المسؤول عن تحليل request ؟

هل السؤال واضح ؟

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

لا أرى أن article.jsp يعمل كمتحكم هنا

ربما لو قلت index.jsp يعمل كمتحكم هنا لقلت لك هذا صحيح لأنه يتحكم في مسار العرض

حيث قد قرر من هي الصفحة التي سيتم تضمينها داخله

        <div class="midcol">
        <!-- Which section? -->
        <%String fileName = request.getParameter("section");
        if (fileName == null) {
        fileName = "WEB-INF/jspf/frontpage.jsp";
        } else {
        fileName = "WEB-INF/jspf/" + fileName + ".jsp";
        }
        %>
        <jsp:include page='<%= fileName%>' />
        </div>

لتتخلص من هذه المشكلة يمكنك تمرير الطلب في البداية على filter والذي سيحتوي على الشيفرة if else التي وضعتها

ثم سيعطيك الجواب النهائي في المدخل parameter

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

لما لا تعمل Servlet تسميه و تعمله mapping ل index.jsp

و بالتالي إذا طلب المستخدم index.jsp فهي في الواقع Controller Servlet

أنا لست مع أخي علاء في موضوع ال Filters لأنه يزيد طبقه معالجه

بالنسبه للتصميم الخاص بك أخي, لما تسخدم تصميم المنتديات هذا :D

1
#4

اعتقد أن حل الأخ هويدي أدق لأن filter يفترض به أن يعمل على فلترة الطلبات التي لا يحق لها الوصول إلى مكان ما

بينما Servlet فمهمتها معالجة المدخلات والتقرير إلى أي صفحة سيتم التحويل

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5
علاء الصالحي كتب:

اعتقد أن حل الأخ هويدي أدق لأن filter يفترض به أن يعمل على فلترة الطلبات التي لا يحق لها الوصول إلى مكان ما

بينما Servlet فمهمتها معالجة المدخلات والتقرير إلى أي صفحة سيتم التحويل

تحياتي

هذا وسام أضعه على صدري يا أخي,

جزاك الله خيرا

#6

كنت أريد أن أسأل لماذا Filter وليس servlet عادي ، ولكن الان اتفقتوا على servlet : ) .

اقتباس

لما لا تعمل Servlet تسميه و تعمله mapping ل index.jsp

و بالتالي إذا طلب المستخدم index.jsp فهي في الواقع Controller Servlet

لم أفهم المقصود بالـmapping ؟

بالنسبة لـ servlet فله url-pattern .. والحل الذي قد أفهمه هو أن اعمل توجيه forward من Index.jsp الى servlet ؟

لو أمكن توضيح المقصود ، لعل هذا يحل الاشكال .

أمر آخر ، الصفحة index.jsp تحوي على تقسيم الموقع بشكل عام ( الرأس - القائمة - المحتوى - التذييل ) ،

فلو عملت الـmapping المذكور ، هل يمكن أن أعود بعدها الى index.jsp التي تحوي التقسيم .. أم أضع التقسيم في مكان آخر حتى لايحدث recursion بين servlet و index ( كل واحد يوجه للاخر ) . الامور مشوشة عندي .

اقتباس
بالنسبه للتصميم الخاص بك أخي, لما تسخدم تصميم المنتديات هذا

:-) ، هل هناك أسلوب أفضل ؟

في الحقيقة ، لا أعرف الا هذا الأسلوب .. أرشدني لأسلوب أفضل .. فأنا غير قادر على التفكير في وقت ضيق :/ .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

أقصد شئ مثل هذا :

 <servlet>
    <description></description>
    <display-name>InitializerServlet</display-name>
    <servlet-name>InitializerServlet</servlet-name>
    <servlet-class>com.glowsky.web.InitializerServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>InitializerServlet</servlet-name>
    <url-pattern>/index.jsp</url-pattern>
  </servlet-mapping>

بالنسبه للأسلوب الذي سوف تدير به الصفحات (أسلوب المنتديات :D ), أعتقد إنه سيصعب الموضوع عليك, لم لا تقوم بعمل تصميم بسيط و سهل,

مثلا لإضافه\تعديل عنصر , قم بعمل صفحه إسمها addItem.jsp , مثلا

لإضافة تصنيف, addCategory.jsp , لعرض كل التصانيف, showCategories.jsp

و بالتالي يكون عندك أكتر من صفحة, كل واحده لها ال Controller الخاص بها,,,,,,

بالنسبه لقسيم محتويات الصفحة (templates , أو الإستطمبات), إستخدم Tiles أو حتي أستخدم <@include .... ,,,,

#8

اه .. هذا تسمونه mapping ، أقوم به ولكن لم أكن أعرف اسمه .. ولكن فكرة تسمية servlet باسم index.jsp ، فكرة عبقرية ، وهي ما أريده ، ممتاز أخي :-) ،

بالنسبة لأسلوب المنتديات :-) ، استخدمه لأنه يعطي مرونة حسب وجهة نظري ، فكيف يمكن أن يكون للموقع تصميم ثابت .. فمثلاً ، لو قلنا أنه يوجد ثلاث صفحات :

addItem

removeItem

updateItem

فسأضطر لتقسيم كل صفحة .. كل مرة بنفس الشكل .

هذا ما أفكر به ، وقد أكون بالفعل .. معقدها على نفسي دون أن أشعر :/ .

جزيتم خيراً على المساعدة .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#9
اقتباس
فسأضطر لتقسيم كل صفحة .. كل مرة بنفس الشكل .

و من هنا أتت فكرة الإسطمبات (Template frameworks ) , من أشهرها Tiles Framework

2
#10

??????????????????

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…