طلب عميل JSP

⚡ ملخص ذكي

يستخدم طلب العميل واستجابته في JSP عناصر JSP للتحكم في محرك servlet. يرسل المتصفح المعلومات عبر رؤوس HTTP، ويعيد الخادم سطر الحالة والرؤوس، وتشير رموز حالة HTTP إلى نتيجة كل طلب.

  • 📨 طلب الزبون: يرسل المتصفح البيانات إلى الخادم في رؤوس طلب HTTP، والتي تتم قراءتها عبر HttpServletRequest.
  • 🧾 رؤوس الطلبات: تصف كل من Accept و Accept-language و Connection و Cookie و Host و User-agent العميل.
  • 📤 استجابة الخادم: تقوم الدالة HttpServletResponse بإرجاع سطر الحالة، ورؤوس الاستجابة، والمستند.
  • 🔧 أساليب الاستجابة: تقوم الدوال addHeader() و sendRedirect() و sendError() و setStatus() بتشكيل الاستجابة.
  • 🔢 الحالة Codes: تم تجميعها من 100 إلى 599؛ وتشمل الأنواع الشائعة 200 و301 و404 و500.
  • 🧪 أمثلة: تقوم صفحات JSP العاملة بقراءة الرؤوس، وتعيين فاصل زمني للتحديث، وإرسال خطأ 404.

طلب عميل JSP

تستخدم إجراءات JSP بنيات في صيغة XML للتحكم في سلوك محرك servlet. سنتعرف بمزيد من التفصيل على عناصر إجراءات JSP المختلفة مثل طلب العميل، واستجابة الخادم، ورموز حالة HTTP.

طلب عميل JSP

  • عندما يتم طلب صفحة الويب، فإنها ترسل المعلومات إلى خادم الويب في رأس HTTP.
  • يمكننا استخدام هذه المعلومات باستخدام كائن HTTPServletRequest.
  • يتم تخزين المعلومات التي يرسلها المتصفح في رأس الطلب لطلب HTTP.
  • نحن نستخدم رؤوسًا مختلفة لإرسال المعلومات إلى كائن الطلب.

الرؤوس في JSP

الرؤوس المختلفة في JSP موضحة أدناه:

رأس الوصف مثال
استمر فهو يحدد أنواع MIME التي يمكن للمتصفح أو العملاء الآخرين التعامل معها صورة/png أو صورة/jpeg
قبول-محارف يستخدم مجموعة الأحرف التي يستخدمها المتصفح لعرض المعلومات ISO-8859-1
قبول - الترميز وهو يحدد نوع الترميز الذي يعالجه المتصفح Gzip أو ضغط
قبول اللغة ويحدد العملاء اللغة المحددة أون، أون_أوس
ترخيص الرأس الذي يستخدمه العملاء عند محاولة الوصول إلى صفحات الويب المحمية بكلمة مرور
الاتصال يشير إلى ما إذا كان العميل يمكنه التعامل مع اتصالات HTTP المستمرة (يمكن للمتصفح استرداد ملفات متعددة) حافظ على حياتك
طول المحتوى ينطبق على طلبات النشر. أنه يعطي حجم البيانات اللاحقة بالبايت
كوكي إرجاع ملف تعريف الارتباط إلى الخادم (تلك التي تم إرسالها مسبقًا إلى المتصفح)
مضيف يحدد المضيف والمنفذ الخاص بالأصل URL
إذا تم تعديلها منذ ذلك الحين يشير إلى أنه لا يتطلب سوى صفحة واحدة إذا تم تغييرها أو تعديلها
إذا لم يتم تعديلها منذ ذلك الحين يشير إلى أنه يتطلب صفحة فقط إذا لم يتم تغييرها أو تعديلها
الإحالات يشير URL الإحالة URL صفحة
وكيل المستخدم يحدد المتصفح أو طلب العميل

طرق رأس HTTP في JSP

يتم استخدام الطرق التالية لقراءة رأس HTTP في صفحة JSP:

  1. ملف تعريف الارتباط[] getCookies() – تقوم بإرجاع مصفوفة تحتوي على كائنات ملفات تعريف الارتباط التي أرسلها العميل
  2. تعداد getAttributeNames () – يحتوي على تعداد أسماء السمات للطلب
  3. التعداد getHeaderNames() – يحتوي على تعداد لأسماء العناوين.
  4. التعداد getParameterNames () – يحتوي على تعداد الحصول على أسماء المعلمات في الطلب.
  5. HttpSession getSession() – يقوم بإرجاع الجلسة الحالية المرتبطة بالطلب أو إذا لم يكن لديه جلسة، فسيقوم بإنشاء جلسة جديدة.
  6. لغة getLocale () - يعيد الإعدادات المحلية المفضلة التي سيقبل العميل المحتوى فيها. وقد تم تعيينها للاستجابة. بشكل افتراضي، ستكون القيمة هي الإعدادات المحلية الافتراضية للخادم.
  7. كائن getAttribute (اسم السلسلة) - تقوم بإرجاع قيمة السمة المسماة ككائن.
  8. ServletInputStream getInputStream() – يسترجع نص الطلب كبيانات ثنائية.
  9. سلسلة getAuthType () - تقوم بإرجاع اسم نظام المصادقة لحماية servlet
  10. سلسلة getCharacterEncoding () - إرجاع اسم ترميز الأحرف المستخدم في نص الطلب.
  11. سلسلة getContentType () - تقوم بإرجاع نوع MIME لنص الطلب.
  12. سلسلة getContextPath () - يُرجع جزء URI للطلب الذي يشير إلى مسار سياق URI
  13. سلسلة getHeader (اسم السلسلة) - تقوم بإرجاع رأس الطلب كسلسلة
  14. سلسلة getMethod () - تقوم بإرجاع اسم أسلوب HTTP مثل GET وPOST
  15. سلسلة getParameter (اسم السلسلة) - تقوم بإرجاع معلمة الطلب كسلسلة.
  16. سلسلة getPathInfo () - يُعيد معلومات المسار المرتبطة بـ URL
  17. سلسلة getQueryString () - يُعيد سلسلة الاستعلام المرتبطة بالطلب URL
  18. سلسلة getServletPath () - يعيد جزءًا من URLجزء من الطلب الذي يستدعي JSP
  19. سلسلة [] getParameterValues ​​(اسم السلسلة) - تُرجع مصفوفة كائنات السلسلة التي تحتوي على القيم التي تحتوي عليها معلمة الطلب

على سبيل المثال:

في المثال أدناه، نستخدم طرقًا مختلفة باستخدام كائن الطلب

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.* java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Client Request Guru JSP</title>
</head>
<body>
<h2>Client Request Guru JSP</h2>

<table border="1">
<tr>
<th>guru header</th><th>guru header Value(s)</th>
</tr>
<%
    HttpSession gurusession = request.getSession();
    out.print("<tr><td>Session Name is </td><td>" +gurusession+ "</td.></tr>");
    Locale gurulocale = request.getLocale ();
    out.print("<tr><td>Locale Name is</td><td>" +gurulocale + "</td></tr>");
    String path = request.getPathInfo();
    out.print("<tr><td>Path Name is</td><td>" +path+ "</td></tr>");
    String lpath = request.get();
    out.print("<tr><td>Context path is</td><td>" +lipath + "</td></tr>");
    String servername = request.getServerName();
    out.print("<tr><td>Server Name is </td><td>" +servername+ "</td></tr>");
    int portname = request.getServerPort();
    out.print("<tr><td>Server Port is </td><td>" +portname+ "</td></tr>");
    Enumeration hnames = request.getHeaderNames();
    while(hnames.hasMoreElements()) {
        String paramName = (String)hnames.nextElement();
        out.print ("<tr><td>" + paramName + "</td>" );

        String paramValue = request.getHeader(paramName);
        out.println("<td> " + paramValue + "</td></tr>");
    }

%>

شرح الكود:

Code خط 17: باستخدام كائن الطلب، نحصل على كائن الجلسة لتلك الجلسة المحددة، ونحصل على قيمة الكائن لتلك الجلسة

Code خط 19: باستخدام كائن الطلب، نحصل على لغة تلك الجلسة المحددة، أي اللغة الإنجليزية الأمريكية (en_US) لصفحة JSP تلك.

Code خط 21: باستخدام كائن الطلب، نحصل على معلومات المسار لصفحة JSP تلك. في هذه الحالة، تكون القيمة فارغة (null) لعدم وجود مسار لـ URL المذكورة.

Code خط 23: باستخدام كائن الطلب، نحصل على مسار السياق، أي مسار الجذر

Code خط 25: باستخدام كائن الطلب، نحصل على اسم الخادم.

Code خط 27: باستخدام كائن الطلب، نحصل على منفذ الخادم.

Code السطر 29-35: باستخدام كائن الطلب، نحصل على أسماء الرؤوس التي تظهر على شكل تعداد، وبالتالي نحصل على جميع قيم الرؤوس في أسماء الرؤوس.

في هذا، نحصل على جميع قيم الرأس كـ a كوكي، المضيف، الاتصال، قبول اللغة، قبول الترميز.

عند تنفيذ الكود أعلاه، ستحصل على الناتج التالي:

طلب عميل JSP

الإخراج:

نحصل على سلسلة من القيم مثل اسم الجلسة واسم اللغة واسم المسار واسم الخادم واسم المنفذ والمضيف ومسار السياق وجميع قيم الرأس لذلك JSP.

استجابة خادم JSP

  • عندما تتم معالجة الطلب ثم يتم إنشاء الاستجابة من خادم الويب. ويتكون من سطر الحالة ورؤوس الاستجابة وسطرًا فارغًا ومستندًا.
  • إنه كائن من فئة HTTPServletResponse، وهو كائن استجابة.
  • سطر الحالة هو نسخة من HTML.

رؤوس الاستجابة في JSP

رؤوس الاستجابة في JSP مذكورة أدناه:

رأس الوصف
السماح وهو يحدد طرق الطلب مثل GET وPOST التي يطلبها الخادم
التحكم ذاكرة التخزين المؤقت يمكن تخزين مستند الاستجابة مؤقتًا. يمكن أن تكون عامة وخاصة ولا تحتوي على ذاكرة تخزين مؤقت. لا توجد ذاكرة تخزين مؤقت تحدد أنه لا ينبغي تخزين هذا المستند مؤقتًا
الاتصال فهو يرشدك إلى ما إذا كان يجب على المتصفح استخدام اتصالات HTTP المحفوظة أم لا. تمثل قيمة الإغلاق أن المتصفح يجب ألا يستخدم الاتصالات المستمرة في HTTPConnections ويعني "البقاء على قيد الحياة" استخدام الاتصالات المستمرة
التصرف في المحتوى لسؤال المستخدم ما إذا كان سيتم حفظ الاستجابة على القرص أم لا
ترميز المحتوى يجب ترميز الصفحة أثناء الإرسال
طول المحتوى عدد البايتات في الاستجابة
نوع المحتوى يحدد نوع الاستجابة MIME
تنتهي يحدد الوقت الذي يجب فيه اعتبار المحتوى قديمًا ويجب عدم تخزينه مؤقتًا
آخر تعديل يشير إلى تاريخ آخر تعديل للمستند
المدينة المنورة - بجوار المسجد النبوي يجب تضمينه مع جميع الردود التي تحتوي على رمز الحالة الذي يحتوي على 300 كرمز حالة
تحديث فهو يحدد كيفية العثور على الصفحة المحدثة.
إعادة المحاولة بعد يمكن استخدامه مع استجابة 503 لإخبار العميل بمدى سرعة تكرار الطلب
تعيين ملف تعريف الارتباط يحدد ملف تعريف الارتباط المرتبط بالصفحة

أساليب رأس استجابة HTTP في JSP

