English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

استجابة الخادم في JSP

يعد Object الرد الرئيسي مسؤولًا عن إرسال النتائج التي تم معالجتها من قبل حاوية JSP إلى العميل. يمكن تعيين حالة HTTP من خلال متغير response وإرسال بيانات إلى العميل، مثل Cookie، معلومات عناوين HTTP وما إلى ذلك.

يبدو الرد التقليدي كما يلي:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (سطر فارغ)
!doctype ...
<html>
<head>...</head>
<body>
...
</body>
</html>

يحتوي سطر الحالة على معلومات إصدار HTTP، مثل HTTP/1.1، رمز حالة، مثل 200، وأيضًا معلومات قصيرة جدًا تتعلق برمز الحالة، مثل OK.

في الجدول التالي يتم تلخيص أجزاء إعداد الرد الأكثر أهمية في إصدار HTTP/1.1، التي سترونها غالبًا في البرمجة الشبكية:

إعداد الردوصف
Allow يحدد الطرق التي يدعمها الخادم للطلبات (GET، POST وما إلى ذلك)
Cache-Control يحدد حالات الأمان التي يمكن فيها تخزين الردود. عادةً تأخذ القيم public،private أوno-cache وغيرها. يعني Public أن المستند قابل للتخزين، يعني Private أن المستند مخصص للمستخدم الواحد فقط وأنه يمكن استخدامه في المخزن المؤقت الخاص فقط. يعني No-cache أن المستند غير قابل للتخزين
Connection يحدد ما إذا كان المتصفح سيستخدم اتصال HTTP مستمرcloseالقيمة يأمر المتصفح بعدم استخدام اتصال HTTP مستمر، حيث يعني keep-alive استخدام اتصال مستمر
Content-Disposition يطلب من المتصفح حفظ الرد باسم معين على القرص الصلب
Content-Encoding يحدد قواعد الترميز عند نقل الصفحة
Content-Language يعبر عن اللغة التي يستخدمها المستند، مثل en، en-us، ru وما إلى ذلك
Content-Length يعبر عن عدد البايتات في الرد. يهم فقط عندما يستخدم المتصفح اتصال HTTP مستمر (keep-alive)
Content-Type يعبر عن نوع MIME الذي يستخدمه المستند
Expires يحدد متى تنتهي صلاحية المستند ويزال من المخزن المؤقت
Last-Modified يحدد وقت آخر تعديل المستند. يمكن للعميل حفظ المستند وإعداده في طلبات لاحقة If-Modified-Sinceإعداد الطلب
Location في غضون 300 ثانية، يحتوي على جميع الردود التي تحتوي على رمز حالة، ويقوم المتصفح تلقائيًا بالاتصال مرة أخرى للبحث عن مستند جديد
Refresh يحدد متصفح ما هي الفترة الزمنية التي يطلب فيها تحديث الصفحة.
Retry-After يستخدم مع رمز 503 (غير متاح حاليًا) لتخبر المستخدم متى سيتم استجابة الطلب مرة أخرى
Set-Cookie يحدد الكوكي الموجود في الصفحة الحالية

HttpServletResponse

كائن response هو مثال على javax.servlet.http.HttpServletResponse. مثلما يخلق الخادم كائن request، فإنه يخلق أيضًا استجابة للعميل.

يحدد كائن response واجهة معالجة إنشاء عناوين معلومات HTTP. من خلال استخدام هذا الكائن، يمكن للمطورين إضافة كوكي جديد أو علامة زمنية، بالإضافة إلى رموز الحالة لـ HTTP وغيرها.

في الجدول أدناه يُظهر الطرق المستخدمة لتعيين عناوين استجابة HTTP، وهي تقدم من قبل كائن HttpServletResponse:

S.N.الطريقة & وصف
1String encodeRedirectURL(String url) تحويل URL التي يستخدمها sendRedirect() إلى رمز
2String encodeURL(String url) تحويل URL إلى رمز، وإرجاع URL يحتوي على ID الجلسة
3boolean containsHeader(String name) إرجاع ما إذا كان عنوان الاستجابة المحدد موجودًا أم لا
4boolean isCommitted() إرجاع ما إذا كانت الاستجابة قد تم تقديمها إلى العميل أم لا
5void addCookie(Cookie cookie) إضافة كوكي معين إلى الاستجابة
6void addDateHeader(String name, long date) إضافة عنوان استجابة محدد بالاسم والقيمة من نوع تاريخ
7void addHeader(String name, String value) إضافة عنوان استجابة محدد بالاسم والقيمة
8void addIntHeader(String name, int value) إضافة عنوان استجابة محدد بالاسم و القيمة من نوع int
9void flushBuffer() كتابة محتويات أي سحابة إلى العميل
10void reset() إزالة أي بيانات من أي سحابة، بما في ذلك رموز الحالة وعناوين الاستجابة
11void resetBuffer() إزالة بيانات السحابة الأساسية، دون استبعاد عناوين الاستجابة ورموز الحالة
12void sendError(int sc) إرسال استجابة خطأ إلى العميل باستخدام رمز الحالة المحدد، ثم إزالة السحابة
13void sendError(int sc, String msg) إرسال إستجابة خطأ إلى العميل باستخدام رمز الحالة والمسار المحدد
14void sendRedirect(String location) إرسال إستجابة غير دائمة إلى العميل باستخدام URL محددة
15void setBufferSize(int size) إعداد حجم منطقة التخزين للجسم الإستجابة
16void setCharacterEncoding(String charset) تحديد مجموعة الرموز للإستجابة (مجموعة MIME للرموز)، مثل UTF-8
17void setContentLength(int len) تحديد طول المحتوى للإستجابة في servlets HTTP، يتم استخدام هذا الطريقة لتعيين معلومات رأس طول المحتوى HTTP
18void setContentType(String type) إعداد نوع المحتوى للإستجابة، إذا لم يتم تقديم الإستجابة بعد
19void setDateHeader(String name, long date) إعداد رأس الاسم والتاريخ باستخدام الاسم والتاريخ المحدد
20void setHeader(String name, String value) إعداد رأس الاسم والمحتوى باستخدام الاسم والمقدار المحدد
21void setIntHeader(String name, int value) تحديد قيمة نوع int إلى رأس الاسم
22void setLocale(Locale loc) إعداد بيئة اللغة للإستجابة، إذا لم يتم تقديم الإستجابة بعد
23void setStatus(int sc) إعداد رمز الحالة للإستجابة

مثال على برنامج رأس استجابة HTTP

في هذا المثال التالي يتم استخدام طريقة setIntHeader() ومتدخل setRefreshHeader() لتقديم ساعة رقمية:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>أساسيات التعليمات البرمجية (oldtoolbag.com)</title>
</head>
<body>
<h2>مثال على التحديث التلقائي</h2>
<%
   // إعداد التحديث التلقائي كل 5 ثوانٍ
   response.setIntHeader("Refresh", 5);
   // الحصول على الوقت الحالي
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour + ":" + minute + ":" + second + " " + am_pm;
   out.println("وقت الحالي: " + CT + "\n");
%>
</body>
</html>

قم بإنشاء ملف main.jsp، ثم قم بزيارة هذا الملف عبر المتصفح. سيتم عرض الوقت الحالي كل 5 ثوانٍ.

يمكنك أيضًا تعديل الشيفرة أعلاه بنفسك، جرب استخدام طرق أخرى، يمكنك الحصول على فهم أعمق.