الدرس الرابع
TRANSCRIPT
الرحيم الرحمن الله بسم 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هذا مثال عن الـ
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); }}
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
سرفلت وليس جافا صف بإنشاء نقوم سوف بالبداية البرنامج بكتابة لنبدأ في وتبحث المستعرض من 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 بتقنية التشفير باستطاعته
السرفلت بكتابة نقوم اآلن
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.}
}
سرفلت 2 يكون سوف الواجب الواجب على ننتقل اآلنيقوم: تستعمله الذي المتصفح اسم بطباعة األولقم: روابط ثالث على تحتوي index.html الـ صفحة index.html صفحة بإنشاء الثاني السرفلت على الرابط نفس تحوي الثالثة الصفحات c.html و b.htmlو a.html لصفحة وصلت التي السابقة الصفحة إلى دينامكي رابط بإنشاء السرفلت ويقوم أسم أي سميه
السرفلت على منها
الله أنشاء المقبل الدرس في الواجب سأضع
وبركاته الله ورحمة عليكم والسالمــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ـــــــــــــــــــــــــــــــــــــــــــــــــ
توضيح PrintWriter out = response.getWriter();
يلي: كما تعمل
PrintWriter response.getWriter()
{
return(new PrintWriter( response.getOutputStream()));
}