1. مقدمة إلى JSP
JSP (صفحات خادم Java) هي لغة برمجة نصية من جانب الخادم وهي تقنية تضيف لغة Java إلى صفحات HTML لإنشاء صفحات ديناميكية: تتم إضافة علامات جديدة (<%، %>،...).
JSP هي تقنية إنشاء صفحات ويب ديناميكية تم تطويرها استنادًا إلى Java وServlet، وتنفيذها الأساسي هو Java Servlet.
تتكون صفحات JSP من كود HTML ورمز Java المضمن فيه. يقوم الخادم بمعالجة رموز Java هذه بعد أن يطلب العميل الصفحة، ثم يقوم بإرجاع صفحة HTML التي تم إنشاؤها إلى متصفح العميل.
2. عملية تنفيذ JSP يطلب العميل صفحة JSP -> يقوم محلل JSP بتوزيع *.jsp وتجميعه في *.java -> يقوم أمر javac بتجميعه في *.class -> ينفذ ملف الفئة -> يستجيب ويعيد النتيجة إلى العميل
يحتوي كود JSP على فئتين: عناصر JSP وبيانات القالب. تشير بيانات القالب إلى الجزء الذي لا يعالجه محرك JSP، أي أن محرك JSP سيقوم مباشرة بتمرير الأجزاء الأخرى غير العلامات <%...%> دون أي معالجة.
عند تنفيذ JSP لأول مرة أو بعد تعديل ملف JSP، فإنه سيتم استدعاء JSP Parser لتجميع ملف *.jsp في برنامج servlet، لذلك سيكون أبطأ.
3. بناء جملة JSP الأساسي
1. نوعان من التعليقات التوضيحية
(1) تعليق HTML يمكنك إضافة تعليق بتنسيق HTML إلى كود JSP. يتم إرسال هذا التعليق إلى العميل ولكن لا يتم عرضه على الصفحة.
<!-- التعليقات بتنسيق HTML، تكون مرئية عند عرض التعليمات البرمجية المصدر على العميل -->
<!-- تمت إضافة هذا التعليق بواسطة <%=programmer%>-->
إذا كان المبرمج مخترقًا، فإن التعليق الذي يتم إرجاعه إلى العميل هو <!-- تمت إضافة هذا التعليق بواسطة المتسلل -->
(2) تتم كتابة تعليقات JSP في كود JSP ولكن لا يتم إرسالها إلى العميل.
<%-- تعليق JSP، سيتم تجاهل هذا التعليق عند تجميع JSP --%>
<%-- /*تعليقات متعددة الأسطر في البرنامج النصي*/ --%>
<%-- /**تعليقات متعددة الأسطر في البرنامج النصي، والتي يمكن استخراجها من ملفات جافا باستخدام javadoc*/ --%>
<%-- تعليق سطر واحد في JSP--%>
2. 3 عناصر البرنامج النصي
(1) إعلان المتغيرات العالمية
<%!
(2) التعبير
في تعليمات JSP البرمجية، غالبًا ما تُستخدم التعبيرات لإخراج قيمة متغير، والذي يمكن أن يكون في أي مكان
<%!int a=1; int b=2;
<%=a+b%> <%=str>
ملاحظة: لا يمكنك استخدام الرمز "؛" كفاصل للتعبير. ولكن نفس التعبير يجب أن ينتهي بفاصلة منقوطة في البرنامج النصي.
(3) النصي
يتم استخدام مقطع البرنامج النصي لاحتواء مقطع برنامج Java صالح
<% int b=3 %>المتغير المحلي
3. 3 عناصر الأمر
(١) أمر الصفحة
<%@ page contentType="text/html;charset=utf-8"%>
تحديد السمات العامة لملف JSP، بما في ذلك: اللغة، والامتدادات، والاستيراد، والجلسة، والمخزن المؤقت، والتدفق التلقائي، وisThreadSafe، والمعلومات، وerrorPage، وisErrorPage، وcontentType (تنسيق الإخراج من الخادم إلى العميل)
يمكن أن يكون موقعه في أي مكان بالصفحة، لكن يوصى بوضعه في أعلى الصفحة.
اللغة: تحدد نوع لغة البرمجة النصية حاليًا، يمكن استخدام "java" فقط.
يمتد: يشير إلى الاسم الكامل لفئة Java التي يجب إضافتها عند ترجمة JSP، وسيحد من قدرة الترجمة لـ JSP، لذا استخدمه بحذر!
استيراد: قائمة حزم جافا التي تحتاج إلى استيرادها.
الجلسة: قم بتعيين ما إذا كان العميل يحتاج إلى جلسة HTTP. الافتراضي صحيح.
المخزن المؤقت: يتم استخدام حجم المخزن المؤقت بواسطة الكائن الصادر لمعالجة إخراج JSP الذي تم تنفيذه إلى متصفح العميل. القيمة الافتراضية هي 8 كيلو بايت.
autoFlush: يضبط ما إذا كان سيتم فرض الإخراج في حالة تجاوز سعة المخزن المؤقت، إذا تم تعريفه على أنه صحيح (القيمة الافتراضية)، فسيكون الإخراج طبيعيًا إذا تم تعريفه على أنه خطأ، فسيحدث خطأ غير متوقع.
isThreadSafe: يحدد ما إذا كان يمكن استخدام ملف JSP في عدة سلاسل رسائل. الافتراضي صحيح.
معلومات: معلومات نصية. يمكن استرجاعه باستخدام طريقة Servlet.getServletInfo().
errorPage: قم بتعيين ملف JSP الذي يتعامل مع أحداث الاستثناء
sErrorPage: قم بتعيين ما إذا كانت هذه الصفحة هي صفحة تتعامل مع أحداث الاستثناء. إذا تم التعيين على "صحيح"، فيمكن استخدام كائن الاستثناء.
contentType: قم بتعيين نوع MIME ومجموعة ترميز الأحرف. نوع MIME الافتراضي هو text/html، ومجموعة الأحرف الافتراضية هي charset=ISO-8859-1.
يمكن استخدام توجيهات < %@page %> المتعددة في الصفحة، ولكن باستثناء سمة الاستيراد، لا يمكن استخدام السمات الأخرى إلا مرة واحدة.
الحزم المستوردة بواسطة JSP بشكل افتراضي تم استيراد الحزم التالية أثناء تجميع JSP، لذلك ليست هناك حاجة لاستخدام توجيه الصفحة لتقديمها في ملف JSP:
Java.lang.*
جافاكس.سيرفلت.*
javax.servlet.jsp.*
javax.servlet.http.*
(2) تضمين التوجيه
كود اتش تي ام ال
<%@ تضمين الملف = "المسار النسبي" %>
استخدم توجيه التضمين لتضمين ملف ثابت في JSP وتحليل عبارات JSP في هذا الملف.
إذا كان المسار يبدأ بـ "/"، فإن هذا المسار يشير بشكل أساسي إلى مسار السياق لتطبيق jsp.
إذا تم فتح المسار كاسم ملف أو دليل ملف، فإن هذا المسار هو المسار الحالي لملف JSP المستخدم.
(3) أمر تاجليب
كود اتش تي ام ال
<%@ taglib uri = "TagLibrary" prefix = "mypfx" %>
استخدم توجيه taglib لتحديد مكتبة العلامات والبادئة المخصصة لها.
uri: يقوم معرف المورد الموحد بتسمية التسمية المخصصة بشكل فريد بناءً على بادئة التسمية، والتي يمكن أن تكون مسارًا نسبيًا أو مطلقًا.
البادئة: بادئة التسمية المخصصة. لا تستخدم jsp، وjspx، وjava، وjavax، وservlet، وsun، وsunw كبادئات، فقد تم إعلان أنها محجوزة بواسطة Sun.
4. 8 أوامر عمل
(1) الانتقال إلى الصفحة: <jsp:forward>
تقوم العلامة <jsp:forward> بتمرير كائن طلب يحتوي على طلب مستخدم من ملف jsp إلى آخر.
يحتوي على سمتين في المجموع
سمة الصفحة عبارة عن تعبير أو سلسلة تصف الملف أو عنوان URL المطلوب توجيهه.
<jsp:param>أرسل معلمة واحدة أو أكثر إلى ملف ديناميكي. إذا تم استخدام العلامة <jsp:param>، فيجب أن يكون الملف الهدف ملفًا ديناميكيًا (مثل Servlet أو JSP وما إلى ذلك)
كود اتش تي ام ال
<jsp:صفحة الأمام=test.jsp>
<jsp:param name="username" value="<%=user%>"/>
<jsp:param name="password" value="12345678"/>
</jsp:إلى الأمام>
احصل على اسم المستخدم من خلال request.getParameter("username")
(2) صفحة التضمين: <jsp:تتضمن>
<jsp:include> يسمح بتضمين موارد الويب الثابتة والديناميكية، وتختلف نتائج هذين التضمينين.
إذا تم تضمين الملفات الثابتة فقط، فإن هذا التضمين يضيف فقط محتويات الملف المضمن إلى ملف JSP، على غرار < %@include% >؛
إذا تم تضمين مورد ويب ديناميكي، فسيتم أيضًا تنفيذ الملف المضمن بواسطة مترجم JSP.
إذا كان ملف التضمين هذا ديناميكيًا، فيمكنك أيضًا استخدام <jsp:param> لتمرير المعلمات وقيم المعلمات.
(3) إنشاء الفول: <jsp:useBean>
قم بإنشاء مثيل Bean وحدد اسمه ونطاقه.
<jsp:useBean id = "beanInstanceName" نطاق = "صفحة|طلب|جلسة|تطبيق" class="package.className"/>
يحتوي على 5 سمات.
المعرف: قم بتأكيد متغير Bean في النطاق المحدد، واستخدم المعرف لاستخدام مثيل Bean هذا في البرنامج. قيمة المعرف حساسة لحالة الأحرف.
النطاق: النطاق الذي يوجد فيه Bean والنطاق الصالح لاسم متغير المعرف. القيمة الافتراضية هي الصفحة.
فئة: استخدم الكلمة الأساسية الجديدة ومنشئ الفئة لإنشاء مثيل لفاصوليا من فئة ما. لا يمكن للفئة أن تكون مجردة ويجب أن تحتوي على مُنشئ عام بدون وسيطات.
النوع: إذا كانت حبة الفول هذه موجودة بالفعل في النطاق المحدد، فإن استخدام النوع سيؤدي إلى تعيين نوع بيانات لهذه الحبة. إذا تم استخدام النوع بدون فئة أو beanName، فلن يتم إنشاء مثيل للفاصوليا.
beanName: beanName يمكن أن يكون عبارة عن سلسلة package.class، أو تعبير jsp، وسيتم تمرير قيمته إلى الأسلوب Beans.instantiate. يمكن أن تكون قيمة النوع هي نفس قيمة beanName أو فئتها الأساسية أو الواجهة التي تنفذها.
(4) تعيين خصائص الفول: <jsp:setProperty>
<jsp:setProperty name="beanInstanceName" property="*"|property="propertyName" value="string|<%=expression%>"|param="parameterName"/>
الاسم: يشير إلى اسم مثيل Bean الذي تم إنشاؤه في <jsp:useBean>، أي المعرف.
الخاصية: تطابق الخصائص الموجودة في Bean
المعلمة: تشير إلى اسم المعلمة في كائن الطلب، وتعيين القيمة المقابلة لسمة Bean.
القيمة: استخدم القيمة المحددة لتعيين خاصية Bean. يمكن أن تكون هذه القيمة سلسلة أو تعبيرًا. إذا كانت سلسلة، فسيتم تحويلها إلى نوع سمة Bean (على سبيل المثال، سيتم تحويل "0.98" إلى النوع المزدوج 0.98). إذا كان تعبيرًا، فيجب أن يكون نوعه متسقًا مع نوع سمة Bean.
ملاحظة: لا يمكن استخدام سمات Param وسمات القيمة في نفس الوقت في نفس <jsp:setProperty>
(5) الحصول على خصائص الفول: <jsp:getProperty>
احصل على قيمة السمة في كائن Bean الموجود واعرضها على الصفحة.
<jsp:getProperty name="beanInstanceName property="propertyName"/>
الاسم: نفس اسم مثيل الكائن الموجود.
الخاصية: اسم الخاصية في الكائن
(6) استخدم البرنامج الإضافي: <jsp:plugin>
كود اتش تي ام ال
<jsp:plugin type="applet" code="MeidaPlay.class" codebase="../classes">
<jsp:بارماس>
<jsp:param name="way" value="Hall"/>
</jsp:بارامز>
<jsp:الاحتياطي>
<p>غير قادر على تحميل التطبيق الصغير!</p>
</الرجوع>
</jsp:البرنامج المساعد>
استخدم <jsp:plugin> لإدراج برنامج صغير أو Bean، وإذا لزم الأمر، قم بتنزيل مكون Java الإضافي لتنفيذه.
(7) تحديد المعلمات: <jsp:param>
يمكن استخدامه في <jsp:include>، <jsp:forward>، <jsp:plugin>.
(8) رسالة خطأ في البرنامج الإضافي: <jsp:fallback>
عندما لا يمكن عرض المكون الإضافي <jsp:plugin> بشكل طبيعي، يتم عرض رسالة مطالبة.
3. كائنات JSP المضمنة
1. الطلب: يقوم هذا الكائن بتغليف المعلومات المقدمة من قبل المستخدم، ويمكن الحصول على المعلومات المغلفة عن طريق استدعاء الطريقة المقابلة للكائن.
عندما يحصل كائن الطلب على الأحرف الصينية المقدمة من قبل العميل، ستظهر أحرف مشوهة ويجب إجراء معالجة خاصة.
الطرق الشائعة الاستخدام:
getParameter(StringparameterName): احصل على معلومات إرسال النموذج.
getProtocol(): احصل على البروتوكول الذي يستخدمه العميل.
getServletPath(): احصل على الصفحة التي أرسل فيها العميل المعلومات.
getMethod(): طريقة الحصول على المعلومات المقدمة من قبل العميل.
getHeader(String str): احصل على قيم القبول والترميز والقبول في ملف رأس HTTP.
getRermoteHost(): احصل على عنوان IP الخاص بالعميل.
getServerName: احصل على اسم الخادم.
getServerPort: احصل على رقم منفذ الخادم.
getParameterNames(): احصل على أسماء جميع المعلمات المقدمة من قبل العميل.
2. الاستجابة: يستجيب كائن الاستجابة ديناميكيًا لطلب العميل ويرسل البيانات إلى العميل.
(1) الاستجابة ديناميكيًا لسمة contentType. استخدم أمر الصفحة لتعيين سمة contentType للصفحة بشكل ثابت. عند تعيين هذه السمة ديناميكيًا، استخدم Response.setContextType("text/html;charset=utf-8");
(2) إعادة توجيه الاستجابة
Response.sendRedirect("index.jsp");
3. الجلسة: كائن الجلسة
(1) ما هو كائن الجلسة؟
يتم إنشاء كائن الجلسة تلقائيًا عند تحميل صفحة JSP الأولى لإكمال إدارة الجلسة.
وتبدأ عندما يفتح العميل المتصفح ويتصل بالخادم، وينتهي عندما يغلق العميل المتصفح ويترك الخادم. وهذا ما يسمى بالجلسة.
(2) معرف كائن الجلسة
عندما يزور العميل صفحة JSP على الخادم لأول مرة، يقوم محرك JSP بإنشاء كائن جلسة ويعين رقم معرف من نوع السلسلة، كما يرسل محرك JSP رقم المعرف هذا إلى العميل ويخزنه في ملف تعريف الارتباط بهذه الطريقة، كائن الجلسة، لن يتم تعديل كائن جلسة العميل بواسطة الخادم إلا بعد أن يغلق العميل المتصفح، وتختفي مراسلات الجلسة مع العميل.
(3) الطرق الشائعة
public String getId(): احصل على رقم كائن الجلسة.
public void setAttribute(String str,Object obj): أضف كائن المعلمة إلى كائن الجلسة.
public Object getAttribute(): احصل على السمات الموجودة في كائن الجلسة بناءً على اسم السمة.
المنطقية العامة isNew(): تحديد ما إذا كان عميلاً جديدًا.
4. التطبيق: كائن التطبيق
(1) ما هو كائن التطبيق؟
يتم إنشاء كائن التطبيق هذا بعد بدء تشغيل الخادم. عندما يتصفح العميل بين الصفحات المختلفة لموقع الويب الذي تمت زيارته، يكون كائن التطبيق هو نفسه، ويشارك جميع العملاء كائن التطبيق المدمج هذا.
(2) الطرق الشائعة
setAttribute(String key,Object obj): إضافة كائن المعلمة إلى كائن التطبيق.
getAttibute (مفتاح السلسلة): احصل على السمات الموجودة في كائن التطبيق بناءً على اسم السمة
5. خارج: كائن الإخراج
الكائن الخارجي هو دفق إخراج يستخدم لإخراج البيانات إلى العملاء.
out.print(): إخراج أنواع مختلفة من البيانات.
out.newLine(): إخراج حرف السطر الجديد.
out.Close(): إغلاق الدفق.
6. التكوين: كائن التكوين بشكل عام، نستخدم كائن التكوين للحصول على بعض معلومات تكوين التهيئة، والطرق المستخدمة بشكل شائع هي getInitParameter وgetInitParameterNames للحصول على المعلمات أثناء تهيئة Servlet.
7.الصفحة: كائن الصفحة
يمثل كائن الصفحة كائن فئة التشغيل الذي تم إنشاؤه بواسطة ملف JSP ولا ينصح به للقراء العاديين.
8.PageContext: كائن سياق الصفحة
تتيح لك فئة PageContext المقدمة بواسطة JSP الوصول إلى العديد من خصائص الصفحة. يقوم متغير pageContext بتخزين قيمة كائن PageContext المرتبط بالصفحة الحالية. تحتوي فئة PageContext على أساليب مثل getRequest وgetResponse وgetOut وgetSession.
9.Exception: كائن الاستثناء
يمثل كائن الاستثناء كائن الاستثناء الذي تم إنشاؤه عند تشغيل ملف JSP. لا يمكن استخدام هذا الكائن مباشرة في ملفات JSP العادية، ولكن يمكن استخدامه فقط
يتم استخدام < %@page isErrorPage="true"%> في ملفات JSP. وذلك لأن كائن الخطأ الذي تم إنشاؤه عند تشغيل ملف JSP يتم طرحه ولا يمكن اعتراضه إلا بواسطة JSP الذي يستخدم العلامة < %@pageisErrorPage = "true"٪ > لاعتراض كائن الخطأ. الطريقة الأكثر استخدامًا هي getMessage، المستخدمة للحصول على معلومات الخطأ.
4. صفحة تسجيل الدخول المثيلة: Index.jsp
كود اتش تي ام ال
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<أتش تي أم أل>
<الرأس>
<title>تسجيل الدخول إلى النظام</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
<نمط النوع = "نص/CSS">
.btn {
عائلة الخط: "Tahoma"، "宋体"؛
حجم الخط: 9pt؛
اللون: #001E3C؛
الحدود السفلية: #6794BC 1px صلب؛
الحدود اليسرى: #8BB8E0 1px صلب؛
الحدود اليمنى: #6794BC 1px صلب؛
الحدود العلوية: #8BB8E0 1px صلب؛
صورة الخلفية: url(image/buttonbg.gif);
المؤشر: اليد؛
نمط الخط: عادي؛
المساحة المتروكة لليسار: 3 بكسل؛
الحشو على اليمين: 3 بكسل؛
}
</نمط>
<نوع البرنامج النصي = "نص/جافا سكريبت">
وظيفة دولوجين () {
فار vform = document.loginform;
إذا (!loginform.username.value){
تنبيه ("الرجاء إدخال اسم المستخدم!")
يعود؛
}
إذا (!loginform.password.value){
تنبيه ("الرجاء إدخال كلمة المرور!")
يعود؛
}
vform.submit();
}
</script>
</الرأس>
<الهامش العلوي للجسم = "0" الهامش الأيسر = "0">
<عمل النموذج = "receive.jsp" اسم = "longinForm" طريقة = "post">
<عرض الجدول = "100%" الارتفاع = "100%">
<تر>
<td align="center" valign="middle">
<معرف الجدول = "form1"
تباعد الخلايا = "0" خلية الحشو = "0" الحدود = "0" نمط = "العرض: 500؛">
<CAPTION style = "العرض: لا شيء">
</CAPTION>
<TR>
<TD>
<عرض الجدول = "100%" الارتفاع = "100%" تباعد الخلايا = "0"
خلية الحشو = "0" الحدود = "0" نمط = "تخطيط الجدول: ثابت">
<TR>
<TD فالين = "أعلى">
<FIELDSET id="form1_group0" style="width: 100%;">
<LEGEND>تسجيل الدخول إلى النظام</LEGEND>
<DIV>
<DIV style="width: 100%; height: 100%">
<عرض الجدول = "100%" تباعد الخلايا = "0"
خلية الحشو = "4" الحدود = "0" نمط = "تخطيط الجدول: ثابت؛">
<مجموعة كولجروب>
<عرض كول = "100"></كول>
<COL width="50%"></COL>
<عرض كول = "100"></كول>
<COL width="50%"></COL>
</كولجروب>
<TR>
<TD محاذاة = "يمين">
اسم المستخدم
</TD>
<TD class="InnerTableContentCell">
<نوع الإدخال = "نص" اسم = "اسم المستخدم"
نمط = "العرض: 100٪؛">
</TD>
<TD محاذاة = "يمين">
كلمة المرور
</TD>
<TD>
<نوع الإدخال = "كلمة المرور" الاسم = "كلمة المرور"
النمط = "العرض: 100%؛ />".
<نوع الإدخال = "مخفي" الاسم = "الإجراء 2" القيمة = "0">
</TD>
</TR>
<TR>
<TD كولسبان = "4"
محاذاة = "يمين">
<نوع الإدخال = "زر" اسم = "تسجيل الدخول" قيمة = "تسجيل الدخول" عند النقر = "this.form.submit ()؛" فئة = "btn"/>
</TD>
</TR>
</الجدول>
</DIV>
</DIV>
</فيلدسيت>
</TD>
</TR>
</الجدول>
</TD>
</TR>
</الجدول>
</TD>
</tr>
</الجدول>
</النموذج>
</الجسم>
</html>
تلقي صفحة البيانات:تلقي.jsp
كود اتش تي ام ال
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" info="action tag"%>
<jsp:useBean id = "userVo" class = "exercise.vo.UserVo" نطاق = "طلب">
<jsp:setProperty name = "userVo" property = "name" param = "username"/>
<jsp:setProperty name="userVo" property="password" param="password"/>
</jsp:useBean>
<أتش تي أم أل>
<الرأس>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" >
<link href="css/vbulletin.css" rel="stylesheet" type="text/css">
</الرأس>
<الجسم>
هذه هي صفحتي JSP
<hr>استخدم <jsp:getProperty> للحصول على القيمة المقدمة في النموذج<br>
الاسم:<jsp:getProperty property="name" name="userVo"/><br>
كلمة المرور:<jsp:getProperty property="password" name="userVo"/>
<br><br><hr>
<%
out.println("احصل مباشرة من كائن vo:<br> الاسم:"+userVo.getName()+
"<br>كلمة المرور:"+userVo.getPassword()+"<br>");
String ServiceName = request.getServerName();// كائن الطلب داخل 1.jsp
out.println("<br><hr>اسم الخادم: "+serviceName);
out.println("<br>نوع MIME: "+response.getContentType());//2.jsp كائن الاستجابة الداخلية
session.setAttribute("sessionName"،"كائن الجلسة داخل jsp");//3.jsp كائن الجلسة الداخلية
out.println("<br>كائن الجلسة: "+session.getAttribute("sessionName"));//4.jsp كائن خارجي داخلي
pageContext.setAttribute ("pageContext"، "مرجع بيئة السياق")؛ // كائن pageContext داخل 5.jsp
//6.application
//7.تكوين مثيل ServletConfig
//8. مثيل الصفحة java.lang.Object
//9. الاستثناء يجب أن يستخدم مثيل java.lang.Throwable على الصفحة مع isErrorPage=true في توجيه الصفحة.
معلومات السلسلة = pageContext.getServletContext().getServerInfo();
out.println("احصل على سمة المعلومات في أمر الصفحة:"+info);
%>
</الجسم>