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

استجابات HTTP للخادم Servlet

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

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
!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 (Multipurpose Internet Mail Extension) للملف الرد.
Expiresهذه المعلومات الرأسية تحدد وقت انتهاء صلاحية المحتوى، بعد ذلك لا يمكن حفظ المحتوى في المخزن.
Last-Modifiedهذه المعلومات الرأسية تشير إلى وقت آخر تعديل الملف. بعد ذلك، يمكن للعميل حفظ الملف في المخزن، واستخدامه في الطلبات اللاحقة من خلال If-Modified-Since تقدم هذه المعلومات الرأسية تاريخًا.
Locationيجب أن تحتوي هذه المعلومات الرأسية على جميع الردود التي تحتوي على رمز حالة. في غضون 300 ثانية، ستُخبر المتصفح عن عنوان الملف. سيقوم المتصفح تلقائيًا بالاتصال بهذا الموقع واستنساخ الملف.
Refreshهذه المعلومات الرأسية تحدد كيفية طلب المتصفح للصفحة المُحدثة بشكل سريع. يمكنك تحديد عدد الثواني لتحديث الصفحة.
Retry-Afterهذه المعلومات الرأسية يمكن استخدامها مع الردود 503 (Service Unavailable - غير متاح) لتخبر العملاء متى يمكن تكرار طلبهم.
Set-Cookieهذه المعلومات الرأسية تُحدد الكوكي المرتبط بالموقع.

الطرق التي يتم من خلالها تعيين رؤوس الاستجابة HTTP

يمكن استخدام الطرق التالية لتعيين رؤوس الاستجابة HTTP في برنامج Servlet. هذه الطرق من خلال HttpServletResponse متاح للاستخدام.

الترقيمالطريقة & الوصف
1String encodeRedirectURL(String url)
ت编码 عنوان URL المحدد الذي يتم استخدامه في طريقة sendRedirect، أو إذا لم تكن الت编码 ضرورية، فيتم إرجاع عنوان URL غير المعدل.
2String encodeURL(String url)
ت编码 عنوان URL المحدد الذي يحتوي على ID جلسة، أو إذا لم تكن الت编码 ضرورية، فيتم إرجاع عنوان URL غير المعدل.
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)
إضافة رأس استجابة يحتوي على اسم معين وعدد صحيح.
9void flushBuffer()
إجبار أي محتويات موجودة في الحافظة على الكتابة إلى العملاء.
10void reset()
تنظيف أي بيانات موجودة في الحافظة، بما في ذلك الرقم والحقول.
11void resetBuffer()
تنظيف محتويات الحافظة الأساسية في الاستجابة، دون تنظيف الرقم والحقول.
12void sendError(int sc)
إرسال استجابة خطأ باستخدام الرقم المحدد للحالة إلى العملاء، ويتم تنظيف الحافظة.
13void sendError(int sc, String msg)
استخدام الحالة المحددة لإرسال استجابة خطأ إلى العملاء.
14void sendRedirect(String location)
استخدام عنوان الوجه المحدد لإرسال استجابة إعادة توجيه مؤقتة إلى العملاء.
15void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。
16void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
17void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。
18void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。
19void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。
20void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。
21void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。
22void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。
23void setStatus(int sc)
为该响应设置状态码。

HTTP Header 响应示例

您已经在前面的示例中看到 setContentType() 方法,下面的示例也使用了同样的方法,此外,我们会用 setIntHeader() 方法来设置 Refresh 头。

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Refresh")
//توسيع HttpServlet
public class Refresh extends HttpServlet {
    //طريقة معالجة طلب GET
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          //ضبط وقت تحميل التصفح التلقائي إلى 5 ثوان
          response.setIntHeader("Refresh", 5);
          //ضبط نوع المحتوى للإجابة
          response.setContentType("text/html;charset=UTF-8");
         
          //الحصول على تقويم باستخدام منطقة الوقت واللغة الافتراضية  
          Calendar cale = Calendar.getInstance();  
          //تحويل نوع Calendar إلى نوع Date  
          Date tasktime = cale.getTime();  
          //ضبط تنسيق إخراج التاريخ  
          SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
          //إخراج تنسيق  
          String nowTime = df.format(tasktime);
          PrintWriter out = response.getWriter();
          String title = "Header إعادة تحميل تلقائي - مثال شبكة تعليم أساسي";
          String docType =
          "<!DOCTYPE html>\n"
          out.println(docType +
            "<html>\n"
            "<head><title>" + title + "</title></head>\n"
            "<body bgcolor=\"#f0f0f0\">\n"
            "<h1 align=\"center\">" + title + "</h1>\n"
            "<p>الوقت الحالي هو: " + nowTime + "</p>\n"
      }
      // طريقة معالجة طلب POST
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

مثال الاختبار أعلاه موجود في مشروع TomcatTest، ويكون تكوين web.xml المناسب له كالتالي:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet>  
     <!-- اسم الكلاس -->  
    <servlet-name>Refresh</servlet-name>  
    <!-- الملف الموجود فيه -->  
    <servlet-class>com.w3codebox.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Refresh</servlet-name>  
    <!-- موقع الويب المطلوب زيارتة -->  
    <url-pattern>/TomcatTest/Refresh</url-pattern>  
    </servlet-mapping>  
</web-app>

الآن، قم بتشغيل Servlet أعلاه وسيتم عرض الوقت الحالي كل 5 ثوانٍ. بعد تشغيل Servlet ومجرد الانتظار قليلاً، يمكنك رؤية النتيجة التالية: