دعونا نلقي نظرة على مخطط التدفق:
عملية طلبات معالجة الخادم:
(1) في كل مرة يتلقى فيها الخادم طلبًا ، سيفتح مؤشر ترابط جديد للطلب.
(2) سيقوم الخادم بتغليف بيانات طلب العميل في كائن الطلب ، والطلب هو حامل بيانات الطلب!
(3) سيقوم الخادم أيضًا بإنشاء كائن استجابة ، متصل بالعميل ويمكن استخدامه لإرسال استجابة إلى العميل.
كما يتضح من مخطط التدفق ، في طلب Javaweb واستجابةها ، فإن أهم المعلمتين هما الطلب والاستجابة ، وهما في طريقة الخدمة () من servlet.
1. مفهوم الاستجابة:
الاستجابة هي معلمة من طريقة servlet.service وهي من النوع javax.servlet.http.httpservletresponse. عندما يقوم العميل بتقديم كل طلب ، يقوم الخادم بإنشاء كائن استجابة ويمرره إلى طريقة servlet.service (). يتم استخدام كائن الاستجابة للرد على العميل ، مما يعني أن استخدام كائن الاستجابة في طريقة Service () يمكنه إكمال عمل الاستجابة إلى العميل.
تنقسم وظائف كائن الاستجابة إلى الأنواع الأربعة التالية:
(1) تعيين معلومات رأس الاستجابة
(2) إرسال رمز الحالة
(3) اضبط نص الاستجابة
(4) إعادة توجيه
2. نص الاستجابة
الاستجابة هي كائن استجابة. يمكن استخدام تدفق استجابة جسم الاستجابة (جسم الاستجابة) لإخراج هيئة الاستجابة للعميل. يوفر Repsonse ما مجموعه كائنين لتدفق الاستجابة:
(1) printWriter out = response.getWriter (): الحصول على دفق حرف ؛
(2) servleTOutputStream out = response.getOutputStream (): احصل على دفق البايت ؛
بالطبع ، إذا كان محتوى جسم الاستجابة حرفًا ، فاستخدم Response.getWriter () ، وإذا كان محتوى الاستجابة بايت ، على سبيل المثال ، عند التنزيل ، يمكنك استخدام Response.getOutputStream ().
لاحظ أنه في طلب واحد ، لا يمكن استخدام كلا التدفقات في نفس الوقت! أي إما أنك تستخدم reply.getWriter () أو response.getOutputStream () ، ولكن لا يمكنك استخدام كلا التدفقات في نفس الوقت. خلاف ذلك ، سيتم إلقاء القسم غير القانوني.
3. تعيين معلومات رأس الاستجابة
يمكنك استخدام طريقة SetHeader () لكائن الاستجابة لتعيين رأس الاستجابة! سيتم إرسال مجموعة رأس الاستجابة باستخدام هذه الطريقة في النهاية إلى متصفح العميل!
(1) استجابة. تتمثل وظيفة هذا الرأس في إخبار المتصفح بأن محتوى الاستجابة هو نوع HTML وترميزه على أنه UTF-8. وفي الوقت نفسه ، سيتم تعيين ترميز دفق الأحرف للاستجابة على UTF-8 ، أي ، استجابة.
(2) استجابة.
4. تعيين رمز الحالة وطرق أخرى
(1) استجابة.
(2) استجابة.
(3) استجابة.
(4) استجابة.
5. إعادة التوجيه (****** مفتاح *******)
5.1 ما هو إعادة التوجيه (طلبان)
عند زيارة http://www.sun.com ، ستجد أن عنوان URL في شريط عنوان المتصفح سيصبح http://www.oracle.com/us/sun/index.htm ، وهو إعادة التوجيه. إعادة التوجيه هو عندما يقوم الخادم بإخطار المتصفح للوصول إلى عنوان آخر ، أي إصدار طلب آخر.
5.2 كيفية إكمال إعادة التوجيه؟
الإجابة: رمز الحالة لإعادة التوجيه هو 302. نستخدم أولاً كائن الاستجابة لإرسال رمز الحالة 302 إلى المتصفح ، ثم ضبط موقع ، أي إعطاء عنوان URL متاح ، ويصل المستعرض إلى عنوان URL الجديد لتحقيق إعادة التوجيه.
على سبيل المثال:
يمتد الفئة العامة Aservlet httpservlet {public void dogge (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioException {response.setStatus (302) ؛ Response.Setheader ("الموقع" ، "http://www.baidu.com") ؛ }}الغرض من الكود أعلاه هو: بعد الوصول إلى Aservlet ، سيتم إخطار المتصفح لإعادة توجيه إلى الصفحة الرئيسية لـ BAIDU. بعد أن يقوم متصفح العميل بتوزيع رمز الاستجابة لـ 302 ، يعلم أن الخادم يتيح له إعادة التوجيه ، لذلك سيحصل على الفور على موقع رأس الاستجابة ثم إصدار طلب ثانٍ.
هناك أيضًا طريقة إعادة توجيه سريعة ، أي استخدام طريقة الاستجابة. sendredirect (). على سبيل المثال ، يمكن استبدال الجملتين في المثال أعلاه بالاستجابة.
يرفع الطلب على جميع بيانات الطلب من العميل
1. طلب نظرة عامة
الطلب هو معلمة من طريقة servlet.service () وهي من النوع javax.servlet.http.httpservletrequest. عندما يقوم العميل بتقديم كل طلب ، سيقوم الخادم بإنشاء كائن طلب وتغليف بيانات الطلب في الطلب ، ثم تم نقله إلى طريقة الخدمة () عند استدعاء طريقة servlet.service () ، مما يوضح أنه يمكن الحصول على بيانات الطلب من خلال كائن الطلب في طريقة الخدمة ().
كما هو مبين في الشكل:
يمكن تقسيم وظيفة الطلب إلى الأنواع التالية:
(1) تغليف بيانات رأس الطلب ؛
(2) تغليف بيانات نص الطلب. إذا كان طلب الحصول على ، فلا يوجد نص ؛
(3) الطلب هو كائن مجال ، والذي يمكن إضافته واسترداده كخريطة ؛
(4) يوفر الطلب توجيه الطلبات وطلب شمولية الطلب.
2. طريقة طلب المجال
الطلب هو كائن مجال! هناك أربعة كائنات مجال في Javaweb ، من بينها ServletContext هو كائن مجال ، والذي ينشئ فقط كائن ServletContext في التطبيق بأكمله. طلب أحد الطلبات ، والتي يمكن مشاركة البيانات في طلب.
هناك طلب ينشئ كائن طلب. إذا تم تجربة Servlets متعددة في طلب ، فيمكن أن تستخدم Servlets طلبات لمشاركة البيانات. الآن لا نعرف كيف نذهب من خلال عدة servlets في طلب.
فيما يلي طريقة مجال الطلب:
(1) void setAttribute (اسم السلسلة ، قيمة الكائن): يستخدم لتخزين كائن ، يمكن أيضًا أن يطلق عليه تخزين سمة مجال ، على سبيل المثال: servletContext.setAttribute ("xxx" ، "xxx") ، يتم حفظ سمة المجال في الطلب ، اسم سمة المجال هو xxx وقيمة سمة المجال هي xx. لاحظ أنه إذا تم استدعاء الطريقة عدة مرات وتم استخدام نفس الاسم ، فسيتم كتابة القيمة الأخيرة ، وهي نفس الخريطة ؛
(2) الكائن getAttribute (اسم السلسلة): يستخدم للحصول على البيانات في الطلب. يجب تخزينها قبل الحصول عليها. على سبيل المثال: string value = (string) request.getAttribute ("xxx") ؛ للحصول على سمة المجال المسماة xxx ؛
(3) void removeAttribute (اسم السلسلة): يستخدم لإزالة سمة المجال في الطلب. إذا كانت سمة المجال المحددة باسم المعلمة غير موجودة ، فإن هذه الطريقة لا تفعل شيئًا ؛
(4) تعداد getAttributenames (): احصل على أسماء جميع سمات المجال ؛
3. تمرير المعلمات حسب الطلب
هناك طريقتان أكثر شيوعًا لتمرير المعلمات على العميل:
(1) المدخلات المباشرة من شريط عنوان المتصفح: يجب أن يكون طلب الحصول على ؛
(2) الارتباط التشعبي: يجب أن يكون طلب الحصول على ؛
(3) النموذج: يمكن الحصول على أو نشر ، وهو ما يعتمد على قيمة سمة الطريقة لـ <Porm> ؛
الفرق بين طلب الحصول على طلب وطلب بعد:
(1) احصل على طلب:
سيتم عرض معلمات الطلب في شريط عناوين المتصفح ، لذلك ليس آمنًا ؛
حد طول المعلمة الطلب هو ضمن 1K ؛
لا يحتوي طلب GET على هيئة طلب ، وبالتالي لا يمكن تعيين ترميز المعلمة من خلال request.SetchAracterEncoding () ؛
(2) طلب النشر:
لن تعرض معلمات الطلب شريط عناوين المتصفح ، وهو آمن نسبيًا ؛
لا يوجد حد على طول المعلمة المطلوبة ؛
4. طلب إعادة التوجيه وطلب التضمين (****** مفتاح *******)
سواء أكان طلب إعادة توجيه الطلب أو إدراج طلب ، فهذا يعني أن Servlets متعددة تتعامل مع طلب مشترك. على سبيل المثال ، يعالج Servlet1 الطلب ، ثم يقوم Servlet1 بإعادة توجيهه إلى Servlet2 لمواصلة معالجة الطلب.
طلب إعادة التوجيه والطلب بما في ذلك
requestDispatcher rd = request.getRequestDispatcher ("/myServlet") ؛ استخدم طلب الحصول على كائن requestDispatcher. معلمة الطريقة هي مسار servlet للخدمة التي يتم إعادة توجيهها أو المحتوى.
طلب إعادة توجيه: rd.forward (طلب ، استجابة) ؛
يتضمن الطلب: rd.include (طلب ، استجابة) ؛
في بعض الأحيان ، يتطلب الطلب servlets متعددة للتعاون ، لذلك تحتاج إلى القفز في Servlet إلى آخر!
> يمتد الطلب على أجهزة Servlets متعددة ويتطلب إعادة التوجيه والإدماج.
> طلب إعادة توجيه: يتم الانتهاء من هيئة الاستجابة بواسطة servlet التالي! يمكن للخدمة الحالية تعيين رأس الاستجابة! (اترك الرأس وليس الجسم) ، أي ، الرأس المقابل الذي تم تعيينه بواسطة servlet الحالي صالح ، والجسم المقابل غير صالح.
> يحتوي الطلب على: لا يتم إكمال هيئة الاستجابة بواسطة اثنين من servlets! (ابق كل) كل شيء صالح.
> ما إذا كان طلب إعادة توجيه الطلب أو طلب يحتوي ، فهو ضمن نطاق الطلب! استخدم نفس الطلب والاستجابة!
طلب إعادة توجيه وطلب المقارنة:
(1) إذا تم إعادة توجيه الطلب إلى bservlet في Aservlet ، فلا يُسمح بإخراج هيئة الاستجابة في Aservlet ، أي استجابة. يجب أن يتم هذا العمل من قبل bservlet. إذا تم استخدامه لتضمين الطلب ، فلا يوجد مثل هذا القيود ؛
(2) على الرغم من أن إعادة توجيه الطلب لا يمكن إخراج هيئة الاستجابة ، إلا أنه لا يزال من الممكن تعيين رأس الاستجابة ، على سبيل المثال: Response.setContentType ("Text/HTML ؛ Charset = UTF-8") ؛
(3) يتم تطبيق معظم الطلبات في صفحات JSP لإكمال دمج صفحات متعددة ؛
(4) يتم تطبيق إعادة توجيه الطلبات في الغالب في Servlets ، وهدف إعادة التوجيه هو في الغالب صفحات JSP ؛
كما هو مبين في الشكل:
مقارنة إعادة توجيه الطلب وإعادة التوجيه
(1) إعادة توجيه الطلب هو طلب واحد ، في حين أن إعادة التوجيه هو طلبان ؛
(2) بعد إعادة توجيه الطلب ، لن يتغير شريط عنوان المتصفح ، لكن إعادة التوجيه ستتغير ، لأن إعادة التوجيه هي طلبان ؛
(3) يمكن أن يكون الهدف من طلب إعادة التوجيه هو الموارد في هذا التطبيق فقط ، ويمكن أن يكون هدف إعادة التوجيه تطبيقات أخرى ؛
(4) طريقة إعادة توجيه الطلبات لـ Aservlet و Bservlet هي نفسها ، أي كلاهما أو كلاهما منشورات ، لأن إعادة توجيه الطلب هي طلب ؛
(5) يجب الحصول على الطلب الثاني لإعادة التوجيه ؛
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.