فيما يلي الطرق في JSP باستخدام كائن الاستجابة:

  1. إعادة توجيه ترميز السلسلةURL(خيط URL) - يشفر URL في إعادة التوجيهURL الأسلوب.
  2. ترميز السلسلةURL(خيط URL) - يشفر URL عن طريق تضمين معرف الجلسة.
  3. يحتوي المنطق المنطقي على رأس (اسم السلسلة) - أنه يحتوي على رأس في JSP أم لا.
  4. منطقية ملتزمة () - تم الرد أم لا.
  5. Void addCookie(Cookie cookie) – يضيف ملف تعريف الارتباط إلى الاستجابة
  6. باطلة addDateHeader (اسم السلسلة، قيمة السلسلة) - يضيف اسم تاريخ رأس الاستجابة وقيمتها
  7. باطلة addHeader (اسم السلسلة، قيمة السلسلة) - يضيف رأس الاستجابة بالاسم والقيمة
  8. باطلة addIntHeader (اسم السلسلة، قيمة int) - يضيف رأس الاستجابة بالاسم وقيمة العدد الصحيح
  9. تدفق باطلBuffer() - يجبر المحتوى الموجود في المخزن المؤقت على الإخراج إلى العميل.
  10. إعادة تعيين باطلة () - مسح البيانات الموجودة في المخزن المؤقت.
  11. إعادة تعيين باطلةBuffer - يقوم بمسح مخزن المحتوى في الاستجابة دون مسح رموز الحالة.
  12. void sendError(int sc,String msg) – يرسل استجابة خطأ إلى العميل باستخدام رمز الحالة.
  13. باطلة sendRedirect (موقع السلسلة) - يرسل استجابة إعادة توجيه مؤقتة إلى العميل.
  14. مجموعة باطلةBufferالحجم (الحجم الدولي) – يحدد حجم المخزن المؤقت للجسم
  15. Void setCharacterEncoding(مجموعة أحرف السلسلة) - يحدد ترميز الأحرف
  16. مجموعة VoidContentType (نوع السلسلة) – يحدد نوع محتوى الاستجابة
  17. void setContentLength(int len) – يضبط طول محتوى الاستجابة
  18. مجموعة باطلة (اللغة المحلية LCL) – يحدد نوع اللغة للاستجابة
  19. void setStatus(int sc) – يضبط رمز الحالة للاستجابة

على سبيل المثال:

في هذا المثال، سنتناول طرقًا مختلفة مثل getLocale و flushbuffer و getWriter، getContentType، setIntHeader.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.* java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Action Response</title>
</head>
<body>
<center>
<h2>Guru Response</h2>
<%
Locale lcl = response.getLocale();
out.println("Locale is : " + lcl + "\n");
response.flushBuffer();
PrintWriter output = response.getWriter();
output.println("This is from writer object");
String type = response.getContentType();
out.println("The content type : " + type + "\n");
    // Set refresh,autoload time as 5 seconds
    response.setIntHeader("Refresh", 5);
    //Get current time
    Date dt = new Date();
    out.println("Today's date is : " +dt.toString() + "\n");
%>
</center>
</body>
</html>

شرح الكود:

Code خط 13: باستخدام كائن الاستجابة، نحصل على كائن محلي لجلسة JSP هذه

Code خط 15: باستخدام كائن الاستجابة، يتم استخدام flushbuffer لفرض محتوى المخزن المؤقت على العميل

Code خط 16: باستخدام كائن الاستجابة، نحصل على كائن الكاتب الذي يحصل على الإخراج في دفق الإخراج

Code خط 18: باستخدام كائن الاستجابة، نحصل على نوع المحتوى، أي نوع MIME لكائن الاستجابة

Code خط 21: باستخدام كائن الاستجابة، يتم استخدامه للتحميل التلقائي كل 5 ثوانٍ حيث يتم تعيين 5 كمعلمة ثانية

عند تنفيذ الكود أعلاه، ستحصل على الناتج التالي:

استجابة خادم JSP

الإخراج:

  • هنا نحصل على الناتج، حيث أن هذا ناتج عن كائن الكاتب من دالة get.Writer، مما يعطينا الكائن ويمكننا إخراجه في دفق الإخراج.
  • نحصل على اللغة كـ en_us ونوع المحتوى كنص/html
  • نحصل على مجموعة الأحرف كـ ISO 8859
  • تاريخ اليوم هو التاريخ الحالي.

حالة HTTP لصفحة JSP Codes

  • عند معالجة الطلب، يتم إنشاء الاستجابة. يتكون سطر حالة الاستجابة من إصدار HTTP ورمز الحالة والرسالة المرتبطة.
  • ترتبط الرسالة مباشرة برمز الحالة وإصدار HTTP، ويتم تحديدها بواسطة الخادم.
  • افتراضيًا، يتم تعيين 200 كرمز حالة في JSP، لذلك لا نحتاج إلى تعيينه بشكل صريح.
  • يمكننا تعيينها كطريقة Response.setStatus()

