1.RequestDispatcher.forward()
يعمل على جانب الخادم عند استخدام الأمام()، يقوم محرك Servlet بتمرير طلب HTTP من Servlet أو JSP الحالي إلى Servlet أو JSP أو ملف HTML عادي، أي أنه يتم إرسال النموذج الخاص بك إلى يتم استخدام a.jsp,ward() في a.jsp لإعادة التوجيه إلى b.jsp في هذا الوقت، يمكن الحصول على جميع المعلومات المقدمة بواسطة النموذج في b.jsp، ويتم تمرير المعلمات تلقائيًا.
ومع ذلك، لا يمكن لـward() إعادة التوجيه إلى ملف jsp بإطار، ويمكنه إعادة التوجيه إلى ملف html بإطار. وفي الوقت نفسه، لا يمكن تمرير Forward() مع معلمات في النهاية، مثل servlet?name=frank إذا لم ينجح هذا، يمكنك تمرير الاستجابة في البرنامج .setAttribute("name"،name) لتمريرها إلى الصفحة التالية.
يظل
عنوان URL لشريط عنوان المتصفح بدون تغيير بعد إعادة التوجيه
عادةً ما يتم استخدام محتوى التعليمات البرمجية في servlets، وليس jsp.
doPost باطلة عامة (طلب HttpServletRequest، استجابة HttpServletResponse)
يلقي ServletException،IOException ...{
Response.setContentType("text/html; charset=gb2312");
ServletContext sc = getServletContext();
RequestDispatcher rd = null;
rd = sc.getRequestDispatcher("/index.jsp"); // الصفحة الموجهة
rd.forward(طلب, استجابة);
}
2.response.sendRedirect()
يعمل على متصفح المستخدم. يمكن لـ sendRedirect() تمرير المعلمات، مثل servlet?name=frank، إلى الصفحة التالية. وفي الوقت نفسه، يمكنه إعادة التوجيه إلى مضيفين مختلفين.
بعد إعادة التوجيه، سيظهر عنوان URL للصفحة المعاد توجيهها على شريط عنوان المتصفح.
مثال: إعادة التوجيه في servlet
محتوى الكود
public void doPost(HttpServletRequest request,HttpServletResponse Response)
throws
ServletException,IOException ...{
Response.setContentType("text/html; charset=gb2312")
;
بما أن الاستجابة هي كائن ضمني في صفحة jsp، فيمكن استخدام Response.sendRedirect() لتنفيذ النقل مباشرة في صفحة jsp.
ملاحظة:
(1). عند استخدام Response.sendRedirect، لا يمكن أن يكون هناك إخراج HTML في المقدمة.
هذا ليس مطلقًا. لا يعني عدم وجود مخرجات HTML أنه لا يمكن إرسال HTML إلى المتصفح. في الواقع، تحتوي خوادم اليوم على آلية ذاكرة تخزين مؤقت، عادةً ما تكون 8 كيلو بايت (أعني خادم JSP)، وهذا يعني أنه ما لم تقم بإيقاف تشغيل ذاكرة التخزين المؤقت، أو تستخدم out.flush() لفرض التحديث، فقبل استخدام sendRedirect، يمكنك استخدام كمية صغيرة. يُسمح أيضًا بمخرجات HTML.
(2) بعد .response.sendRedirect، يجب أن يتبعه إرجاع؛
ونحن نعلم بالفعل أنه تتم إعادة توجيه Response.sendRedirect من خلال المتصفح، لذلك لن يكون هناك أي إجراء فعلي حتى اكتمال معالجة الصفحة. الآن بعد أن قمت بالفعل بالتوجيه، ما هي أهمية الناتج النهائي؟ ومن الممكن أن يفشل التوجيه بسبب الخرج اللاحق.
يقارن:
(1).Request Dispatcher.forward() هو إعادة توجيه التحكم في الحاوية، ولن يتم عرض العنوان المعاد توجيهه في شريط العناوين لمتصفح العميل؛
(2).response.sendRedirect() عبارة عن قفزة كاملة، وسيحصل المتصفح على عنوان الانتقال ويعيد إرسال رابط الطلب. بهذه الطريقة، يمكن رؤية عنوان الارتباط بعد الانتقال في شريط عنوان المتصفح.
الأول أكثر كفاءة عندما يتمكن الأول من تلبية الاحتياجات، حاول استخدام طريقة RequestDispatcher.forward()
ملاحظة: في بعض الحالات، على سبيل المثال، إذا كنت بحاجة إلى الانتقال إلى مورد على خادم آخر، فيجب عليك استخدام طريقة HttpServletResponse.sendRequest().
3.<jsp:forward page="" />
يتم تنفيذ الجزء الأساسي بواسطة RequestDispatcher، لذا فهو يحمل بصمة الأسلوب RequestDispatcher.forward(). إذا كان هناك الكثير من المخرجات قبل <jsp:forward>، وكان الإخراج السابق قد جعل المخزن المؤقت ممتلئًا وسيتم إخراجه تلقائيًا إلى العميل، فلن يعمل هذا البيان.
لاحظ أيضًا: لا يمكن تغيير عنوان المتصفح، وسيؤدي التحديث إلى عمليات إرسال متكررة.
4. قم بتعديل سمة الموقع لرأس HTTP لإعادة التوجيه.
قم بإعادة توجيه الصفحة عن طريق تعديل شريط العناوين مباشرةً.
رمز ملف jsp هو كما يلي:
محتوى الكود: 5. ينفذ JSP إعادة التوجيه التلقائي إلى صفحة أخرى بعد البقاء في صفحة معينة لبضع ثوان.
وفي ملف html الكود التالي:
<meta http-equiv="refresh" content="300; url=target.jsp">
ماذا يعني ذلك: بعد 5 دقائق، ستتغير الصفحة التي تتصفحها تلقائيًا إلى صفحة target.html. 300 في الكود هو وقت تأخير التحديث بالثواني. target.html هي الصفحة المستهدفة التي تريد إعادة التوجيه إليها. إذا كانت هذه الصفحة، فسيتم تحديث هذه الصفحة تلقائيًا.
كما يتبين مما سبق، يمكنك استخدام setHeader لإعادة التوجيه تلقائيًا إلى صفحة أخرى بعد البقاء في الصفحة لبضع ثوانٍ.
رمز المفتاح:
محتوى الكود
<%
Response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn = "/newpath/jsa.jsp";
Response.setHeader("الموقع"،newLocn);
%>
محتوى السلسلة=stayTime+";URL="+URL;
Response.setHeader("REFRESH"،content);