דף הבית   | מפת האתר   | אודות

 מדריך ללימוד JSP>שילוב יישומוני שרתים

הינך נמצא ב :

שילוב יישומוני שרתים ו-JSP

ישומוני שרת יוכלו לקדם דרישות או לכלול תוכן חיצוני על ידי שימוש ב-RequestDispatcher.
ניתן להשיג זאת על ידי קריאה ל-getRequestDispatcher של ServletContext ולספק כתובת URL יחסית לתיקיית השורש של השרת כך:

RequestDispatcher
dispatcher=getServletContext().getRequestDispatcher(url);

לאחר מכן יש להשתמש ב-forward כדי להעביר שליטה מלאה ל-URL שצוין ולהשתמש ב-include כדי להוציא פלט של תוכן URL שצוין.  ב- 2 המקרים יש לספק את הארגומנטים HttpServletRequest
ו-
HttpServletResponse. שני ה-methods מודיעים על ServletException ו-IOException.

שימוש במשאבים סטטיים

במקרים מסוימים בהם נרצה לשלוח את הדרישה לדף HTML סטטי כל שיש לעשות הוא לספק את כתובת הדף HTML כארגומנט ל-getRequestDispatcher בדרישות GET. לעומת זאת ב-POST אי אפשר לעשות זאת. כדי להתגבר על זה עליך לשנות את סיומת שם הדף לסיומת JSP.

 

אספקת נתונים לדפי היעד

אם יישומון מעוניין לקדם את הדרישה לדף JSP, כל שעליו לעשות הוא להשיג RequestDispatcher  על ידי קריאה ל-getRequestDispatcher method של ServletContext ולקרוא ל-forward  יחד עם הנתונים, וכן לספק את הארגומנטים HttpServletRequest ו-HttpServletResponse. שיטה זו דורשת מדף היעד לקרוא את הנתונים הדרושים לו מתוך HttpServletRequest. ישנם שני מקומות עיקריים שיישומון השרת יכול לאחסן בהם נתונים לשימוש דפי JSP

ב-HttpServletRequest וכ-Bean במיקום ספציפי לתכונה  scope של jsp:useBean.

יישומון השרת המקורי יאחסן אובייקטים שרירותיים כ-
HttpServletRequest  על ידי שימוש בפקודה הבאה:

 

 

request.setAttribute("key1",value1);

 

לעומת זאת ניתן לעשות זאת טוב יותר על ידי שימוש ב-bean ואחסונו במיקום שנקבע על ידי jsp:useBean  עבור Beans משותפים. כדי ליצור bean נגיש לכל יישומוני השרת או דפי JSP שבשרת או ביישום Web, יישומון השרת הקורא יכיל את הקוד הבא:

 

 

Type1 value1=computeValueFromRequest(request);
getServletContext().setAttribute("key1",value1");

 

דף היעד מסוג JSP ייגש לרוב לערך שנשמר קודם לכן על ידי שימוש ב-jsp:useBeans בצורה הבאה:

 

 

<jsp:useBean id="key1" class="Type1" scope="application"/>

 

לחילופין, דף היעד יכול להשתמש ברכיב תסריט כדי לקרוא במפורש ל-

 

 

 application.getAttribute("key1") 

 

ולהעביר את התוצאה ל-Type1.

דרך שלישית לשליחת נתונים לדף היעד כשמשתמשים בדרישות GET: ניתן להוסיף את נתוני השאילתה
ל-
URL לדוגמא:

 

 

String Address="/path/resource.jsp?newParam=value";
RequestDispatcher dispatcher=getServletContext().getRequestDispatcher(address);
dispatcher.forward(request,response);
 

שילוב URLs יחסיים בדף היעד

יישומון שרת יכול לקדם את הדרישה למקומות שרירותיים באותו שרת. אך התהליך שונה משימוש ב-sendRedirect method של HttpservletResponse: ראשית sendRedirect דורש מהלקוח להתחבר למשאב חדש ואילו ה-forward method של RequestDispatcher מטופלת כולה בשרת. שנית sendRedirect  לא שומר אוטומטית את כל נתוני הדרישה ואילו forward כן שומר אוטומטית. שלישית, שימוש ב-sendRedirect מביא לכתובת URL סופית שונה ואילו בשימוש ב-forward כתובת ה-URL של יישומון השרת המקורי נשארת כמות שהיא.

 

דרכים חלופיות להשגת RequestDispatcher

ניתן להשתמש ב:

 

 

 request.getRequestDispatcher("file")

 

או על ידי getNameDispatcher של ServletContext כדי לגשת אליהם לפי שמם ולא לפי נתיב המיקום שלהם.

 

הכללת תוכן סטטי או דינאמי

אם יישומון השרת משתמש ב-forward method של RequestDispatcher הוא לא יכול לשלוח פלט ללקוח - זה יעשה על ידי דף היעד. אם יישומון השרת צריך ליצור חלק מהתוכן בעצמו אך הוא משתמש בדף JSP או במסמך HTML סטטי בחלקים אחרים של התוצאה, יישומון השרת יכול לחילופין להשתמש ב-include method של RequestDispatcher יחד עם HttpServletRequest ו-HttpServletResponse. השוני בשימוש ב-include הוא בכך שתוכל לשלוח תוכן לדפדפן לפני שתיצור את הקריאה וכן שהשליטה חוזרת ליישומון השרת לאחר סיום הקריאה include .include  דומה מאוד ל-forward אך יכולה לעשות דבר
ש-
foraward  לא יכול: היא מגדירה אוטומטית תכונות באובייקט HttpServletRequest אשר מתארות את נתיב הדרישה המקורית במקרה שיישומון השרת או דף JSP יזדקקו לנתון זה. תכונות אלו שהמשאב הכלול יכול לקרוא להן על ידי קריאה ל-getAttribute של  HttpServletRequest הן:

 

 

javax.servlet.include.request_uri

javax.servlet.include.context_path

javax.servlet.include.servlet_path

javax.servlet.include.path_info

javax.servlet.include.query_string

 

קידום דרישות מדפי JSP

בדרך כלל הדרישה מגיעה במקור מיישומון שרת ויישומון שרת מקדם אותה לדף JSP, אך ניתן לפעול אחרת. ניתן לקבוע שדף היעד יהיה יישומון שרת. כדי לשלוח דרישות ליישומוני שרת במקום לדפי JSP אין צורך לבצע שינויים בשימוש ב-RequestDispatcher, עם זאת ישנה תמיכה תחבירית מיוחדת בקידום דרישות מדפי JSP. ב-JSP הפעולה jsp:forward פשוטה וניתן ליישם אותה על ידי הפקודה הבאה:

 

 

<jsp:forward page="Relative URL"/>

 

התכונה page יכולה להכיל ביטויי  JSP כך שניתן לחשב את דף היעד בזמן הדרישה.



 

      
  כל הזכויות שמורות למערכות מידע אית"ן