עצה על איך ללמוד JAVA-WEB

YIM222

New member
עצה על איך ללמוד JAVA-WEB

שלום לכולם, אשמח לעצה ברורה מי שיכול.

אני כבר הרבה זמן רוצה ללמוד JAVA -web . אני מכיר את העקרונות של java ברמה כללית, וגם למדתי swing.

אני צריך לשלוט בJAVA-WEB כי זה נדרש לעבודות וכיו"ב. יצא לי גם פעם לעשות פרוייקט בזה, אבל במריחה גדולה, ואני רוצה לשלוט בזה כמו שאני שולט בשאר הענינים.

הבנתי שצריך בעצם ללמוד את Java ee. אבל מה שאני רואה זה מדריכים קצרים ולא מפורטים, ואם מפורטים אז יותר מידי כמו המדריכי הבית של JAVA ששמה אפשר להאבד.
מדריכים כמו זה
https://www.ntu.edu.sg/home/ehchua/programming/java/JavaServletCaseStudy.html
או זה http://www.vogella.com/tutorials/EclipseWTP/article.html

שמראים דוגמאות קוד, וכל מיני שיטות לעבוד, אבל מזה אני לא מצליח להבין איך הדברים פועלים.

אני בנוסף רוצה להבין לגבי כל הענינים שמצויים בקטע הזה - HttpRequest, Rest,
SPA
ועוד.

אין לי בעיה ללמוד לבד, אבל לא רוצה להשקיע במקום הלא נכון, וזה די מתסכל וגם אין הרבה זמן ללמוד. מכל הדוגמאות קוד והג'ינרוטים אני לא מקבל ידע איך לעשות בעצמי אפילו אפליקצה של x+y =z .

אשמח אם מישהו יוכל לשפוך לי קצת אור ולתת לי עצה בעניין.
 

BravoMan

Active member
מה זה Java - web?

זו פעם ראשונה שאני רואה את זה כתוב ככה, ואני לא לגמרי בטוח למה אתה מתכוון.
&nbsp
Java היא שפת תכנות.
אם אתה מכיר אותה ברמה מספיק טובה כדי לכתוב בה יישום משמעותי לשולחן העבודה, כל מה שחסר לך כדי ללמוד שימושים אחרים שלה זה ללמוד את ה-API הרלוונטי לשימושים האלה.
&nbsp
למשל הזכרת swing, אז יש לו API לכל הדברים שהוא עושה: מציג חלונות, מקבל events מהמשתמש וכו'.
&nbsp
יש 2 שימושים ל-Java בהקשר של Web:
צד שרת וצד לקוח.
&nbsp
צד לקוח זה Applet של Java שיורד למחשב של המשתמש ורץ בתוך דפדפן שלו.
הוא דומה לתוכנה שולחנית אבל מוגבל יותר בגלל ענייני אבטחה.
&nbsp
כבר כמעת ולא משתמשים בהם.
&nbsp
צד שרת הוא קוד Java שרץ על השרת של האתר, הוא מקבל בקשות מהמשתמש דרך הרשת, עושה עבודה כלשהי, ומחזיר תוצאה.
&nbsp
לצורך העניין, תוכנת Java צד שרת לא תעשה x+y=z.
היא תקבל בקשה מלקוח עם פרמטרים x, y היא תבדוק שהם בטווח התקין והמותר, והיא תשלח לו חזרה את התשובה z.
&nbsp
איך ללמוד זה דבר מאוד אישי. בד"כ מפתח מנוסה, שכבר מכיר את עקרונות התכנות מסתפק בתיעוד טכני של API בצירוף חיפוש דוגמה איך עושים פעולה ספציפית שהוא רוצה.
&nbsp
למשל אם תרצה לדעת איך התוכנה שלך יכולה לשלוף את x ו-y שהמשתמש שלח, תרצה משהו כזה:
http://lmgtfy.com/?q=how+to+get+url+parameters+in+jsp
&nbsp
ואז תקבל את זה:
http://stackoverflow.com/questions/1890438/how-to-get-parameters-from-the-url-with-jsp
&nbsp
 

YIM222

New member
אז בתור מתכנת מנוסה תסביר לי בבקשה

איך אפשר להבין את הכללים היסודיים של העברת המידע הזו, דרך דוגמאות קוד.

את מה שכתבת לגבי איך הצד שרת-לקוח עובד אני יודע, אבל בGUI היה מדריך שהסביר בפירוט איך אני יוצר compoment , מכניס אותם, עושה event-handler.
אחרי שלמדתי אני בכיף ובקלות יכול לעשות helllo world או X+y בGUI, ודברים כאלה פשוטים. אני יודע את הBasic.

אבל פה אם אני כל פעם רק יעתיק קוד, איך אני אדע את היסודות של הטכניקה הזו?
לדוגמא להעביר בrEst אני יודע שזה מבוקש, אבל אני בתור מתכנת לא אמור לדעת מה אני עושה בעניין. ?
ואם תוכל להסביר לי למה קוראים לכל זה APi מה זה בדיוק API. אני יודע שזה application programming interface אבל לא הצלחתי עד היום להבין מה זה בדיוק.

תודה על זמנך.
 

BravoMan

Active member
נראה שיש פה איזה נתק. איזה חוסר שאני לא ממש יכול לשים

עליו את האצבע.
&nbsp
נתחיל מהסוף: אין דבר כזה מתכנת שכתב יישום GUI ולא מבין מה זה API.
אם הגעת למצב כזה, סימן שסתם העתקת קוד בלי באמת להתעמק.
&nbsp
זה לא ניסיון להעליב אותך, פשוט מדובר במונח ליבה בכל נושא התכנות.
&nbsp
API הוא ממשק דרכו אתה מדבר עם קוד \ תוכנה \ מערכת שאינם חלק מהתוכנה שאתה כותב כרגע.
&nbsp
גם תוכנה שמדפיסה hello world למסוף רוב הסיכויים שמשתמשת ב-API של הספרייה הסטנדרטית של השפה או ישירות של מערכת הפעלה.
&nbsp
ניקח למשל את swing: המחלקות שהוא נותן לך כדי ליצור חלונות ופקדים, והמתודות שלהן שמאפשרות לך להוסיף להן event-handler הם ה-API שלו.
הם הדרך בה התוכנה שלך מדברת עם ספריית swing ומבקשת ממנה לעשות דברים כמו להציג חלון, או להריץ קוד שלך בלחיצה על כפתור.
&nbsp
אני באמת לא מבין אלו יסודות אתה מחפש.
אתה רוצה לדעת איך עובד פרוטוקול http? מה זה get, post וכו'?
&nbsp
אין באמת הבדל בין שלד של תוכנת GUI שמציגה חלון עם hellow world ושלד של JSP.
&nbsp
למען גילוי נאות מעולם לא כתבתי Java צד שרת. יכול להיות שהסיבה שאני לא מבין מה חסר לך ומה אתה מנסה למצוא פה בפורום היא שגם אני לא יודע את הדברים האלה.
אז עד שיבוא מישהו עם ידע רלוונטי, אני אנסה להסביר לך איך אני הייתי פועל לו הייתי צריך להשיג את הידע הזה ולבנות מודול JSP עובד.
&nbsp
הנה למשל המדריך הראשון שעולה ב-Google כשאני כותב בחיפוש JSP basics explaind:
https://www.tutorialspoint.com/jsp/jsp_directives.htm
&nbsp
הוא מתחיל מהסבר קונספטואלי איך JSP עובד, כולל שרטוט של כל הרכיבים, הוא ממשיך עם הסבר איך להתקין שרת Web על המחשב שלך שיריץ את עמוד ה-JSP, אחרי זה הוא מראה סכמה של "מחזור חיים" - איזו מתודה נקראת מתי ומה אמורים לעשות בה.
&nbsp
והוא ממשיך עם דוגמאות והסברים כיצד לבצע פעולות בסיסיות שונות.
&nbsp
לא התעמקתי בו, אבל הוא נראה לי מספיק ביותר כדי להעמיד hellow world עובד על הרגליים, לגשת אליו מדפדפן, ומשם אפשר להמשיך לשחק - להוסיף דברים, לשנות דברים לראות איך השינויים משפיעים.
&nbsp
אם אני צריך להבין מונח ספציפי, למשל REST, אני מתחיל מעמוד ה-Wiki שלו:
https://en.wikipedia.org/wiki/Representational_state_transfer
&nbsp
בעמוד הזה אפשר לראות שאין כאן שום דבר מפחיד או מסובך:
בסה"כ השרת מעמיד לרשות הלקוח מספר פונקציות עם פרמטרים, שהגישה אליהן היא כמובן דרך url עם פרמטרים מתאימים, וכל פונקציה כזו מחזירה נתונים במבנה מסודר של XML או JSON.
&nbsp
אם ההסבר הזה עדיין לא מספיק ברור בשביל, אתה צריך להשלים ידע במונחים שחסרים.
בגדול, מה שקורה זה שאתה ניגש לכתובת, מקבל חזרה קובץ XML.
 

