الدرس الرابع

10
مس ب له ل ا ن م ح ر ل ا م ي ح ر ل ا درس وم ي ل ا ن عheader د حدي ت ل ا يrequest header ما ي هheader ي ه: ارة ب ع ن ع ات, اي ب- ب, ف ص ت وى ي ح م حه, ف لص ا و ات, اي ب- ب ن ع ف ر سي ل ا ومات ل ع م و ن ع ح, ف ص ت م ل ا ب ي و ل ا ي ه و: , وعان نrequest header وresponse header وم ي ل ا ا, ب س در ن عrequest header ما ي ه در ب ه ل ا ي لت ا ل س ر ت ,ر: ف ر سيل لHTTP Request Headers : ال ات, اي ب- ب, ف ل ’ح تheader ات, اي ب- ب ن عform ح تV ن تY ث ي ح، form data ن م له^, مدخ ل م ا ’ي ق ل ا ن م رY ش ا ب م ل^ كY ش ب ن م ء, ز ج ك ل س ر ت و ون ن, ر ل ل ا ’ب قURL ب^طل ل ا خال كان ي, فget ب^طل ل ا خال كان ي, ف ل ف, ن م ز سط ي, ف وt اpost ات, اي ب- ب ماt اheader عد ب رةY ش ا ب م ل س ر ت و زض, ع ن س م ل ا واسطة ن{ لك, ر ودY ش ا ب م ر ي, غ ل كY ش ب ع, ض ’و ن ها, ن ا, فrequest line ال, ض ع ب ي عل, زف ع نV لن وheaders : 1 . Accept ة, ن ي ع م , واع نt م ا ع د ال :يY ب م ها ج ل عا ب نt ا زض, ع ن س مل ل ن مك ي ي لت ا ات ق ن- ي ط ت ل , واع ا نt د ا حد ت ل^ عام كY ش ب: لY ب م ور لص ا ن مgif jpg , ح لا.... 2 . accept-encoding م ظ ع م د تY ث ي ح ها ، ج ل عا ب نt ا زض, ع ن س مل ل ن مك ي ي لت ر ا ي, فY ش لت , واع ا نt د ا حد ت: دام, ح ت س ا ط ي, لص ي ا عل درة ق ل م ا ع د ي ات, زض ع ن س م ل اGZip 3 . accept-language ن م رY كيt ا ي حt ت ا بV لن ر ا ه ظ ت نt ه ا, ن مك ي دم, ح م ل ا خال كان ي, ف عا ن ط له^, ف م ل ا ون ن, ر ل ا ه, غد ل حد ت: ( ه, غ لen,en-us ) 4 . content-type ع م دم, ح تس ب ماً ا ب ل ا, : عrespose ي, ف دم, ح تس ب نt ا ن مك ي ه, نt ا لا اrequest خال ي, ف ال ات, اي ب- ب ع م ق, ف ر م ل سر ت ون ن, ر ل ا كانpost

Upload: anas-aloklah

Post on 18-Feb-2017

134 views

Category:

Software


0 download

TRANSCRIPT

Page 1: الدرس الرابع

الرحيم الرحمن الله بسم request header بالتحديد header عن اليوم درس

عن ومعلومات السيرفر عن بيانات و الصفحة محتوى تصف بيانات عن عبارة هي: header هي ما الويب المتصفح

response header و request headerنوعان: وهي

request header عن درسنا اليوم

للسيرفر: ترسل التي الهيدر هي ماHTTP Request Headers:

بشكل مباشر من القيمform data ، حيث تنتج form عن بيانات headerتختلف بيانات ال أو في سطرget في حال كان الطلب URLالمدخلة من قبل الزبون وترسل كجزء من

postمنفصل في حال كان الطلب

فإنها توضع بشكل غير مباشر وذلك بواسطة المستعرض وترسل headerأما بيانات request lineمباشرة بعد

:headersولنتعرف على بعض ال

1.Accept بشكل عام يحدد أنواع التطبيقات التي يمكن للمستعرض أن يعالجها : ....الخgif jpgمثال :يدعم أنواع معينة من الصور مثل

2.accept-encodingيحدد أنواع التشفير التي يمكن للمستعرض أن يعالجها ، حيث : GZipنجد معظم المستعرضات تدعم القدرة على الضغط باستخدام

3.accept-languageيحدد لغة الزبون المفضلة طبعا في حال كان المخدم يمكنه أن: (en,en-usيظهر النتائج بأكثر من لغة )

4.content-type غالبا ما يستخدم مع :respose إال أنه يمكن أن يستخدم في request في حال كان الزبون يرسل مرفق مع بيانات ال post

5.content-length يعطي حجم بيانات الـ :post بالبايت 6.cookie يعيد الكوكي للمخدم التي كان قد وضعها من قبل : 7.user-agent.يحدد نوع المستعرض أو التطبيق الزبون الذي أرسل الطلب: 8.host ويجب تحديده والذي يوضح عن طريقه: host & port 9.referer تحمل الرابط الصفحة السابقة :

request headerهذا مثال عن الـ

Page 2: الدرس الرابع

getHeader ("header name") الدالة طريق عن فتتم headerالـ هذه قيم لقراءة أماnull تعيد فإنها قيمة header الـ لهذا يكن لم وإذا stringك header الـ قيمة تعيد والتيالتالية: الطرق أحد نستخدم أن ويمكن header أي لقراءة عامة دالة فهي

getContentType)( الصفحة محتوى نوع لنا يعيد getContentLength)( الـ بيانات حجم لنا تعيدpost بالبايت

getRemoteUser)(getCookies)( ال كائنات من كمصفوفة الكوكي محتويات تعيدcookie

getHeaderNames)( ال من بأسماء قائمة تعيدheaders شكل على EnumerationgetHeaders("header-name") قيم بكل قائمة تعيد header معين

سرفلت: المثال request header جميع بعرض يقوم األول

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;/** Shows all the request headers sent on the current request. */public class ShowRequestHeaders extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException

{response.setContentType("text/html");PrintWriter out = response.getWriter();String title = "Servlet Example: Showing Request Headers";out.println("<HTML>\n" +"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +"<BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +"<B>Request Method: </B>" +request.getMethod() + "<BR>\n" +"<B>Request URI: </B>" +request.getCookies() + "<BR>\n" +"<TABLE BORDER=1 ALIGN=\"CENTER\">\n" +"<TR BGCOLOR=\"#FFAD00\">\n" +"<TH>Header Name<TH>Header Value");Enumeration headerNames = request.getHeaderNames();while(headerNames.hasMoreElements())

{String headerName = (String)headerNames.nextElement();out.println("<TR><TD>" + headerName);out.println(" <TD>" + request.getHeader(headerName));

}out.println("</TABLE>\n</BODY></HTML>");}

/** Since this servlet is for debugging, have it* handle GET and POST identically.*/public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {doGet(request, response); }}

Page 3: الدرس الرابع

gzip شفرة يدعم لديك المتصفح كان إذا بمعرفة السرفلت يقوم هو الثاني: المثال gzip بشفرة البيانات يرسل سوف فانه

الويب للمستعرض البيانات نقل كيفية عن بالبداية نشرح سوفيلي: بما تقوم بالعادية أنت

PrintWriter out = response.getWriter(); out.println(" تشاء ما تطبع ");

يجري ما تعرف ال أنت الحقيقة في لكن جرب الطريقة: بهذه تطبع أن مثال

ServletOutputStream outputStream = response.getOutputStream();outputStream.println("<h1>hi<h1>");

مشكلة أي دون من سيطبع أنه ستجد حسنا السابقة الطريقة باستخدام بالعربي تطبع أن جرب

ServletOutputStream outputStream = response.getOutputStream();outputStream.println("<h1>مرحبا<h1>");

لماذا السرفلت في خطأ تجد سوف يحدث ماذا للبيانات تستعمل قناة هي ServletOutputStream البيانات نقل القناة بساطة بكل ألنه

من البيانات إلرسال األساسية القناة هي فكرة وعلى Byte مصفوفة شكل على الثنائية القناة أما الويب المستعرض إلى السرفلت

بايت ASCII 1 أحرف ألن ASCII كانت إذا فقط المحرفية السالسل بيانات نقل بمكانها وهي

PrintWriter عن ماذا إذا Uinicode نمط من المحرفية السالسل بتحويل PrintWriter الصف من التي القناة تقوم ثنائية بيانات إلى

قناة بوضع تقوم فأنك )(;PrintWriter out = response.getWriter بعملك وأنتServletOutputStream قناة داخل PrintWriter

PrintWriter الصف من التي القناة بنية توضح الصورة هذا

الويب المستعرض إلى ونرسلها Gzip التشفير تقنية نستخدم أن نريد اآلن حسناGzip ثنائية بيانات إلى وتشفيرها الثنائية البيانات بأخذ تقوم أقل بحجم ولكن أيضا

ثنائية بيانات إلى المحرفية السالسل بتحويل تقوم PrintWriter الصف من القناة أن ولديناServletOutputStream الصف من التي القناة عبر يرسلها

الصف من القناة من القادمة البيانات بتشفير نقوم الن هوا كتالي هو به سنقوم ماPrintWriter التشفير خوارزمية بوسطة Gzip الصف من القناة إلى إرسالها ثم ومن

ServletOutputStreamالقناة ستصبح كيف يوضح الرسم هذا PrintWriter

Page 4: الدرس الرابع

سرفلت وليس جافا صف بإنشاء نقوم سوف بالبداية البرنامج بكتابة لنبدأ في وتبحث المستعرض من request header أخذ أجل من هو يلي بما يقوم الصف ومهمة

هذا يدعم المستعرض كان حال في Gzip التشفير تقنية يدعم المستعرض كان إذا ما بـ مشفر البيانات إرسال يكون بحيث لكن PrintWriter نمط من قناة بإنشاء تقوم التقنية

Gzip هي الصف هذا في (method) طرق

األولى: الطريقةboolean isGzipSupported (HttpServletRequest request)

غرار في false و Gzip يدعم المستعرض كان حال في true إرجاع على الطريقة هذه تقوم ذالكHttpServletRequest نمط من request وهو واحد وسيط ولها

الثانية: الطريقةboolean isGzipDisabled (HttpServletRequest request(

لـ المستعرض دعم بتعطيل المستخدم قام حال في true إرجاع على الطريقة هذه تقومGzip و false ذالك غرار في HttpServletRequest نمط من request وهو واحد وسيط ولها

الثالثة: الطريقةPrintWriter getGzipWriter(HttpServletResponse response(

الغرض هذا يكون بحيث PrintWriter نمط من غرض إرجاع على الطريقة هذه تقوم Gzip بتقنية التشفير باستطاعته

Page 5: الدرس الرابع

السرفلت بكتابة نقوم اآلن

import java.io.IOException;import java.io.PrintWriter;import java.util.zip.GZIPOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

class GzipUtilities {// ذالك غرار على خطأ ويعد زيب الجي بـ تشفير يدعم المستعرض كان حال في صح يعيدpublic static boolean isGzipSupported (HttpServletRequest request( {

String encodings = request.getHeader("Accept-Encoding");return((encodings != null) &&(encodings.indexOf("gzip") != -1));

}ذالك غرار في خطأ يعيد المتصفح على الدعم بتعطيل المستخدم قام حال في صح // يعيد

public static boolean isGzipDisabled (HttpServletRequest request( {

String flag = request.getParameter("disableGzip"); return((flag != null) && (!flag.equalsIgnoreCase("false")));

}/** Return gzipping PrintWriter for response. */public static PrintWriter getGzipWriter(HttpServletResponse response) throws IOException { return(new PrintWriter(new GZIPOutputStream(response.getOutputStream()))); }}

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;/** Servlet with <B>long</B> output. Used to test* the effect of the gzip compression.*/public class LongServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException

{response.setContentType("text/html");// Change the definition of "out" depending on whether// or not gzip is supported.PrintWriter out;if (GzipUtilities.isGzipSupported(request) && !

GzipUtilities.isGzipDisabled(request)) {

out = GzipUtilities.getGzipWriter(response);response.setHeader("Content-Encoding", "gzip");

} else

{out = response.getWriter();

}// Once "out" has been assigned appropriately, the// rest of the page has no dependencies on the type// of writer being used.String docType ="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +"Transitional//EN\">\n";String title = "Long Page";out.println(docType +"<HTML>\n" +"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +"<BODY BGCOLOR=\"#FDF5E6\">\n" +"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n");String line = "Blah, blah, blah, blah, blah. " +"Yadda, yadda, yadda, yadda.";for(int i=0; i<10000; i++)

{out.println(line);

}out.println("</BODY></HTML>");out.close(); // Needed for gzip; optional otherwise.}

}

Page 6: الدرس الرابع

سرفلت 2 يكون سوف الواجب الواجب على ننتقل اآلنيقوم: تستعمله الذي المتصفح اسم بطباعة األولقم: روابط ثالث على تحتوي index.html الـ صفحة index.html صفحة بإنشاء الثاني السرفلت على الرابط نفس تحوي الثالثة الصفحات c.html و b.htmlو a.html لصفحة وصلت التي السابقة الصفحة إلى دينامكي رابط بإنشاء السرفلت ويقوم أسم أي سميه

السرفلت على منها

الله أنشاء المقبل الدرس في الواجب سأضع

وبركاته الله ورحمة عليكم والسالمــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

ـــــــــــــــــــــــــــــــــــــــــــــــــ

توضيح PrintWriter out = response.getWriter();

يلي: كما تعمل

PrintWriter response.getWriter()

{

return(new PrintWriter( response.getOutputStream()));

}