تنقسم الرموز إلى الفئات الخمس التالية:

  • 100-199 - يشير العميل هنا إلى أنه يجب عليه الرد ببعض الإجراءات
  • 200-299 - يدل على نجاح الطلب
  • 300-399 - يتم استخدامها للملفات التي تم نقلها وعادةً ما تتضمن رأس موقع يشير إلى العنوان الجديد
  • 400-499 - يشير إلى خطأ من قبل العميل
  • 500-599 - يشير إلى خطأ من جانب الخادم

بعض رموز الحالة الشائعة موجودة أدناه:

  • 200 - يشير إلى أن كل شيء على ما يرام
  • 301 – انتقلت إلى الأبد
  • 304 – لم يتم تعديله منذ آخر تغيير
  • 400 طلب سىء
  • 404 - غير موجود
  • 405 - لم يتم العثور على الطريقة
  • 500 - خطأ خادم داخلي
  • 503 الخدمة غير متوفرة
  • 505 - إصدار HTTP غير مدعوم

حالة HTTP Code الأساليب في JSP

بعض طرق رمز الحالة في JSP مذكورة أدناه:

  1. public void setStatus(int status)Code): يحدد رمز الحالة الذي نريد تعيينه في صفحة JSP. سيعطينا هذا رسالة رمز الحالة الذي تم تعيينه
  2. public void sendRedirect(String) URL): يقوم بتوليد استجابة 302 بالإضافة إلى رأس الموقع الذي URL من الوثيقة الجديدة
  3. public void sendError(int code,String msg): يرسل رمز الحالة مع الرسالة القصيرة ويتم تنسيقه داخل مستند HTML.

على سبيل المثال:

في هذا المثال، نقوم بإرسال خطأ إلى صفحة JSP بشكل صريح.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Status Code</title>
</head>
<body>
<% response.sendError(404,"Guru Page Not Found"); %>
</body>
</html>

شرح الكود:

Code خط 10: باستخدام كائن الاستجابة، نرسل الخطأ إلى صفحة تحتوي على معلمتين.

  1. رمز الحالة - يمكن أن يكون أيًا مما سبق. في هذه الحالة، وصفنا بـ 404
  2. الرسالة - يمكن أن تكون أي رسالة محددة نريد إظهار الخطأ فيها

إذا قمت بتنفيذ الكود أعلاه، فستحصل على الإخراج التالي:

حالة HTTP لصفحة JSP Codes

الإخراج:

هنا نحصل على رمز الخطأ 404، والذي تم إرساله من الكود ويعرض أيضًا "Guru تظهر رسالة "الصفحة غير موجودة" في المخرجات.

الأسئلة الشائعة

يحمل طلب HttpServletRequest البيانات المرسلة من العميل إلى الخادم، مثل الرؤوس والمعلمات. بينما يحمل استجابة HttpServletResponse البيانات المُعادة من الخادم، بما في ذلك رموز الحالة ورؤوس الاستجابة ومحتوى المستند.

يشير رمز الحالة 404 إلى عدم العثور على المورد المطلوب على الخادم. في JSP، يمكنك إرساله صراحةً باستخدام response.sendError(404, “message”) لعرض صفحة مخصصة تُشير إلى عدم العثور على المورد.

استخدم كائن الطلب: تُعيد الدالة getHeaderNames() قائمة بأسماء الرؤوس، بينما تُعيد الدالة getHeader(name) قيمة كل رأس. كرر العملية على الأسماء لقراءة كل رأس مُرسل من العميل.

يمكن للذكاء الاصطناعي تحليل سجلات الترويسات، وتحديد الترويسات المفقودة أو غير المُهيأة بشكل صحيح، واكتشاف المشكلات الأمنية مثل غياب التحكم في ذاكرة التخزين المؤقت، وتلخيص أنماط حركة البيانات، والمساعدة فيping يقوم المطورون بتصحيح الأخطاء وتحسين معالجة الطلبات والاستجابات بشكل أسرع.

نعم. يمكن للذكاء الاصطناعي إنشاء نصوص JSP البرمجية التي تقرأ معلمات الطلب والعناوين، وتضبط عناوين الاستجابة، وترسل رموز الحالة من وصف بلغة بسيطة، والتي يقوم المطورون بعد ذلك بمراجعتها للتأكد من صحتها وأمانها.

تلخيص هذه التدوينة بـ: