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

طلبات HTTP العملاء Servlet

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

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

معلومات الرأسوصف
Acceptهذه المعلومات الرأسية تحدد النوع MIME الذي يمكن معالجته من قبل المتصفح أو العميل الآخر. القيمة image/png أو image/jpeg هما القيمتين الشائعتين.
Accept-Charsetهذه المعلومات الرأسية تحدد مجموعة الحروف التي يمكن استخدامها لعرض المعلومات. على سبيل المثال، ISO-8859-1.
Accept-Encodingهذه المعلومات الرأسية تحدد النوع الذي يعرفه المتصفح كيفية معالجته. القيمة gzip أو compress هما القيمتين الشائعتين.
Accept-Languageتحدد هذه المعلومات الرأسية اللغة المفضلة للعميل، حيث سيقوم Servlet بإنتاج نتائج بلغات متعددة. على سبيل المثال، en، en-us، ru، إلخ.
Authorizationتستخدم هذه المعلومات الرأسية لتحديد هوية العميل عند زيارة صفحة موقع مائية.
Connectionهذه المعلومات الرأسية تشير إلى ما إذا كان يمكن للعميل التعامل مع اتصال HTTP المستمر. يسمح الاتصال المستمر للعميل أو متصفح آخر بالوصول إلى عدة ملفات من خلال طلب واحد فقط. القيمة Keep-Alive يعني أن تم استخدام الاتصال المستمر.
Content-Lengthهذه المعلومات الرأسية تنطبق فقط على طلبات POST، وتعطي حجم بيانات POST (بأوكتات).
Cookieهذه المعلومات الرأسية تعيد الكوكي الذي تم إرساله إلى المتصفح إلى الخادم.
Hostهذه المعلومات الرأسية تحدد اسم النطاق ومرفق المنفذ في URL الأصلي.
If-Modified-Sinceهذه المعلومات الرأسية تعني أن المستخدم يريد صفحة الموقع فقط إذا تم تغييرها بعد تاريخ معين. إذا لم يكن هناك نتائج جديدة يمكن استخدامها، سيقوم الخادم بإرسال رمز 304، مما يعني Not Modified معلومات الرأس
If-Unmodified-Sinceهذه المعلومات الرأسية هي العكس من If-Modified-Since، وتحدد أن العمل سيتم بنجاح فقط عندما يكون المستند قبل تاريخ معين.
Refererهذه المعلومات الرأسية تشير إلى عنوان URL للصفحة الويب الموجهة. على سبيل المثال، إذا كنت في صفحة 1، وأنت تنقر على رابط إلى صفحة 2، عند طلب المتصفح لصفحة 2، عنوان URL لصفحة 1 سيتم تضمينه في معلومات الرأس Referer.
User-Agentهذه المعلومات التعريفية تتعرف على المتصفح أو العميل الآخر الذي يرسل الطلب، ويمكن رد محتوى مختلف إلى أنواع المتصفحات المختلفة.

طرق قراءة الرؤوس HTTP

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

الترتيبالطريقة & الوصف
1Cookie[] getCookies()
يعود مجموعة تحتوي على جميع الكوكيز المرسلة مع الطلب.
2Enumeration getAttributeNames()
يعود مجموعة تحتوي على أسماء السمات المتاحة للطلب.
3Enumeration getHeaderNames()
يعود مجموعة تحتوي على أسماء جميع الرؤوس الموجودة في الطلب.
4Enumeration getParameterNames()
يعود مجموعة من String تحتوي على أسماء المعلمات الموجودة في الطلب.
5HttpSession getSession()
يعود HttpSession الحالية المرتبطة بالطلب، أو إذا لم يكن هناك جلسة، فإنه يخلق واحدة.
6HttpSession getSession(boolean create)
يعود HttpSession الحالي المرتبط بالطلب، أو إذا لم يكن هناك جلسة حالية، فإنه يعود جلسة جديدة إذا كان التكوين صحيحًا.
7Locale getLocale()
يستخدم Accept-Language للعثور على الإعدادات الإقليمية المفضلة للعميل.
8Object getAttribute(String name)
يعود القيمة المحددة للسمة المسمى، وإذا لم يكن هناك سمة معينة، فإنه يعود null.
9ServletInputStream getInputStream()
يستخدم ServletInputStream للبحث عن جسم الطلب كبيانات ثنائية.
10String getAuthType()
يستخدم الاسم المحدد لحماية هوية Servlet، مثل "BASIC" أو "SSL"، وإذا لم يكن JSP محميًا، فإنه يعود null.
11String getCharacterEncoding()
يعود بنسق حروف لتكون اسم الترميز الذي يستخدمه الجسم المطلوب.
12String getContentType()
يعود بنسق حروف لتكون نوع MIME للجسم المطلوب.
13String getContextPath()
يعود بنسق حروف لتكون جزء URI للطلب الذي يشير إلى السياق.
14String getHeader(String name)
يعود بنسق حروف لتكون قيمة الرأس المطلوبة.
15String getMethod()
يعود بنسق حروف لتكون اسم طريقة الـ HTTP المطلوبة، مثل GET أو POST أو PUT.
16String getParameter(String name)
يعود بنسق حروف لتكون قيمة المعلمة المطلوبة، أو إذا لم تكن المعلمة موجودة تعود null.
17String getPathInfo()
عندما يتم إرسال الطلب، يعود بأي معلومات إضافية تتعلق بالـ URL التي يرسلها العميل.
18String getProtocol()
يعود بالنوع والنسخة للبروتوكول الذي يتم استخدامه في الطلب.
19String getQueryString()
يعود بالسلسلة الناتجة من الأسئلة في URL التي تأتي بعد المسار.
20String getRemoteAddr()
يعود بالعنوان الآلي للشبكة (IP) للعميل الذي أرسل الطلب.
21String getRemoteHost()
يعود بالاسم المطلق للعميل الذي أرسل الطلب.
22String getRemoteUser()
إذا كان المستخدم قد تم التحقق منه، يعود بـ اسم المستخدم الذي أرسل الطلب، أو إذا لم يتم التحقق من المستخدم يعود null.
23String getRequestURI()
من اسم البروتوكول حتى السطر الأول من الطلب HTTP، يعود بجزء من URL للطلب.
24String getRequestedSessionId()
يعود بـ ID للجلسة المحددة من قبل العميل.
25String getServletPath()
يعود بجزء من URL للطلب الذي يتم تنفيذه في JSP.
26String[] getParameterValues(String name)
يعود بنسق حروف لتتكون من قيم جميع المعلمات المطلوبة، إذا لم تكن المعلمة موجودة تعود null.
27boolean isSecure()
يعود ببولياني يشير إلى ما إذا كان الطلب يستخدم قناة آمنة مثل HTTPS.
28int getContentLength()
للعودة إلى طول جسم الطلب بالحروف، ويعطي تدفق الدخول، أو إذا كان طوله غير معروف فيرجع إلى -1.
29int getIntHeader(String name)
للعودة إلى قيمة الرأس المحددة كقيمة عددية صحيحة.
30int getServerPort()
للعودة إلى منفذ المخدم الذي استلم هذا الطلب.
31int getParameterMap()
للفصل بين المعلمات إلى نوع Map.

مثال طلب رأس HTTP

في المثال التالي، يتم استخدام getHeaderNames() لقراءة معلومات رأس HTTP. يرجع هذا الطريقة إلى سلسلة تحتوي على معلومات الرأس المتعلقة بالطلب HTTP الحالي.

بمجرد أن نحصل على سلسلة، يمكننا التدوير عبر السلسلة بشكل طبيعي، باستخدام hasMoreElements() لتحديد متى يتوقف، باستخدام nextElement() للحصول على اسم كل متغير.

// استيراد المكتبات الضرورية من java
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
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("/DisplayHeader")
// توسيع كلاس HttpServlet
public class DisplayHeader extends HttpServlet {
    // معالجة طلبات طريقة GET
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        // تعيين نوع المحتوى الإجابي
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String title = "HTTP Header Request Example - Basic Tutorial Website Example";
        String docType =
            "<!DOCTYPE html> \n"
            out.println(docType +
            "<html>\n"+
            "<head><meta charset=\"utf-8\"><title>" + title + "</title></head>\n"+
            "<body bgcolor=\"#f0f0f0\">\n"+
            "<h1 align=\"center\">" + title + "</h1>\n"+
            "<table width=\"100%\" border=\"1\" align=\"center\">\n"+
            "<tr bgcolor=\"#949494\">\n"+
            "<th>اسم الرأس</th><th>قيمة الرأس</th>\n"+
            "</tr>\n");
        Enumeration headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
            String paramName = (String)headerNames.nextElement();
            out.print("<tr><td>" + paramName + "</td>\n");
            String paramValue = request.getHeader(paramName);
            out.println("<td> " + paramValue + "</td></tr>\n");
        }
        out.println("</table>\n</body></html>");
    }
    // معالجة طلب طريقة 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>DisplayHeader</servlet-name>  
    <!-- المجموعة الموجودة فيها -->  
    <servlet-class>com.w3codebox.test.DisplayHeader</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- عنوان الوجهة -->  
    <url-pattern>/TomcatTest/DisplayHeader</url-pattern>  
  </servlet-mapping>  
</web-app>

الآن، دعونا نطلق Servlet أعلاه، ونستخدم http://localhost:8080/TomcatTest/DisplayHeader سيكون هناك النتيجة التالية: