إعلان
دورة تطوير التطبيقات باستخدام لغة JavaScript في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp. تعلم الآن
دورة تطوير واجهات المستخدم في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية. تعلم الآن
تطوير تطبيقات باستخدام لغة بايثون في هذه الدورة ستتعلم أساسيات البرمجة بلغة بايثون وصولاً إلى التعامل مع أشهر أطر العمل (Flask و Django) و ستتعلم كيف تبني متجر إلكتروني يمكن للمستخدمين البيع و الشراء من خلاله. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة PHP في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل. تعلم الآن
دورة تطوير تطبيقات الويب باستخدام لغة Ruby في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O. تعلم الآن
دورة علوم الحاسوب هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب. تعلم الآن

    Java الكلاس URL في جافا

    مقدمة

    الكلمة URL إختصار لـ Uniform Resource Locator و هي تعني كل المعلومات المذكورة في الرابط و التي تشير إلى مصدر محدد للبيانات.

    الكلاس URL مصمم بشكل عام لتجهيز روابط الملفات التي سنتعامل معها عن بعد عبر شبكة الإنترنت.


    بناؤه

    public final class URL
    extends Object
    implements Serializable 
    	

    المعلومات الأساسية في أي رابط هي: protocol://host:port/path/filename

    • protocol: نضع مكانها إسم البروتوكول المستخدم في عملية الإتصال مثل http أو https.
    • host: نضع مكانها إسم الموقع مثل harmash.com.
    • port: نضع مكانها بورت البرنامج ( أو البروتوكول ) المستخدم من قبل العميل, فمثلاً https يستخدم البورت 443.
    • path: نضع مكانها إسم المجلد الذي نريد الدخول إليه على السيرفر مثل مجلد home.
    • filename: نضع مكانها إسم الملف الذي نريد تصفحه أو تحميله إلخ.. مثل الملف index.php.

    إذا قمنا بتركيب جميع المعلومات المتفرقة الذتي ذكرناها, سنحصل على رابط واحد و هو رابط الدرس الأول في دروس جافا.

    كونستركتورات الكلاس URL

    بشكل عام عندما تنشئ كائن نوعه URL فأنت تنشئ كائن يمثل رابط.

    الجدول التالي يحتوي على بعض الكونستركتورات الموجودين في الكلاس URL.

    الكونستركتور مع تعريفه
    public URL(String url)
    throws MalformedURLException
    ينشئ كائن نوعه URL من خلال النص الذي نمرره له.
    النص الذي نقوم بإدخاله يمثل كافة المعلومات التي تشكل رابط.
    في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي الإستثناء MalformedURLException.
    public URL(String protocol, String host, int port, String file)
    throws MalformedURLException
    ينشئ كائن نوعه URL مع تحديد البروتوكول + إسم الموقع + رقم البورت + إسم الملف الذي سيتم الوصول إليه من خلاله.
    في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي الإستثناء MalformedURLException.
    public URL(String protocol, String host, String file)
    throws MalformedURLException
    ينشئ كائن نوعه URL مع تحديد البروتوكول + إسم الموقع + إسم الملف الذي سيتم الوصول إليه من خلاله.
    عندما لا تقوم بتحديد رقم البورت بنفسك, يقوم باستخدام رقم البورت الإفتراضي للبروتوكول المذكور.
    في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي الإستثناء MalformedURLException.

    دوال الكلاس URL

    الجدول التالي يحتوي على دوال الكلاس URL.

    الدالة مع تعريفها
    public String getHost() ترجع نص يمثل البروتوكول + إسم الموقع الموضوعين في كائن الـ URL.
    public String getAuthority() ترجع نص يمثل البروتوكول + إسم الموقع + رقم البورت (في حال كان مذكور في الرابط) الموضوعين في كائن الـ URL.
    public String getProtocol() ترجع إسم البروتوكول الذي يستخدمه كائن الـ URL للإتصال بالشبكة.
    public int getPort() ترجع رقم البورت الخاص بالبروتوكول الذي يستخدمه كائن الـ URL للإتصال بالشبكة.
    ترجع 1- في حال عدم تحديد رقم البورت.
    public int getDefaultPort() ترجع رقم البورت الإفتراضي للبروتوكول الذي يستخدمه كائن الـ URL للإتصال بالشبكة.
    ترجع 1- في حال عدم وجود رقم بورت إفتراصي.
    public String getPath() ترجع نص يمثل مسار الملف المراد الوصول إليه عن طريق كائن الـ URL.
    ترجع نص فارغ في حال كان مسار الملف غير محدد.
    public String getFile() ترجع نص يمثل مسار الملف المراد الوصول إليه عن طريق كائن الـ URL + الـ Query (في حال كان يوجد Query في الرابط).
    في حال عدم وجود Query في الرابط, تعطي نفس نتيجة الدالة getPath().
    ترجع نص فارغ في حال كان المسار غير محدد في الرابط.
    public String getQuery() ترجع جزئية الـ Query الموضوعة في كائن الـ URL.
    ترجع null في حال عدم وجود Query في كائن الـ URL.
    public String getRef() ترجع جزئية الـ Anchor في كائن الـ URL.
    Anchor تعني عنصر محدد موجود في صفحة الويب, و يقال له مرجع الصفحة.
    لتحديد الـ Anchor في كائن الـ URL, يجب وضعه بعد إسم الملف ( الذي شير إلى صفحة محددة في الويب ) و نضع الرمز # قبله.

    مثال
    هذا الرابط يفتح الصفحة الأولى في المجلد الذي يحتوي على دروس جافا و يضعك مباشرةً في الفقرة الثانية.
    https://harmash.com/java/java-overview.php#article_2
    public String getUserInfo() ترجع معلومات المستخدم الموضوعة في كائن الـ URL في حال كانت ظاهرة فيه.
    ترجع null في حال كان لا يوجد أي معلومة خاصة بالمستخدم في كائن الـ URL.

    أمثلة
    • http://info@hamash.com
      هذا رابط يحتوي على إيميل شخص من موقع harmash.com, إذاً الدالة هنا ترجع info.
    • http://info:1234@hamash.com
      هذا رابط يحتوي على إيميل و كلمة مرور شخص من موقع harmash.com, إذاً الدالة هنا ترجع info:123.

    ملاحظة: هذه مجرد أمثلة, كملة المرور يجب عدم إظهارها أبداً في الرابط حتى لا يتم سرقة الحساب.

    public String toExternalForm() ترجع محتوى كائن URL كنص واحد نوعه String.
    public String toString() ترجع محتوى كائن URL كنص واحد نوعه String.
    public boolean equals(Object obj) تقارن كائن الـ URL الذي قام باستدعائها مع الكائن الذي نمرره لها كـ Argument.
    إذاً تقارن الرابط الذي قام باستدعائها مع الرابط الذي نمرره لها كـ Argument.
    ترجع true في حال كانا متطابقين.
    public boolean sameFile(URL otherURL) تقارن كائن الـ URL الذي قام باستدعائها مع كائن الـ URL الذي نمرره لها كـ Argument.
    إذاً تقارن الرابط الذي قام باستدعائها مع الرابط الذي نمرره لها كـ Argument.
    ترجع true في حال كانا متطابقين.
    public InputStream openStream()
    throws IOException
    تنشئ إتصال مباشر بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ URL.
    في حال نجح الإتصال, ترجع كائن نوعه InputStream يتيح لك قراءة محتوى هذا الملف فقط.
    في حال فشل الإتصال يتم رمي إستثناء.
    public URLConnection openConnection()
    throws IOException
    تنشئ إتصال مباشر بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ URL.
    في حال نجح الإتصال, ترجع كائن نوعه URLConnection يتيح لك قراءة محتوى هذا الملف أو الكتابة فيه.
    في حال فشل الإتصال يتم رمي إستثناء.
    public URLConnection openConnection(Proxy proxy).
    throws IOException
    تنشئ إتصال بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ URL عن طريق Proxy Server.
    إذاً هنا يوجد طرف ثالث يلعب دور الوسيط بين البرنامج الذي يحاول الوصول للملف و الموقع الذي يملك الملف.
    • في حال نجح الإتصال, ترجع كائن نوعه URLConnection يتيح لك قراءة محتوى هذا الملف أو الكتابة فيه.
    • في حال كان البروتوكول المستخدم لا يعمل مع Proxy Server, يتم تجاهل Proxy Server و يتم وصل طرفي الإتصال مباشرةً مع بعضهما.
    • في حال وضعت الثابت Proxy.NO_PROXY كـ Argument, أيضاً يتم تجاهل Proxy Server و يتم وصل طرفي الإتصال مباشرةً مع بعضهما.
    • في حال حدث خطأ بسبب الملف يتم رمي الإستثناء IOException
    • في حال كان المستخدم لا يملك صلاحية لإستخدام الـ Proxy Server, يتم رمي الإستثناء SecurityException
    • في حال وضعنا null كـ Argument أو لم نحدد الـ Proxy Server بشكل صحيح, يتم رمي الإستثناء IllegalArgumentException

    أمثلة شاملة


    المثال الأول

    في المثال التالي قمنا بتعريف كائن نوعه URL يشير إلى رابط درس معين من موقعنا, ثم حاولنا عرض كافة المعلومات التي يمكن استخراجها من الرابط.

    ملاحظة: تعمدنا عرض جميع المعلومات التي يمكن استخراجها من الرابط سواء كانت موجودة أو غير موجودة, لاحظ أن أي معلومة حاولنا عرضها و كانت غير موجودة في الرابط ستوضع القيمة null أو 1- مكانها كما ذكرنا في الجدول السابق.

    Main.java
    import java.net.URL;		// URL هنا قمنا باستدعاء الكلاس
     
    public class Main {
     
        public static void main(String[] args) {
     
            // الآن سنحاول إجراء إتصال عبر الشبكة للوصول إلى ملف محدد
            try
            {
                // يشير إلى رابط الدرس الأول في دورة جافا و بالتحديد الفقرة الثانية في الدرس url إسمه URL هنا قمنا بتعريف كائن نوعه
                URL url = new URL("https://harmash.com:443/java/java-overview/index.php#article_2");
     
                // هنا قمنا بعرض المعلومات المتوفرة و الغير متوفرة في الرابط
                System.out.println("URL          : " + url.toString());
                System.out.println("Protocol     : " + url.getProtocol());
                System.out.println("Authority    : " + url.getAuthority());
                System.out.println("Host name    : " + url.getHost());
                System.out.println("File name    : " + url.getFile());
                System.out.println("Path         : " + url.getPath());
                System.out.println("Port         : " + url.getPort());
                System.out.println("Default Port : " + url.getDefaultPort());
                System.out.println("Reference    : " + url.getRef());
                System.out.println("Query        : " + url.getQuery());
                System.out.println("User Info    : " + url.getUserInfo());
            }
            catch( Exception e ) {
                e.printStackTrace();
            }
     
        }
     
    }
    		

    سنحصل على النتيجة التالية عند التشغيل.

    URL          : https://harmash.com:80/java/java-overview/index.php#article_2
    Protocol     : https
    Authority    : harmash.com:80
    Host name    : harmash.com
    File name    : /java/java-overview/index.php
    Path         : /java/java-overview/index.php
    Port         : 80
    Default Port : 443
    Reference    : article_2
    Query        : null
    User Info    : null
    		


    المثال الثاني

    في المثال التالي قمنا بتعريف كائن نوعه URL يشير إلى رابط درس معين من موقعنا.
    بعدها قمنا باستدعاء الدالة openStream() و التي ترجع كائن نوعه URLConnection يتيح لنا قراءة محتوى الملف الذي يشير إليه الرابط.
    كائن الـ URLConnection قمنا بتخزينه في كائن نوعه InputStream حتى نستطيع قراءة محتوى الملف في البرنامج.

    في الأخير قمنا بإنشاء حلقة while لقراءة محتوى الملف و تخزينه في متغير نوعه String إسمه data.

    ملاحظة: هنا ستتعلم طريقة قراءة محتوى أي ملف من موقع ما مهما كان نوعه سواء صورة, فيديو ملف نصي.

    Main.java
    import java.net.URL;               // URL هنا قمنا باستدعاء الكلاس
    import java.io.InputStream;        // InputStream هنا قمنا باستدعاء الكلاس
     
    public class Main {
     
        public static void main(String[] args) {
     
            // قمنا بتجهيز هذا المتغير من أجل تخزين محتوى الملف فيه
            String data = "";
     
            // الآن سنحاول إجراء إتصال عبر الشبكة للوصول إلى ملف محدد و قراءة محتواه
            try
            {
                // يشير إلى رابط الدرس الأول في دورة جافا url إسمه URL هنا قمنا بتعريف كائن نوعه
                URL url = new URL("https://harmash.com/java/java-overview/index");
     
                // is في الكائن URL هنا قمنا بتخزين الملف الذي يشير له الكائن
                InputStream is = url.openStream();
     
                // data و تخزنهم في المتغير is هنا قمنا بإنشاء حلقة تمر على جميع الأحرف الموجودة في الكائن
                int c;
                while ((c = is.read()) != -1)
                {
                    data += (char)c;
                }
     
                // هنا قمنا بإغلاق الإتصال مع الملف
                is.close();
     
                // هنا قمنا بعرض محتوى الملف
                System.out.println(data);
            }
            catch( Exception e ) {
                e.printStackTrace();
            }
     
        }
     
    }
    		

    عند تشغيل البرنامج سيتم عرض محتوى الصفحة harmash.com/java/java-networking/, أي كود الصفحة التي يشير لها الرابط.

    لاحظ أن الأحرف العربية لم تظهر بشكل صحيح, هذه المشكلة سببها عدم تحديد الترميز المستخدم في القراءة, و حللنا هذه المشكلة في المثال الثالث.

    <!DOCTYPE html>
    <html lang="ar">

    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="دورة شاملة في لغة جافا تبدأ معك من الصفر حتى الإحتراف">
        <meta name="keywords" content="">
       
        <!-- Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-66898688-2"></script>
        <script>
        window.dataLayer = window.dataLayer || [];
    ...


    المثال الثالث

    هنا سنعيد نفس المثال الثاني من حيث الفكرة و لكننا إستخدمنا هذه المرة الـ Buffer عند قراءة محتوى الملف لتسريع عملية القراءة و بالتالي لأداء أفضل.

    ملاحظة: هنا ستتعلم طريقة قراءة محتوى أي ملف نصي من موقع ما مع مراعاة أي نوع ترميز مستخدم في الملف.

    المثال الثالث

    Main.java
    import java.net.URL;                       // URL هنا قمنا باستدعاء الكلاس
    import java.io.BufferedReader;             // BufferedReader هنا قمنا باستدعاء الكلاس
    import java.io.InputStream;                // InputStream هنا قمنا باستدعاء الكلاس
    import java.io.InputStreamReader;          // InputStreamReader هنا قمنا باستدعاء الكلاس
     
    public class Main {
     
        public static void main(String[] args) {
     
            // قمنا بتجهيز هذا المتغير من أجل تخزين محتوى الملف فيه
            String data = "";
     
            // الآن سنحاول إجراء إتصال عبر الشبكة للوصول إلى ملف محدد و قراءة محتواه
            try
            {
                // يشير إلى رابط الدرس الأول في دورة جافا url إسمه URL هنا قمنا بتعريف كائن نوعه
                URL url = new URL("https://harmash.com/java/java-overview/index");
     
                // is في الكائن URL هنا قمنا بتخزين الملف الذي يشير له الكائن
                InputStream is = url.openStream();
     
                // Buffer لحل مشكلة الترميز و وضع محتوى الملف في الـ InputStreamReader إلى النوع is هنا قمنا بتحويل نوع الكائن
                InputStreamReader isr = new InputStreamReader(is, "UTF-8");
     
                // Buffer يتيح لنا قراءة محتوى الملف الموجود في الـ br الكائن
                BufferedReader br = new BufferedReader(isr);
     
                // data و تخزنهم في المتغير br هنا قمنا بإنشاء حلقة تمر على جميع الأحرف الموجودة في الكائن
                int c;
                while ((c = br.read()) != -1)
                {
                    data += (char)c;
                }
     
                // هنا قمنا بإغلاق الإتصال مع الملف
                is.close();
                isr.close();
                br.close();
     
                // هنا قمنا بعرض محتوى الملف
                System.out.println(data);
            }
            catch( Exception e ) {
                e.printStackTrace();
            }
     
        }
     
    }
    		

    عند تشغيل البرنامج سيتم عرض محتوى الصفحة harmash.com/java/java-networking/, أي كود الصفحة التي يشير لها الرابط.

    <!DOCTYPE html>
    <html lang="ar">

    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="دورة شاملة في لغة جافا تبدأ معك من الصفر حتى الإحتراف">
        <meta name="keywords" content="">
       
        <!-- Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-66898688-2"></script>
        <script>
        window.dataLayer = window.dataLayer || [];
    ...
    إعلان

    Eqla3Tech.com

    شروحات مكتوبة حول لغات البرمجة و تقنية المعلومات باللغة العربية مقدمة من إقلاع تك.

    لغة جافا لغة ++C قواعد البيانات نظام ويندوز نظام لينكس الشبكات تقنية المعلومات

    الدورات

    أدوات مساعدة

    الأقسام

    دورات
    مقالات أسئلة مشاريع كتب