Transcript JSP

© Keren Kalif
JSP
‫קרן כליף‬
© Keren Kalif
2
:‫ביחידה זו נלמד‬
JSP ‫ מהו‬
JSP ‫ מאחורי הקלעים של‬
:JSP ‫ רכיבי‬
scriptlets elements 
directives 
actions 
destroy -‫ ו‬init
web.xml -‫קונפיגורציית ה‬
Beans
Tag Libs
Tag Files
EL






‫רקע‬
‫‪© Keren Kalif‬‬
‫‪ ‬ראינו ש‪ servlet -‬היא תוכנית ‪ JAVA‬שרצה על השרת‪ ,‬ומחזירה‬
‫דף ‪ HTML‬כ‪response -‬‬
‫‪ ‬יצירת דף ה‪ HTML -‬בצורה זו אינה נוחה ומסורבלת‬
‫‪ ‬אין הפרדה בין הלוגיקה לבין התצוגה‬
‫‪ ‬הפתרון הוא כתיבת דפי ‪ JSP‬שהם למעשה דפי ‪ HTML‬שניתן‬
‫לשבץ בהם קוד ‪JAVA‬‬
‫‪3‬‬
‫דוגמא ל‪JSP -‬‬
‫משפטי בקרה יכתבו ב‪-‬‬
‫‪ JAVA‬ועטופים ב‪-‬‬
‫<‪>% ????? %‬‬
‫הצגת ערכים תבוצע באמצעות‬
‫<‪>%= ????? %‬‬
‫‪© Keren Kalif‬‬
‫‪4‬‬
‫מה קורה מאחורי הקלעים?‬
‫‪© Keren Kalif‬‬
‫‪ ‬השרת המקבל ‪ URL‬של ‪ JSP‬מתרגם אותו ל‪ servlet -‬שבתוכו‬
‫השיטה ‪ _jspService‬ומריץ אותו‬
‫‪ Servlet‬הוא קוד ‪ JAVA‬המכיל המייצר‬
‫בתוכו קוד ‪HTML‬‬
‫‪ JSP‬הוא ‪ HTML‬המכיל בתוכו קוד ‪JAVA‬‬
‫‪5‬‬
‫רכיבים בדף ‪JSP‬‬
‫‪© Keren Kalif‬‬
‫‪6‬‬
‫‪ ‬דף ‪ JSP‬מורכב מ‪ 3 -‬סוגי רכיבים‪:‬‬
‫‪ .1‬רכיבי תסריט (‪ :)script element‬באמצעותם מייצרים קוד ‪JAVA‬‬
‫ב‪JSP -‬‬
‫‪ .2‬הנחיות (‪ :)directives‬מכיל הגדרות כלליות על ה‪ sevlet -‬שנוצר‬
‫(האם לייצר ‪ session‬חדש‪ import ,‬לספריות‪ ,‬פעולות‬
‫‪ include/forward‬ועוד)‬
‫‪ .3‬פעולות (‪ :)action‬מאפשרות שימוש‪/‬הפניה בקבצים קיימים‬
© Keren Kalif
7
)script elements( ‫רכיבי תסריט‬
)comments( ‫ הערות‬.1
<%-- comment --%>
)expressions( ‫ ביטויים‬.2
<%= the expression %>
‫ הקוד יתורגם לקוד בתוך המחלקה‬:(declarations) ‫ הצהרות‬.3
)‫(הגדרת תכונות ומתודות‬
<%! the declared variable/method %>
‫ הקוד יתורגם‬:JAVA ‫ הרצת פקודות‬:)scriplet( ‫ ישומוני תסריט‬.4
doGet / doPost / processRequest ‫לתוך המתודה‬
<% statements to run %>
‫‪© Keren Kalif‬‬
‫‪( Scriptlets‬ישומוני תסריט)‬
‫‪ ‬מאפשרים הגדרת משתנים לוקאליים במתודה והרצת פקודות‬
‫הגדרת משתנים לוקאליים‬
‫הדפסה דרך ה‪scriplet -‬‬
‫באמצעות ‪( out‬לא מומלץ)‬
‫שימוש במשתנים‬
‫שהוגדרו ב‪scriptlet -‬‬
‫‪8‬‬
‫‪ :Exprssions‬שימוש בביטויים‬
‫‪ ‬ניתן להשתמש בביטויי ‪ JAVA‬ב‪ JSP -‬באופן הבא‪:‬‬
‫מטרת ה‪ expression -‬להכניס ערך‬
‫באופן ישיר לפלט והשימוש יתבצע בתוך‬
‫>‪<%= … %‬‬
‫‪© Keren Kalif‬‬
‫‪9‬‬
‫‪ :Declaration‬הצהרת תכונות ושיטות‬
‫‪ :Expressions‬שימוש בביטויים‬
‫הגדרת תכונות תיעשה בתוך‬
‫>‪<%! … %‬‬
‫שימוש ב‪expression -‬‬
‫‪© Keren Kalif‬‬
‫‪10‬‬
‫דוגמא להצהרת מתודות ושימוש בהן‬
‫‪© Keren Kalif‬‬
‫‪11‬‬
‫תרגום מ‪ JSP -‬ל‪servlet -‬‬
‫קוד שנכתב ב‪ JSP -‬בתוך >‪ <%! … %‬יתורגם לקוד במחלקה‬
‫קוד שנכתב ב‪ JSP -‬בתוך >‪<% … %‬‬
‫מתורגם כקוד הנכתב במתודה המופעלת‬
‫עם הפנייה מהלקוח‬
‫קוד שנכתב ב‪ JSP -‬בתוך >‪<%= … %‬‬
‫מתורגם כקוד להדפסה במתודה‬
‫המופעלת עם הפנייה מהלקוח‬
‫‪© Keren Kalif‬‬
‫‪12‬‬
‫‪© Keren Kalif‬‬
‫‪ :Implicit Objects‬משתנים המוגדרים מראש‬
‫נשים לב לשימוש במשתנים‬
‫‪ request‬ו‪session -‬‬
‫שהוגדרו בתרגום ל‪servlet -‬‬
‫‪13‬‬
‫הגדרת ויצירת ה‪Implicit Objects -‬‬
‫ניתן לראות את הגדרתם ב‪-‬‬
‫‪ Servlet‬המתורגם מה‪JSP -‬‬
‫‪© Keren Kalif‬‬
‫‪14‬‬
‫הנחיות )‪(directives‬‬
‫‪© Keren Kalif‬‬
‫‪ ‬נועדו לקבוע הגדרות כלליות לקובץ ה‪ servlet -‬ומחולקות ל‪3 -‬‬
‫סוגים של הנחיות‪:‬‬
‫‪ :Page .1‬מכילות הגדרות הרלוונטיות לכל דף ה‪JSP -‬‬
‫‪ :Include .2‬מאפשר לשתול קוד מ‪ JSP -‬אחר‬
‫‪ :Taglib .3‬יסקר בפרק הבא עם ‪beans‬‬
‫‪ ‬הפקודות יהיו במסגרת >‪<%@ … %‬‬
‫‪15‬‬
© Keren Kalif
16
Page Directive -‫דוגמא לשימוש ב‬
© Keren Kalif
17
Page Directive -‫תכונות וערכים ל‬
-‫ כרגע תומך רק ב‬.JSP -‫ שפת התכנות בה נכתב ה‬:language
JAVA
<%@page language="java" %>
‫ ב"מ היא‬.JSP -‫ יהיו זמינים ל‬session -‫ האם נתוני ה‬:session
true
<%@page session="true" %>
‫ הדף אליו נעבור במקרה שנתקל בחריגה לא‬:errorPage
‫מטופלת‬
<%@page errorPage="error.jsp" %>
.‫ של דף אחר‬errorPage ‫ מגדירה הדף יכול להיות‬:isErrorPage
false ‫ב"מ הוא‬
<%@ page isErrorPage="true"%>




© Keren Kalif
18
)2( Page Directive -‫תכונות וערכים ל‬
‫ באמצעות‬servlet -‫ מגדירה מחרוזת שניתן יהיה לקבלה ב‬:info
getServletInfo
<%@page info= "this is the text" %>
‫ גודל המסמך עד שליחתו ללקוח‬:buffer
<%@ page buffer="32kb"%>
<%@ page buffer="none"%>
‫ האם באפר הפלט יתנקה כאשר יתמלא או האם‬:autoflush
true ‫ ב"מ הוא‬.‫תזרק חריגה‬
<%@ page autoflush="false"%>
‫ מאפשר גישה בו"ז מכמה‬servlet -‫ כב"מ ה‬:isThreadSafe
:SingleThreadModel ‫ כדי לממש את הממשק‬.‫ שונים‬thread
<%@ page isThreadSafe=“false"%>




© Keren Kalif
19
)3( Page Directive -‫תכונות וערכים ל‬
‫ ירש ממנה‬servlet -‫ מגדיר את מחלקת האב שה‬:extend
<%@ page extends="package.class"%>
servlet -‫ הגדרה אילו מחלקות נייבא ל‬:import
<%@ page import="java.util.*"%>
‫ ב"מ‬.)MIME( ‫ הגדרת סוג המסמך שישלח ללקוח‬:contentType
text/html ‫ הוא‬JSP -‫ הנוצר מ‬servlet ‫עבור‬
<%@ page contentType="text/plain"%>
‫ לדף התשובה‬endcoding -‫ ערך ה‬:pageEncoding
<%@ page pageEncoding=“UTF-8"%>




‫‪© Keren Kalif‬‬
‫‪Include Directive‬‬
‫‪ ‬מאפשרת שתילת קוד המתבצעת בזמן התרגום ל‪,servlet -‬‬
‫כלומר‪ ,‬בזמן ההרצה הראשונה‪ .‬משמע‪ ,‬אם יש שינוי יש בקובץ‬
‫אותו שותלים‪ ,‬יש לתרגם מחדש ל‪servlet -‬‬
‫‪20‬‬
‫פעולות )‪(actions‬‬
‫‪ ‬כוללות ‪ 2‬סוגים של תגיות שרלוונטיות כרגע‪:‬‬
‫‪ <jsp:inlcude> .1‬לשתול ‪ JSP‬או ‪ HTML‬אחרים‬
‫‪ <jsp:forward> .2‬הפנית הבקשה לדף אחר‬
‫(שאר התגיות קשורות ל‪ beans -‬וילמדו בהמשך)‬
‫‪© Keren Kalif‬‬
‫‪21‬‬
© Keren Kalif
22
‫ דוגמא‬jsp:include
request -‫הדף נשתל בקוד בזמן ה‬
‫קנפיגורציית ה‪ JSP -‬ב‪web.xml -‬‬
‫במקום ‪servlet-class‬‬
‫מומלץ כאשר לא רוצים‬
‫שהפניה תהייה עם סיומת ‪jsp‬‬
‫‪© Keren Kalif‬‬
‫‪23‬‬
© Keren Kalif
‫קריאת‬
-‫פרמטרים מה‬
web.xml
24
‫דריסת ‪ jspInit‬ו‪jspDestroy -‬‬
‫‪© Keren Kalif‬‬
‫‪ ‬אסור לדרוס את ‪ init‬או את ‪ destroy‬מאחר ולרוב הם‬
‫ממומשים ע"י התרגום ל‪ servlet -‬באופן אוטומטי‬
‫‪ ‬לכן נממש את ‪ jspInit‬ואת ‪ jspDestroy‬במקום והם יקראו‬
‫מה‪ servlet -‬ע"י ‪ init‬ו‪ destroy -‬בהתאמה‬
‫‪25‬‬
© Keren Kalif
26
‫דוגמא‬
‫תרגיל‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪© Keren Kalif‬‬
‫כתוב ‪ HTML‬הקורא ‪ 2‬מספרים ופעולה חשבונית‬
‫יש להפעיל ‪ JSP‬שיקבל את הנתונים ויציג את התוצאה‬
‫יש לקרוא מה‪ init-param -‬את הצבע שאיתו תוצג התשובה‬
‫יש להציג את תוצאת החישוב‬
‫במידה ואחד הערכים אינו תקין יש להציג ‪error page‬‬
‫‪27‬‬
‫‪© Keren Kalif‬‬
‫‪Bean‬‬
‫‪28‬‬
‫‪ ‬באמצעות ‪ <%! … %> declerations‬יצרנו משתני מופע‬
‫למחלקת ה‪servlet-‬‬
‫‪ ‬באמצעות ‪ <%...%> scriptlets‬יצרנו משתנים לוקאליים למתודה‬
‫‪service‬‬
‫‪ ‬באמצעות ‪ beans‬נייצר משתנים שניתן לאחסן אותם ב‪-‬‬
‫‪ page/application/session/request‬ללא פניה מפורשת ל‪-‬‬
‫‪ServletContext‬‬
‫‪ ‬עבודה עם ‪ beans‬מאפשרת לייצר ולגשת לאובייקטים ללא קוד‬
‫‪ JAVA‬מפורש‬
‫יצירת מחלקת ‪bean‬‬
‫‪© Keren Kalif‬‬
‫‪ ‬כדי שמחלקה תוכל לשמש כ‪ bean -‬עליה להכיל את הדברים‬
‫הבאים‪:‬‬
‫‪default c’tor ‬‬
‫‪ ‬התכונות יהיו ‪ private‬והגישה אליהן תהיה באמצעות ‪ setXXX‬ו‪-‬‬
‫‪ getXXX‬בלבד‬
‫‪ ‬המחלקה חייבת להימצא בתוך ‪package‬‬
‫‪ ‬האובייקט נוצר בפנייה הראשונה ונשמר על ה‪-‬‬
‫‪page/application/session/request‬‬
‫‪29‬‬
‫דוגמא – מחלקת ‪bean‬‬
‫‪ ‬המחלקה נמצאת בתוך ‪package‬‬
‫‪ ‬יש ‪default c’tor‬‬
‫‪ ‬יש ‪ set‬ו‪ get -‬לכל תכונה שנרצה‬
‫לעדכן‬
‫‪© Keren Kalif‬‬
‫‪30‬‬
© Keren Kalif
31
‫דוגמא‬
‫דוגמא‬
‫הפעלת ה‪ JSP -‬הראשון עם פרמטר‬
‫‪© Keren Kalif‬‬
‫‪32‬‬
‫הפלט‬
‫‪© Keren Kalif‬‬
‫‪33‬‬
‫האובייקטים שנשמרו על ה‪ session -‬וה‪-‬‬
‫‪ application‬נשמרו בין ה‪ request -‬השונים‬
‫‪© Keren Kalif‬‬
‫העברת נתונים מה‪ request -‬ל‪bean -‬‬
‫משמע יש לקרוא את כל הפרמטרים שהועברו‬
‫ב‪ request -‬ולחפש עבורם ‪ set‬מתאים‬
‫‪34‬‬
‫שימוש ב‪getProperty -‬‬
‫עדיין אין ערך לתכונה ‪name‬‬
‫השמת ערך מה‪ request -‬בתכונה ‪name‬‬
‫עכשיו יש ערך לתכונה ‪name‬‬
‫‪© Keren Kalif‬‬
‫‪35‬‬
‫‪© Keren Kalif‬‬
‫‪taglib‬‬
‫‪36‬‬
‫‪ tag library ‬מאפשרת לייצר תגיות נוספות פרט ל …‪<jsp:XXX‬‬
‫>כך שכל תג בעל קידומת מייצג מחלקה‬
‫‪ ‬המטרה‪ :‬לעבוד עם קוד שדומה ל‪ xml -‬מאשר עם קוד ‪java‬‬
‫‪ taglib ‬מורכב מ‪ 2 -‬חלקים‪:‬‬
‫‪ :Tag Handler .1‬מחלקת ‪ java‬המגדירה כיצד התג יתורגם ל‪java -‬‬
‫בתרגום מה‪ jsp -‬ל‪servlet -‬‬
‫‪ .2‬קובץ ‪ :)Tag Library Descriptor( TLD‬קובץ שמגדיר את המיפוי‬
‫מתג למחלקה‬
‫‪© Keren Kalif‬‬
‫‪Tag Handler‬‬
‫‪37‬‬
‫‪ ‬אלו מחלקות שתפקידן להגדיר כיצד יתורגם השימוש ב‪ tag -‬לקוד‬
‫‪java‬‬
‫‪ ‬כדי שמחלקה תוכל להיות ‪ Tag Handler‬עליה לממש את‬
‫הממשקים הבאים‪:‬‬
‫‪ :Tag ‬המתודות ‪doStartTag, doEndTag‬‬
‫‪ :BodyTag ‬המתודה ‪doBodyTag‬‬
‫‪ ‬כאשר יוצרים קובץ ‪ Tag Handler‬ב‪ NetBeans -‬הוא כבר יורש‬
‫מהמחלקה ‪ SimpleTagSupport‬אשר מממשת ‪ 2‬ממשקים אלו‬
‫ועלינו לממש רק את ‪doTag‬‬
© Keren Kalif
38
‫דוגמא‬
‫קובץ ‪tld‬‬
‫אנחנו בוחרים את שם התגית‬
‫מיקומו בפרוייקט‪:‬‬
‫‪© Keren Kalif‬‬
‫‪39‬‬
‫‪© Keren Kalif‬‬
‫שימוש ב‪taglib -‬‬
‫לבחירת המתכנת‪ ,‬הקידומת‬
‫בה נשתמש ב‪JSP -‬‬
‫שם התגית כפי שהוגדר‬
‫בקובץ ה‪tld -‬‬
‫שתילת התוכן‬
‫הנכתב ע"י ‪doTag‬‬
‫‪40‬‬
© Keren Kalif
41
servlet -‫ ל‬JSP -‫תרגום ה‬
‫‪© Keren Kalif‬‬
‫‪ taglib‬המקבל‬
‫פרמטרים‬
‫לשים לב לפורמט‬
‫ה‪ set -‬וה‪get -‬‬
‫‪42‬‬
© Keren Kalif
43
‫ עם פרמטרים‬taglib -‫שימוש ב‬
‫‪© Keren Kalif‬‬
‫‪Tag File‬‬
‫‪ ‬עבודה עם ‪ taglibs‬מעט מסורבלת עקב הצורך לתחזק גם ‪tag‬‬
‫‪ handler‬וגם את קובץ ה‪tld -‬‬
‫‪ ‬בגרסאת ‪ JSP2.0‬פשטו את מנגנון השימוש ב‪ taglib -‬בעזרת‬
‫‪:tag files‬‬
‫‪ ‬עבור כל תג נכתוב קובץ אחד עם סיומת ‪ tag‬המחליף את שני‬
‫הקבצים הנ"ל‬
‫‪44‬‬
‫דוגמאת שימוש ב‪Tag File -‬‬
‫‪© Keren Kalif‬‬
‫‪45‬‬
‫מיקומו בפרוייקט‪:‬‬
‫שימוש בקוד ‪JSP‬‬
‫‪© Keren Kalif‬‬
‫‪46‬‬
‫‪Tag File‬‬
‫המקבל‬
‫פרמטרים‬
‫יש לכתוב פונקציה‬
‫שתקבל את הפרמטר‬
‫‪© Keren Kalif‬‬
‫)‪JSP Expression Language (EL‬‬
‫‪47‬‬
‫‪ ‬מטרתה לאפשר גישה נוחה לאובייקטים הנפוצים בשימוש ה‪JSP -‬‬
‫למשל ‪ session, request‬וכד'‬
‫‪ ‬השימוש ב‪ declarations, expressions -‬וב‪ directives -‬הוא‬
‫בתוך תגי >‪ <% … %‬אשר דורשים מאיתנו לפתוח ולסגור את תגי‬
‫ה‪ html -‬באמצע על‪-‬מנת להשתמש בהם‬
‫‪ ‬השימוש ב‪ EL -‬מאפשר סינטקס פשוט יותר באמצעות הערכת‬
‫הביטוי שבתוך ה‪${…} -‬‬
‫דוגמא פשוטה לשימוש ב‪EL -‬‬
‫‪ JSP EL‬אינם מזהים את האובייקטים המזוהים ע"י ה‪ ,JSP -‬אך‬
‫יש לו שמות מוגדרים עבור על אחד מן האובייקטים הללו‬
‫פניה לפרמטר שנקרא‬
‫‪firstName‬‬
‫אפשר גם כך‬
‫‪© Keren Kalif‬‬
‫‪48‬‬
© Keren Kalif
49
EL -‫רשימה חלקית של האובייקטים שבשימוש ה‬
request -‫ לקבלת נתון כפרמטר מה‬:param
‫ לקבלת ערך עוגייה‬:cookie
web.xml -‫ ערך לקריאה מה‬:initParam
pageScope
requestScope
sessionScope
applicationScope







‫תרגיל‬
‫‪ ‬כתיבת המחשבון תוך שימוש ב‪bean -‬‬
‫‪ ‬כתיבת המחשבון תוך שימוש ב‪Taglib -‬‬
‫‪ ‬כתיבת המחשבון תוך שימוש ב‪TagFile -‬‬
‫‪© Keren Kalif‬‬
‫‪50‬‬
© Keren Kalif
51
:‫ביחידה זו למדנו‬
JSP ‫ מהו‬
JSP ‫ מאחורי הקלעים של‬
:JSP ‫ רכיבי‬
scriptlets elements 
directives 
actions 
destroy -‫ ו‬init
web.xml -‫קונפיגורציית ה‬
Beans
Tag Libs
Tag Files
EL





