Javaالكلاس URL
في جافا
- مقدمة
- كونستركتورات الكلاس
URL
- دوال الكلاس
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
.
الكونستركتور مع تعريفه | |
---|---|
1 | public URL(String url) throws MalformedURLException
ينشئ كائن نوعه URL من خلال النص الذي نمرره له.النص الذي نقوم بإدخاله يمثل كافة المعلومات التي تشكل رابط. في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي الإستثناء MalformedURLException. |
2 | public URL(String protocol, String host, int port, String file) throws MalformedURLException
ينشئ كائن نوعه URL مع تحديد البروتوكول + إسم الموقع + رقم البورت + إسم الملف الذي سيتم الوصول إليه من خلاله.في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي الإستثناء MalformedURLException. |
3 | public URL(String protocol, String host, String file) throws MalformedURLException
ينشئ كائن نوعه URL مع تحديد البروتوكول + إسم الموقع + إسم الملف الذي سيتم الوصول إليه من خلاله.عندما لا تقوم بتحديد رقم البورت بنفسك, يقوم باستخدام رقم البورت الإفتراضي للبروتوكول المذكور. في حال وجود أي خطأ في المعلومات المدخلة فيه يتم رمي الإستثناء MalformedURLException. |
دوال الكلاس URL
الجدول التالي يحتوي على دوال الكلاس URL
.
الدالة مع تعريفها | |
---|---|
1 | public String getHost()
ترجع نص يمثل البروتوكول + إسم الموقع الموضوعين في كائن الـ URL . |
2 | public String getAuthority()
ترجع نص يمثل البروتوكول + إسم الموقع + رقم البورت (في حال كان مذكور في الرابط) الموضوعين في كائن الـ URL . |
3 | public String getProtocol()
ترجع إسم البروتوكول الذي يستخدمه كائن الـ URL للإتصال بالشبكة. |
4 | public int getPort()
ترجع رقم البورت الخاص بالبروتوكول الذي يستخدمه كائن الـ URL للإتصال بالشبكة.ترجع 1- في حال عدم تحديد رقم البورت. |
5 | public int getDefaultPort()
ترجع رقم البورت الإفتراضي للبروتوكول الذي يستخدمه كائن الـ URL للإتصال بالشبكة.ترجع 1- في حال عدم وجود رقم بورت إفتراصي. |
6 | public String getPath()
ترجع نص يمثل مسار الملف المراد الوصول إليه عن طريق كائن الـ URL .ترجع نص فارغ في حال كان مسار الملف غير محدد. |
7 | public String getFile()
ترجع نص يمثل مسار الملف المراد الوصول إليه عن طريق كائن الـ URL + الـ Query (في حال كان يوجد Query في الرابط).في حال عدم وجود Query في الرابط, تعطي نفس نتيجة الدالة getPath() .ترجع نص فارغ في حال كان المسار غير محدد في الرابط. |
8 | public String getQuery()
ترجع جزئية الـ Query الموضوعة في كائن الـ URL .ترجع null في حال عدم وجود Query في كائن الـ URL . |
9 | public String getRef()
ترجع جزئية الـ Anchor في كائن الـ URL .Anchor تعني عنصر محدد موجود في صفحة الويب, و يقال له مرجع الصفحة. لتحديد الـ Anchor في كائن الـ URL , يجب وضعه بعد إسم الملف ( الذي شير إلى صفحة محددة في الويب ) و نضع الرمز # قبله.مثال هذا الرابط يفتح الصفحة الأولى في المجلد الذي يحتوي على دروس جافا و يضعك مباشرةً في الفقرة الثانية. https://harmash.com/tutorials/java/overview#article_2 |
10 | public String getUserInfo()
ترجع معلومات المستخدم الموضوعة في كائن الـ URL في حال كانت ظاهرة فيه.ترجع null في حال كان لا يوجد أي معلومة خاصة بالمستخدم في كائن الـ URL .أمثلة
ملاحظة: هذه مجرد أمثلة, كملة المرور يجب عدم إظهارها أبداً في الرابط حتى لا يتم سرقة الحساب. |
11 | public String toExternalForm()
ترجع محتوى كائن URL كنص واحد نوعه String . |
12 | public String toString()
ترجع محتوى كائن URL كنص واحد نوعه String . |
13 | public boolean equals(Object obj)
تقارن كائن الـ URL الذي قام باستدعائها مع الكائن الذي نمرره لها كـ Argument.إذاً تقارن الرابط الذي قام باستدعائها مع الرابط الذي نمرره لها كـ Argument. ترجع true في حال كانا متطابقين. |
14 | public boolean sameFile(URL otherURL)
تقارن كائن الـ URL الذي قام باستدعائها مع كائن الـ URL الذي نمرره لها كـ Argument.إذاً تقارن الرابط الذي قام باستدعائها مع الرابط الذي نمرره لها كـ Argument. ترجع true في حال كانا متطابقين. |
15 | public InputStream openStream()
throws IOException
تنشئ إتصال مباشر بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ URL .في حال نجح الإتصال, ترجع كائن نوعه InputStream يتيح لك قراءة محتوى هذا الملف فقط.في حال فشل الإتصال يتم رمي إستثناء. |
16 | public URLConnection openConnection() throws IOException
تنشئ إتصال مباشر بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ URL .في حال نجح الإتصال, ترجع كائن نوعه URLConnection يتيح لك قراءة محتوى هذا الملف أو الكتابة فيه.في حال فشل الإتصال يتم رمي إستثناء. |
17 | public URLConnection openConnection(Proxy proxy)throws IOException
تنشئ إتصال بين البرنامج و الملف الموجود في الموقع الذي يشير له كائن الـ URL عن طريق Proxy Server.إذاً هنا يوجد طرف ثالث يلعب دور الوسيط بين البرنامج الذي يحاول الوصول للملف و الموقع الذي يملك الملف.
|
أمثلة شاملة
المثال الأول
في المثال التالي قمنا بتعريف كائن نوعه URL
يشير إلى رابط درس معين من موقعنا, ثم حاولنا عرض كافة المعلومات التي يمكن استخراجها من الرابط.
ملاحظة: تعمدنا عرض جميع المعلومات التي يمكن استخراجها من الرابط سواء كانت موجودة أو غير موجودة, لاحظ أن أي معلومة حاولنا عرضها و كانت غير موجودة في الرابط ستوضع القيمة null
أو 1- مكانها كما ذكرنا في الجدول السابق.
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/tutorials/java/overview#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:443/tutorials/java/overview#article_2 Protocol: https Authority: harmash.com:443 Host name: harmash.com File name: /tutorials/java/overview Path: /tutorials/java/overview Port: 443 Default Port: 443 Reference: article_2 Query: null User Info: null
المثال الثاني
في المثال التالي قمنا بتعريف كائن نوعه URL
يشير إلى رابط درس معين من موقعنا.
بعدها قمنا باستدعاء الدالة openStream()
و التي ترجع كائن نوعه URLConnection
يتيح لنا قراءة محتوى الملف الذي يشير إليه الرابط.
كائن الـ URLConnection
قمنا بتخزينه في كائن نوعه InputStream
حتى نستطيع قراءة محتوى الملف في البرنامج.
في الأخير قمنا بإنشاء حلقة while
لقراءة محتوى الملف و تخزينه في متغير نوعه String
إسمه data
.
ملاحظة: هنا ستتعلم طريقة قراءة محتوى أي ملف من موقع ما مهما كان نوعه سواء صورة, فيديو ملف نصي.
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/tutorials/java/overview"); // 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/tutorials/java/overview
, أي كود الصفحة التي يشير لها الرابط.
لاحظ أن الأحرف العربية لم تظهر بشكل صحيح, هذه المشكلة سببها عدم تحديد الترميز المستخدم في القراءة, و حللنا هذه المشكلة في المثال الثالث.
<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 عند قراءة محتوى الملف لتسريع عملية القراءة و بالتالي لأداء أفضل.
ملاحظة: هنا ستتعلم طريقة قراءة محتوى أي ملف نصي من موقع ما مع مراعاة أي نوع ترميز مستخدم في الملف.
المثال الثالث
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/tutorials/java/overview"); // 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/tutorials/java/networking
, أي كود الصفحة التي يشير لها الرابط.
<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 || [];
...