Guy Yafe

New member
כמה הערות

לא הייתי מתחיל מ-JSP.
אוראקל סיבכו את התקן הזה שלא לצורך, והיום יש נטייה להעדיף שימוש בשרת JAVA בשביל תוכן דינמי בלבד ואילו את התוכן הסטטי כמו דפי הHTML לכתוב באמצעות אנגולר או מתחרותיה. לפעמים יש אפילו הפרדה מלאה בין השרתים.
&nbsp
כמו כן, REST לאו דווקא מחזיר XML. הוא מחזיר כל מה שתבקש ממנו (PDF, JSON, JPEG וכו').
המהות של REST היא ניסוח נכון של הURL ושימוש ב-verbs הנכונים בבקשות.
 

YIM222

New member
איש יקר - לא נעלבתי - שאלתי באמת בתמימות

שבתור מתכנת מנוסה, תסביר לי איך אתה ניגש ללמוד נושא שאתה פחות מכיר, כי אני רואה שאני נתקע בניסיון ללמוד דברים חדשים, ואני מרגיש שזה לא שאני לא יכול להבין או שיש איזה קורס עכשיו שישלים לי מושגים, כי גם שמה אני יאבד. פשוט חסר לי להבין את הדרך ללמוד את הדברים היותר מורכבים, אלו שאין להם מדריך מסודר.

אני צריך שיטה לרוץ איתה כשאני לומד דברים.

אני באמת מעריך את הזמן והמאמץ שאתה ואנשים כמוך עוזרים לאחרים להבין דברים ולפתור בעיות.

אני גם מאמין ב"אין הביישן למד ואין הקפדן מלמד". אין לי בעיה לשאול דברים, למרות שלעיתים חלק מהאנשים מבינים את זה לא נכון או עוקצים ברמת הידע שלך (ואני לא חושב שאתה מאלה), כמה שבן אדם יותר יקבל עקיצות וישים בצד את הזילזול וייקח את הידע הטוב, ככה הוא יגדל.

ולגבי הAPI ובכלל עוד דברים. אני חושב שיש מצב ביניים שבן אדם מבין ולא מבין, הוא מבין איך משהו פועל אבל את ההסבר המוצק של העניין הוא עוד לא יודע לקשר, ולכן אני מחפש תמיד לחדד את הדברים כמו שצריך, ולא ללכת עם הבנות לא נכונות.

בעניין הנ"ל פשוט אני מחפש נקודת התחלה, כדי להבין איך לעשות אפליקציית web כנראה שאני צריך יותר לקרוא את הקוד ואת התיעוד של הAPI.

תודה רבה על התשובה זה שפך הרבה אור!
 

nocgod

New member
אין שיטה ללמוד חומר חדש - כל אחד ואיך שהוא מצליח ללמוד

מי שמכיר את עקרונות הטכנולוגיה אותה הוא מנסה ללמוד משהו חדש - ישליך על מה שהוא מכיר
מי שלא מכיר את עקרונות הטכנולוגיה יקרא blogים בנושא, יראה דוגמאות קוד ויכתוב קוד לבד כדי לנבור בטכנולוגיה ולהכיר אותה
מי שלא מכיר בסיס של פיתוח תוכנה, את הקומפוננטות של תוכנה ומה המשמעויות קודם כל צריך להכיר את הבסיס ואת העקרונות השולטים בבסיס כדי להמשיך הלאה. זה נשמע קלישאתי, אבל הבסיס הוא הכי חשוב.

לפי מה שכתבת אני מניח שאתה רק מתחיל ללמוד פיתוח תוכנה.
אני חייב להגיד לך - עצור!
תחזור לבסיס, תלמד את השפה, איך היא עובדת ואיך חלקים בה עובדים.
תבין מה זה API, זה לא רק ראשי תיבות כלשהן, תבין מה הוא נותן ואיך אתה צורך אותו. כי API זה לא רק REST.
API זה ממשק פיתוח שנותנות לך ספריות, לדוגמא swing חושפת בפנייך API פיתוח. כל ספריה שהיא תחשוף בפניך איזשהו API שבאמצעותו אתה תפתח את התוכנות שלך.
כדי להבין מה זה REST ואיך הוא עובד קצת להתחיל ולהבין איך עובד פרוטוקול HTTP ברשת, מה המשמעות שלו, מה הצורה שלו, איך הוא מעביר מידע ולמה דווקא ככה. ברגע שאתה מבין מה ואיך, תתחיל ללמוד פריימוורק כלשהו בשפה שתבחר (נניח java) ותעבור על דוגמאות שלו, קטעי קוד, תיעוד, הסברים ודוגמאות שלרוב נלוות לפריימוורק טוב.
אין פה דרך קיצור - אם אתה לא מכיר צריך לשבת על התחת ולהכיר, וממה שכתבת אני מבין שאתה לא מכיר ולא מבין.
ברגע שתכיר אתה צריך לשבת על התחת ולחבר את הנקודות בין מה שאתה מכיר, ולהשלים את החסר באמצעות תיעוד, דוגמאות, בלוגים, ניסיון ושאלות במקומות המיועדים לכך (stack overflow לדוגמא)
 

YIM222

New member
יפה כתבת בהתחלה לגבי השיטה ללמוד ושאר העניין המקצועי

אבל אח"כ אתה טועה. לא אני לא בהתחלה ולא מכיר ולא מבין בכלל.
אין לי בעיה שתגיד את זה או תחשוב ככה, וגם אם זה היה המציאות הייתי שמח להודות בה. אבל זה לא נכון.

לדעתי גם לא נכון להגיד ככה לבן אדם כי אתה עלול להחליש את דעתו מאוד ולגרום לו לחזור אחורה. אני מכיר את החיים ולא סופר. אחרים יכולים לקחת את זה קשה.

דווקא אני בנקודה שכן צריך לעשות הרבה דברים ותוך כדי אתה מבין את התאוריה ואיך הדברים פועלים. לא מיותר לציין (כי אנשים שוכחים משום מה) שיש את הקטע של נסיבות החיים וכורח המציאות. אז אדם צריך לעשות בהתחלה דברים יעילים גם בעלות של פחות דישה בידע תאורתי. וואלה לא לכל אחד יש את הפריבליגיה לשבת ולהוציא ים כספים וזמן על ידיעות טכנולוגיות. אני כמעט בטוח שאם אני שומע לך עכשיו ועוזב הכל ועושה קורס מדעי המחשב, אני חוזר תוך כמה שבועות לעבוד בתור שליח פיצה עד זמן בלתי ידוע. וכל הידע שצברתי עד עכשיו בדם, ייזרק לפח.

בעולם התיכנות (ובכלל) אנשים נוטים כשרואים מישהו ששואל שאלות להשליך ישר על הרמת ידע או יכולות שלו, בדרך כלל בהקטנה קיצונית. במקום לנסות להבין איפה הוא ומה לא מובן לו.

אני אומר whatever סבבה , אבל סתם בשביל שאתה או מישהו אחר יידעו שהם טועים ולא להגיב בצורה כזאת על אחרים ולהחליט החלטות , מוזמנים לבחון את הידע שלי בפרטי.

תודה שבת שלום
 

YIM222

New member
פעם שיחקנו בסוני כדורגל קונאמי כמה חברים

ובא חבר שלא ראיתי אותו משחק, אז התחלתי להסביר לו ולנסות לעזור לו איך ומה לעשות. היה לי כבר ניסיון בזה, אני שחקן בינוני, אז נסיתי לרחם עליו ולהסביר.

אחרי כמה דקות הוא כבר דרס את כולם.

הנמשל ברור.
 

nocgod

New member
חבר - אתה מתבלבל

אני לא בא עכשיו לבדוק את הידע שלך או היכולות שלך, אין לי בזה צורך.
שאלת שאלות, כתבת דברים, לפי זה אנשים קיבלו את הרושם שלהם עלייך.

אני לא בא להטיף, ולא שלחתי אותך לקורס.
לפי מה ששאלת ואיך ששאלת אני מניח שאתה לא מבין הרבה דברים שאתה צריך לדעת לפני שאתה מכניס את עצמך לסיבוכים של פיתוח ווב, כמו שכתבו לך זה לא עניין פשוט ולא עיניין קל עם הרבה מרכיבים פרוטוקולים המשתתפים בסינרגיה על מנת לתת ללקוחות שירות.

ברוב המקרים שאני מכיר כשאדם מתחיל לעשות לפני שהוא מבין התוצאה היא לא רצויה, בן אם זה הטמעה של פרקטיקות רעות בקוד, או יותר גרוע הרגל לפרקטיקות רעות.

לכולנו יש נסיבות חיים, ילדים, נסיעות, משפחה , תחביבים וחברים. אף אחד לא ביקש ממך לזרוק הכל ולעבוד בתחנת דלק עד שתשלים חומר. את סדרי העדיפויות שלך תעשה לבד לא לי לקבוע לך אותם. אני לומד בלילות או תוך כדי עבודה בזמן שאני מטמיע טכנולוגיות חדשות או משתמש בהן כדי להקל עלי. כל זה עם אישה, ילדה, כלבה, חברים, משפחה וכל מה שהחיים הבוגרים מביאים איתם.

אתה רוצה לפתח ווב? תהיה רציני, צא ממגננה, תקבל ביקורת ותוציא מזה את המירב.
אנחנו לא יכולים לנחש מה רמת הידע שלך אנחנו רק יכולים להניח עליה לפי מה שכתבת ואיך שכתבת. רק אתה יודע מה אתה יודע.
 

Guy Yafe

New member
תכנות ל - WEB הוא לא בניית דף וורדפרס

יש נטייה לחשוב ש"בניית אתרים" היא תחום אליו כל מי שלמד לכתוב Hello World בJAVA יכול להיכנס בקלות.
&nbsp
חשוב לי קודם להבהיר שזה נושא מאוד סבוך, שמערב תחומים שונים: ריבוי תהליכים, בסיסי נתונים, עבודה עם רשת בעשרות פרוטוקולים שונים, אבטחת מידע וכמובן אלגוריתמיקה.
&nbsp
הסבר קצר על מה זה אתר אינטרנט: הדפדפן שלך יודע להציג רק HTML. הוא יודע לעצב אותו רק עם CSS, ויודע לייצר תוכן בצורה דינמית רק באמצעות Javascript. זו כל המהות של צד לקוח.
&nbsp
מכאן נשאלת השאלה איך הוא מקבל את הקבצים האלה? את הקבצים האלה הוא מקבל דרך הרשת באמצעות פרוטוקול HTTP. מי ששולח לו את הקבצים זו תוכנה שנקראת שרת אינטרנט. כל תפקידו של שאת האינטרנט היא לייצר תוכן שמגיע אל הלקוח.
שרת אינטרנט יכול לשלוח את הקבצים בשתי דרכים:
קבצים סטטיים: אלו קבצים שנכתבו מראש והשרת מעלה אותם ממערכת הקבצים ושולח ללקוח. יש הרבה מאוד שרתים כאלה, הבחירה תלויה בסביבה שאתה עובד בה.
תוכן דינמי: זהו תוכן שנוצר על ידי השרת בזמן ריצה ותלוי במידע שמגיע מהלקוח.
כדי לייצר תוכן דינמי, יש לכתוב באמצעות שפת תכנות כלשהי, וכאן JAVA נכנסת לתמונה.
שים לב שכל מה שרשמתי עד עכשיו אינו קשור לJAVA ואתה בכל זאת חייב להכיר אותו לפני שאתה מתחיל לתכנת בJAVA.
&nbsp
המהנדסים של JAVA בנו API לא רע בכלל כחלק מJEE. ספציפית אני מדבר על החלק של Servlets. זהו API שמגדיר ב"שפה JAVA-ית" מהן בקשות HTTP, מהן תשובות HTTP ואיך לעבוד איתן.
כדי לעבוד עם ה-API הזה אתה צריך שרת שנקרא Servlet Container , כמו למשל Tomcat.
אנחנו עדיין רק בהתחלה: TOMCAT יודע להגיש גם תוכן סטטי, בנוסף התקן מגדיר גם דפי JSP שהם דפים "חצי סטטיים" כלומר תוכן שחלקו מוכן מראש ואליו מוסיפים מידע דינמי.
על כל זה אפשר להוסיף servlets שכבר נכתבו מראש ויודעים לנהל פרוטוקול REST.
&nbsp
אחרי שתלמד את כל זה, יכול להיות שתגיע למסקנה המתבקשת ששרת JAVA די גרוע בהגשה של תוכן סטטי, וכדאי לך להפריד בין התוכן הדינמי לסטטי. את התוכן הסטטי לייצר אולי באמצעות אנגולר או ריאקט.
&nbsp
אני מקווה שהבנת עד עכשיו שזה נושא מאוד מאוד סבוך, ואי אפשר להסביר אותו כאן על קצה המזלג.
&nbsp
ההצעה שלי היא שתתחיל ללמוד על איך עובדים servlets: אני ממליץ שתקנה את המדריכים של MURACH בנושא. אלה מדריכים מעולים, שמסבירים בצורה יסודית אבל בשפה פשוטה ומלווה בדוגמאות על הקמת שרת אינטרנט, על Servlets ועל JSP, וקצת על HTML וCSS.
&nbsp
אחרי שתבין את הנושא הזה לעומק, תוכל לחשוב איזה אתר בדיוק אתה רוצה לבנות ולכן איך להתקדם הלאה.
&nbsp
 

YIM222

New member
אחלה תשובה - אשמח אם תוכל לחדד

לאור כל מה שכתבת. אני יודע איך פועלת אפליקציית ווב קצת בJAVA. יודע CSS-HTML. עשיתי ביחד עם עוד מישהו אפליקצייה של קופונים והעניינים שם עבדו עם העברת מידע בREST ע"י JSON. וAJAX.

אני רוצה דווקא לדעת JEE בהתחלה. וReST כי יש לזה ביקוש באיזה תחום אני מחפש. אח"כ אתקדם עוד לשאר הדברים.

המטרה הראשונית היא - לדעת לעשות מאפלקצייה שרצה בJAVA אפליקציה שעובדת בserver (לוקאל לצורך העניין) עם הAPI של rest.

תודה

התפנה לי כרגע זמן כ-80 שעות, בד"כ אין לי כל כך הרבה זמן, ואני רוצה לנצל את הזמן של הלימוד בצורה הכי יעילה שיש.

כרגע אני מחפש מידע באינטרנט.
אז ודאי לפי כל מה שכתבת, זה לא אמנם מורכב, אבל חייבת להיות דרך שללמוד את זה לפי הסדר ולהתקדם.

אז מאיפה כדאי לי להתחיל ?

תודה רבה
 

Guy Yafe

New member
כבר רשמתי לך מאיפה להתחיל

קנה ספר על Servlets ועל TOMCAT. אפילו המלצתי ספציפית על הספרים של MURACH. אני רואה עכשיו שהם לא מגיעים בגרסה אלקטרונית אז אולי עדיף לך ספרים אחרים. פשוט הסתכל בתוכן ובדוק מה הכי מתאים לך.
 

YIM222

New member
תודה


 
למעלה