פרמטרים של אתחול ההקשר וה- Servlet

1. סקירה כללית

Servlets הם מחלקות Java רגילות הפועלות במיכל servlet.

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

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

ניתן לאתחל פרמטרים אלה ולקשור אותם להיקף רחב של יישומים (פרמטרים של הקשר) ולהיקף ספציפי לסרוולט (פרמטרים של servlet).

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

2. אתחול פרמטרים של סרוולט

אנו יכולים להגדיר ולאתחל פרמטרים של סרוולט באמצעות הערות ומתאר הפריסה הסטנדרטי - ה- "Web.xml" קוֹבֶץ. ראוי לציין ששתי האפשרויות הללו אינן בלעדיות זו לזו.

בואו נבדוק לעומק כל אחת מהאפשרויות הללו.

2.1. שימוש בהערות

אתחול פרמטרים של סרוולטים עם הערות מאפשר לנו לשמור את התצורה וקוד המקור באותו מקום.

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

לשם כך אנו מיישמים נאיבי UserServlet מחלקה שאוספת נתוני משתמשים באמצעות טופס HTML רגיל.

ראשית, בואו נסתכל על קובץ JSP המעבד את הטופס שלנו:

   פרמטרים של סרוולט להקשר ואתחול 

אנא מלא את הטופס הבא:

שֵׁם:אימייל:

שים לב שקידדנו את הטפסים פעולה תכונה באמצעות EL (שפת הביטוי). זה מאפשר לה תמיד להצביע על ה- “/ UserServlet” נתיב, ללא קשר למיקום קבצי היישום בשרת.

ה "$ {PageContext.request.contextPath}" ביטוי מגדיר כתובת URL דינמית לטופס, שהיא תמיד יחסית לנתיב ההקשר של היישום.

הנה הטמעת סרוולט הראשונית שלנו:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}, initParams = {@WebInitParam (name = "name", value = "לא מסופק"), @WebInitParam (name = "email", value = " לא מסופק ")})) מחלקה ציבורית UserServlet מרחיב את HttpServlet {// ... @Override void doPost מוגן (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק ServletException, IOException {processRequest (בקשה, תגובה); forwardRequest (בקשה, תגובה, "/WEB-INF/jsp/result.jsp"); } בטל ריק מוגן ProcessRequest (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק ServletException, IOException {request.setAttribute ("שם", getRequestParameter (בקשה, "שם")); request.setAttribute ("דוא"ל", getRequestParameter (בקשה, "דוא"ל")); } מוגן חלל forwardRequest (HttpServletRequest בקשה, HttpServletResponse תגובה, מחרוזת נתיב) זורק ServletException, IOException {request.getRequestDispatcher (נתיב). קדימה (בקשה, תגובה); } מחרוזת מוגנת getRequestParameter (בקשת HttpServletRequest, שם מחרוזת) {מחרוזת param = request.getParameter (שם); חזור! param.is ריק ()? param: getInitParameter (שם); }} 

במקרה זה הגדרנו שני פרמטרים לאתחול של סרוולט, שֵׁם ו אימייל, על ידי באמצעות initParams וה @WebInitParam ביאורים.

שים לב שהשתמשנו ב- HttpServletRequest getParameter () שיטת אחזור הנתונים מטופס ה- HTML, וה- getInitParameter () שיטה לגישה לפרמטרים של אתחול סרוולט.

ה getRequestParameter () השיטה בודקת אם שֵׁם ו אימייל פרמטרים של בקשה הם מחרוזות ריקות.

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

ה doPost () השיטה מאחזרת תחילה את השם ואת הדוא"ל שהמשתמש הזין בטופס HTML (אם קיים). ואז הוא מעבד את פרמטרי הבקשה ומעביר את הבקשה ל- a "Result.jsp" קוֹבֶץ:

    מידע משתמש 

מידע משתמש

שֵׁם: $ {name}

אימייל: $ {email}

אם נפרוס את יישום האינטרנט לדוגמה שלנו לשרת יישומים, כגון Apache Tomcat, Oracle GlassFish או JBoss WidlFly, ונפעיל אותו, עליו להציג תחילה את דף הטופס של HTML.

לאחר שהמשתמש מילא את שֵׁם ו אימייל שדות והגיש את הטופס, הוא יפיק את הנתונים:

שם פרטי המשתמש: שם המשתמש דוא"ל: דוא"ל המשתמש 

אם הטופס רק ריק, הוא יציג את הפרמטרים של אתחול סרוולט:

שם משתמש: לא מסופק דוא"ל: לא מסופק 

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

2.2. שימוש במתאר הפריסה הסטנדרטי

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

כדי להציג כיצד להגדיר פרמטרים של אתחול סרוולט עם ה- "Web.xml" קובץ, נסיר תחילה את initParam ו @WebInitParam ביאורים מה- UserServlet מעמד:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}) מעמד ציבורי UserServlet מרחיב את HttpServlet {...} 

