خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: مشاريع مفتوحة المصدر Java App
صفحة 1 من اصل 1 • شاطر
خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
بسم الله الرحمن الرحيم
اهلا وسهلا بكم أخوانى الكرام ....منذ فترة سأل الزميل reno.vinoos عن كيفية فتح صفحة ويب من الجوال وقد قامت الاخت زهراء مشكورة برفع مثال مفتوح المصدر على المنتدى ...لكن ربما يكون المثال قد أحتوى على كثر من الاكواد و الشفرات التى قد يصعب علينا فهمها ....حاولت بقدر الامكان أن اشرح طريقة الاتصال بالويب على الرابط التالى لكن الشرح كان يخلوا من كيفية دعم ملفات html ....اليوم ان شاء الله تعالى سنتعلم سويا كيفية فتح موقع بتنسيق html وذلك من خلال المكتبة lwuit و ذلك على النحو التالى :
1_ قم بإنشاء مشروع جديد مع إزالة الخيار Create Hello MIDlet
2_ قم بتحميل المكتبة lwuit من المرفقات ووضعها فى مجلد المشروع ثم قم بادراج المكتبة الى المشروع و ذلك عن طريق تحديد ايقونة Resources فى القائمة الجانبية للمشروع ومن القائمة التى ستظهر أختر الامر Add jar سيتم فتح لك مربع حوارى للتنقل بين الملفات على جهازك أختر منها أختر المكتبة lwuit ثم ok لتجد المكتبة قد اضيفتت للمشروعك .
3_ نقوم بإنشاء فئة MIDlet وذلك من خلال تحديد ايقونة التطبيق ثم كليك يمين ومن القائمة التى ستظهر أختر الامر New ثم الامر MIDlet
سيظهر لك مربع حوارى يطالبك ببعض المعلومات كأسم الملف MIDlet و اسم الكلاس الخاص ب MIDlet ويمكنك تغير البيانات الافتراضية أو تركها كما هى إن شئت ثم قم بالنقر على زر الامر (finsh ) ليتم فتح صفحة كتابة الشفرة كما فى الصور التالية :
4_ نقوم بإستيراد المكتبات التالية :
أ_ استيراد الكائنات التابعة للمكتبة lwuit
- الكود:
import com.sun.lwuit.Display;
import com.sun.lwuit.html.DocumentInfo;
import com.sun.lwuit.html.DocumentRequestHandler;
import com.sun.lwuit.html.HTMLComponent;
import com.sun.lwuit.layouts.GridLayout;
import com.sun.lwuit.Form;
ويمكن ملاحظة أن تلك المكتبة ليس فقط لدعم ملفات html بل يمكنك استخدامها لانشاء نافذة وقوائم ....الخ وسيتم شرح المكتبة فى درس أخر ان شاء الله تعالى :
ب_ استيراد الكائنات التابعة للمكتبة java.IO
- الكود:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
ج _ استيراد الكائنات التابعة للمكتبة microedition.io
- الكود:
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
5_ لكى نستطيع قراءة ملفات HTML من أي مصدر محلي أو بعيد من خلال المكتبة lwuit يجب تنفيذ واجهة DocumentRequestHandler لذلك سنقوم بانشاء فئة وليكن بأسم HttpRequestHandler تتضمن تلك الوجهة وذلك باستخدام الكود التالى :
- الكود:
class HttpRequestHandler implements DocumentRequestHandler {
ويجب ملاحظة أن برنامجنا يحتوى على عدة فئات مجتمعة فى ملف واحد و بالتالى فإن الفئة الرئسية التى تحتوى على الدالة main تبدأ بمحدد الوصول public class أى أن الفئة عامه ...وتبدأ جميع الفئات الاخرى بالكلمة المحجوزة class فقط كما هو ظاهر أعلاه
وايضا للإعلان عن الفئة التي تطبق واجهة كما فى مثالنا الحالى يجب تتضمين شرط تنفذ في تعريف فئة أى استخدام الامر implements كما هو ظاهر اعلاه
6_بداخل الفئة السابقة HttpRequestHandler سنقوم بأنشاء طريقة وليكن بأسم getDomainForLinks لها المعامل (URL)والهدف من ذلك الطريقة هو التأكد من صلاحية الرابط المدخل و الحاق بروتوكل الانترنت https أو http للرابط اذ لم يقم المستخدم بادخالة و ذلك على النحو التالى :
- الكود:
static String getDomainForLinks(String url) {
String domain = null;
if (url.startsWith("file:")) {
return "localhost"; // Just a common name to store local files under
}
int index = -1;
if (url.startsWith("http://")) {
index = 7;
} else if (url.startsWith("https://")) {
index = 8;
}
if (index != -1) {
domain = url.substring(index);
index = domain.indexOf('/');
if (index != -1) {
domain = domain.substring(0, index);
}
}
return domain;
}
7_ بداخل تلك الفئة ايضا سنقوم بتنفيذ واجهة DocumentRequestHandler وذلك من خلال الاسلوب التالى:
- الكود:
public InputStream resourceRequested(DocumentInfo docInfo) {
8_ بداخل الواجهة السابقة سنقوم بكتابة الكود التالى :
- الكود:
InputStream is = null;
String url = docInfo.getUrl();
String linkDomain = getDomainForLinks(url);
String params = docInfo.getParams();
if ((!docInfo.isPostRequest()) && (params != null) && (!params.equals(""))) {
url = url + "?" + params;
}
try {
HttpConnection hc = (HttpConnection) Connector.open(url);
String encoding = null;
if (docInfo.isPostRequest()) {
encoding = "application/x-www-form-urlencoded";
}
if (!docInfo.getEncoding().equals(DocumentInfo.ENCODING_ISO)) {
encoding = docInfo.getEncoding();
}
String domain = linkDomain;
domain = domain.substring(domain.indexOf('.'));
if (encoding != null) {
hc.setRequestProperty("Content-Type", encoding);
}
if (docInfo.isPostRequest()) {
hc.setRequestMethod(HttpConnection.POST);
byte[] paramBuf = params.getBytes();
hc.setRequestProperty("Content-Length", "" + paramBuf.length);
OutputStream os = hc.openOutputStream();
os.write(paramBuf);
os.close();
}
String contentTypeStr = hc.getHeaderField("content-type");
if (contentTypeStr != null) {
contentTypeStr = contentTypeStr.toLowerCase();
if (docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_HTML) { //We perform these checks only for text (i.e.
main page), for images/css we just send what the server sends and "hope
for the best"
if (contentTypeStr != null) {
if ((contentTypeStr.startsWith("text/")) ||
(contentTypeStr.startsWith("application/xhtml")) ||
(contentTypeStr.startsWith("application/vnd.wap"))) {
docInfo.setExpectedContentType(DocumentInfo.TYPE_HTML);
} else if (contentTypeStr.startsWith("image/")) {
docInfo.setExpectedContentType(DocumentInfo.TYPE_IMAGE);
hc.close();
} else {
hc.close();
}
}
}
if ((docInfo.getExpectedContentType() == DocumentInfo.TYPE_HTML) ||
(docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_CSS)) { // Charset is relevant for HTML and CSS only
int charsetIndex = contentTypeStr.indexOf("charset=");
if (charsetIndex != -1) {
String charset = contentTypeStr.substring(charsetIndex + 8);
docInfo.setEncoding(charset.trim());
}
}
}
int response = hc.getResponseCode();
if (response / 100 == 3) { // 30x code is redirect
String newURL = hc.getHeaderField("Location");
if (newURL != null) {
hc.close();
docInfo.setUrl(newURL);
return resourceRequested(docInfo);
}
}
is = hc.openInputStream();
} catch (IOException e) {
System.out.println("HttpRequestHandler->IOException: " + e.getMessage());
} catch (IllegalArgumentException e) { // For malformed URL
System.out.println("HttpRequestHandler->IllegalArgumentException: " + e.getMessage());
}
return is;
}
نستخدم الكود السابق للحصول على InputStream من الوثيقة المحدد من خلال رابط الموقع...وهى الملفات HTML ...حيث يتم تخزين المعلومات الوثيقة المطلوبة في كائن DocumentInfo، والتي يتم ملؤها تلقائيا باستخدام HTMLComponent. القيم DocumentInfo يمكن استخدامها لتحديد مسار المستند أو اسم الملف ....الخ
ولمعرفة كيفية قراءة الملفات من خلال المكتبة JAVA.IO يمكنك زيارة الدرس الموجود على الرابط هذا
9_ داخل الطريقة void startApp نقطة البداية للتطبيق نقوم بكتابة الكود التالى :
- الكود:
public void startApp() {
Display.init(this);
HttpRequestHandler handler = new HttpRequestHandler();
HTMLComponent htmlC = new HTMLComponent(handler);
htmlC.setPage("http://google.com");
Form form = new Form("MyTitle");
form.setLayout(new GridLayout(1, 1));
form.addComponent(htmlC);
form.show();
}
_ فى السطر الثانى من الكود قمنا باستخدام الكائن Display و الذى يقوم بتهئة المورد MIDlet فى بداية التطبيق
_ السطر الثالث اشتقاق كائن جديد من HttpRequestHandler ....وايضا السطر الرابع الاعلان عن الكائن HTMLComponent و اشتقاق كائن جديد منه مع تمرير الكائن المشتق من HttpRequestHandler الية ....السطر الخامس أستخدمنا الطريقة setPage التابعة للكائن HTMLComponent و التى تقبل نص تحتوي على URL الخاص الموقع المراد فتحة ...
السطر السادس قمنا بإنشاء نافذة باستخدام المكتبة lwuit.Form وذلك الاحتواء صفحة HTML باستخدام الطريقة addComponent
و اليكم الكود بالكامل لفتح صفحة ويب للجولات :
- الكود:
import javax.microedition.midlet.*;
import com.sun.lwuit.Display;
import com.sun.lwuit.html.DocumentInfo;
import com.sun.lwuit.html.DocumentRequestHandler;
import com.sun.lwuit.html.HTMLComponent;
import com.sun.lwuit.layouts.GridLayout;
import com.sun.lwuit.Form;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
class HttpRequestHandler implements DocumentRequestHandler {
static String getDomainForLinks(String url) {
String domain = null;
if (url.startsWith("file:")) {
return "localhost"; // Just a common name to store local files under
}
int index = -1;
if (url.startsWith("http://")) {
index = 7;
} else if (url.startsWith("https://")) {
index = 8;
}
if (index != -1) {
domain = url.substring(index);
index = domain.indexOf('/');
if (index != -1) {
domain = domain.substring(0, index);
}
}
return domain;
}
public InputStream resourceRequested(DocumentInfo docInfo) {
InputStream is = null;
String url = docInfo.getUrl();
String linkDomain = getDomainForLinks(url);
String params = docInfo.getParams();
if ((!docInfo.isPostRequest()) && (params != null) && (!params.equals(""))) {
url = url + "?" + params;
}
try {
HttpConnection hc = (HttpConnection) Connector.open(url);
String encoding = null;
if (docInfo.isPostRequest()) {
encoding = "application/x-www-form-urlencoded";
}
if (!docInfo.getEncoding().equals(DocumentInfo.ENCODING_ISO)) {
encoding = docInfo.getEncoding();
}
String domain = linkDomain;
domain = domain.substring(domain.indexOf('.'));
if (encoding != null) {
hc.setRequestProperty("Content-Type", encoding);
}
if (docInfo.isPostRequest()) {
hc.setRequestMethod(HttpConnection.POST);
byte[] paramBuf = params.getBytes();
hc.setRequestProperty("Content-Length", "" + paramBuf.length);
OutputStream os = hc.openOutputStream();
os.write(paramBuf);
os.close();
}
String contentTypeStr = hc.getHeaderField("content-type");
if (contentTypeStr != null) {
contentTypeStr = contentTypeStr.toLowerCase();
if (docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_HTML) { //We perform these checks only for text (i.e.
main page), for images/css we just send what the server sends and "hope
for the best"
if (contentTypeStr != null) {
if ((contentTypeStr.startsWith("text/")) ||
(contentTypeStr.startsWith("application/xhtml")) ||
(contentTypeStr.startsWith("application/vnd.wap"))) {
docInfo.setExpectedContentType(DocumentInfo.TYPE_HTML);
} else if (contentTypeStr.startsWith("image/")) {
docInfo.setExpectedContentType(DocumentInfo.TYPE_IMAGE);
hc.close();
} else {
hc.close();
}
}
}
if ((docInfo.getExpectedContentType() == DocumentInfo.TYPE_HTML) ||
(docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_CSS)) { // Charset is relevant for HTML and CSS only
int charsetIndex = contentTypeStr.indexOf("charset=");
if (charsetIndex != -1) {
String charset = contentTypeStr.substring(charsetIndex + 8);
docInfo.setEncoding(charset.trim());
}
}
}
int response = hc.getResponseCode();
if (response / 100 == 3) { // 30x code is redirect
String newURL = hc.getHeaderField("Location");
if (newURL != null) {
hc.close();
docInfo.setUrl(newURL);
return resourceRequested(docInfo);
}
}
is = hc.openInputStream();
} catch (IOException e) {
System.out.println("HttpRequestHandler->IOException: " + e.getMessage());
} catch (IllegalArgumentException e) { // For malformed URL
System.out.println("HttpRequestHandler->IllegalArgumentException: " + e.getMessage());
}
return is;
}
}
public class web extends MIDlet {
public void startApp() {
Display.init(this);
HttpRequestHandler handler = new HttpRequestHandler();
HTMLComponent htmlC = new HTMLComponent(handler);
htmlC.setPage("http://google.com");
Form form = new Form("MyTitle");
form.setLayout(new GridLayout(1, 1));
form.addComponent(htmlC);
form.show();
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
و النتيجة كما فى الصور التالية
وفى النهاية ارجوا أن اكون قد وفقت فى الشرح و اعتذر لكم مقدما لعدم قدرتى على شرح بعض الاكواد شرح وافى و ذلك لكونى لاول مرة أتعامل مع المكتبة lwuit
وفى النهاية ارجوا أن اكون قد وفقت فى الشرح و اعتذر لكم مقدما لعدم قدرتى على شرح بعض الاكواد شرح وافى و ذلك لكونى لاول مرة أتعامل مع المكتبة lwuit
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
المكتبة LWUIT_MIDP فى المرفقات
- المرفقات
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
مشكور جدا على الشرح
أيمن الإبراهيم- ........
- تاريخ التسجيل : 19/03/2013
المساهمات : 251
النقاط : 398
التقيم : 1
الدولة :
الجنس :
رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
فيه خطأ بيظهر فى الكود ومش عارفة اية السبب ؟
لمار عادل- ..
- تاريخ التسجيل : 29/05/2013
المساهمات : 28
النقاط : 46
التقيم : 2
الدولة :
الجنس :
رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
لمار عادل كتب:فيه خطأ بيظهر فى الكود ومش عارفة اية السبب ؟
الاخت لمار بداية صباح الخيرات ......هل من الممكن تطلعينا على هذا الخطأ لكى يتثنى لنا الاجابة ؟
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
ممكن استاذ احمد تحميل المشروع كامل ولك جزيل الشكر
أيمن الإبراهيم- ........
- تاريخ التسجيل : 19/03/2013
المساهمات : 251
النقاط : 398
التقيم : 1
الدولة :
الجنس :
رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
أرجوا المعذرة فضاء الحفظ للمرفقات قد انتهى ......لذلك جارى حل مشكلة فضاء الحفظ للمرفقات و سيتم رفع المشروع فى اقرب وقت ممكن .......أيمن الإبراهيم كتب:ممكن استاذ احمد تحميل المشروع كامل ولك جزيل الشكر
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit
الله يكرمك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
NEXT- الادارة
- تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة :
الجنس :
| |
منتدى مصر التقني :: قسم لغات البرمجة Programming languages :: لغة الجافا Java :: مشاريع مفتوحة المصدر Java App
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
اليوم في 7:09 pm من طرف moslema_r
» شركة تنظيف فرشات بالرياض
الثلاثاء مارس 26, 2024 6:26 pm من طرف moslema_r
» شركة تنظيف استراحات بالرياض
الأحد مارس 24, 2024 10:49 pm من طرف moslema_r
» كشف تسربات المياه في جدة
السبت مارس 23, 2024 7:23 pm من طرف gmalnagy
» خدمات كشف تسربات المياه بخصم 25% - اتصل الان
السبت مارس 23, 2024 7:22 pm من طرف gmalnagy
» شركة تنظيف ثريات بالرياض
الخميس مارس 21, 2024 7:23 pm من طرف moslema_r
» كهربائي منازل بالرياض
الأحد مارس 17, 2024 1:52 pm من طرف رانيا حماد
» افضل شركة نقل عفش بالرياض نقل باكستاني 40% خصم | موقع الانوار
الأحد مارس 17, 2024 1:25 pm من طرف رانيا حماد
» افضل معلم جبس بالرياض تركيب جبس بورد بالرياض 20% خصم اتصل الآن
الأحد مارس 17, 2024 1:09 pm من طرف رانيا حماد
» شراء اثاث مستعمل بالكويت بخصم 30%
الأحد مارس 17, 2024 12:54 pm من طرف رانيا حماد