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