לאחר מכן, בואו נגדיר את הפרמטרים של אתחול סרוולט ב- "Web.xml" קוֹבֶץ:

   UserServlet UserServlet שם לא מסופק דוא"ל לא מסופק 

כפי שמוצג לעיל, הגדרת פרמטרים לאתחול של סרוולט באמצעות "Web.xml" הקובץ פשוט מסתכם בשימוש ב- , ו תגים.

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

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

3. אתחול פרמטרים של הקשר

לעיתים עלינו להגדיר נתונים בלתי ניתנים לשינוי שיש לשתף אותם ברחבי העולם באמצעות יישום אינטרנט.

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

למרות שלא ניתן להגדיר פרמטרים של אתחול ההקשר באמצעות הערות, אנו יכולים לעשות זאת ב- "Web.xml" קוֹבֶץ.

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

אנו יכולים להשיג זאת בכמה פרמטרים של הקשר.

בואו נשקף את ה- "Web.xml" הקובץ בהתאם:

  מחוז מדינה מנדוזה ארגנטינה 

הפעם, השתמשנו ב- , , ו תגיות להגדרת מָחוֹז ו מדינה פרמטרים של הקשר.

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

להלן החלקים הרלוונטיים של ה- servlet:

@WebServlet (name = "UserServlet", urlPatterns = {"/ userServlet"}) מחלקה ציבורית UserServlet מרחיב את HttpServlet {// ... חסר התהליך processRequest (HttpServletRequest בקשה, HttpServletResponse תגובה) זורק ServletException, IOException {request.settt ", getRequestParameter (בקשה," שם ")); request.setAttribute ("דוא"ל", getRequestParameter (בקשה, "דוא"ל")); request.setAttribute ("פרובינציה", getContextParameter ("פרובינציה")); request.setAttribute ("מדינה", getContextParameter ("מדינה")); } מוגן מחרוזת getContextParameter (שם מחרוזת) {- החזר getServletContext (). getInitParameter (שם); }} 

שימו לב ל getContextParameter () יישום שיטה, אשר הראשון מקבל את הקשר servlet דרך getServletContext (), ואז מביא את פרמטר ההקשר עם ה- getInitParameter () שיטה.

לאחר מכן, עלינו לשקם מחדש את ה "Result.jsp" קובץ כך שיוכל להציג את פרמטרי ההקשר יחד עם הפרמטרים הספציפיים לשרת:

שֵׁם: $ {name}

אימייל: $ {email}

מָחוֹז: $ {מחוז}

מדינה: $ {country}

לבסוף, אנו יכולים לפרוס מחדש את היישום ולבצע אותו שוב.

אם המשתמש ממלא את טופס ה- HTML בשם ודואר אלקטרוני, הוא יציג נתונים אלה יחד עם פרמטרי ההקשר:

פרטי משתמש שם: שם המשתמש דוא"ל: דוא"ל המשתמש מחוז: מנדוזה ארץ: ארגנטינה 

אחרת, זה יפיק את הפרמטרים של סרוולט ואתחול ההקשר:

שם משתמש: לא מסופק דוא"ל: לא מסופק מחוז: מנדוזה ארץ: ארגנטינה 

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

מכיוון שהנתונים קשורים להקשר היישום, ולא ל- servlet מסוים, אנו יכולים לגשת אליהם מ- servlets אחד או מרובים, באמצעות getServletContext () ו getInitParameter () שיטות.

4. מסקנה

במאמר זה, למדנו את מושגי המפתח של פרמטרים של אתחול ההקשר ושל סרוולט וכיצד להגדיר אותם ולגשת אליהם באמצעות הערות ו- "Web.xml" קוֹבֶץ.

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

CDI, Spring, Hibernate, עד כמה שם, הם דוגמאות בולטות לכך.

עם זאת, אין שום דבר רע מטבעו בשימוש ב- "Web.xml" קובץ להגדרת פרמטרים של אתחול ההקשר וה- servlet.

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

כרגיל, כל דגימות הקוד המוצגות במאמר זה זמינות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found