web.xml לעומת אתחול עם אביב

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

במאמר זה נעסוק בשלוש גישות שונות של תצורת א DispatcherServlet זמין בגרסאות האחרונות של מסגרת האביב:

  1. נתחיל עם XML תצורה ו- web.xml קוֹבֶץ
  2. לאחר מכן נעביר את הצהרת סרוולט מה- web.xml קובץ לתצורה של Java, אך השארנו כל תצורה אחרת XML
  3. לבסוף בשלב השלישי והאחרון של ריפקטורינג, יהיה לנו פרויקט מוגדר 100% של Java

2. ה DispatcherServlet

אחד ממושגי הליבה של אביב MVC האם ה DispatcherServlet. תיעוד האביב מגדיר זאת כ:

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

בעיקרון ה DispatcherServlet היא נקודת הכניסה של כל אחד אביב MVC יישום. מטרתו ליירט HTTP בקשות ולשלוח אותם לרכיב הנכון שיידע להתמודד עם זה.

3. תצורה עם web.xml

אם אתה מתמודד עם מורשת אביב פרויקטים נפוץ מאוד למצוא XML תצורה ועד אביב 3.1 הדרך היחידה להגדיר את DispatcherServlet היה עם WEB-INF / web.xml קוֹבֶץ. במקרה זה ישנם שני שלבים הנדרשים.

בואו נראה תצורה לדוגמה - השלב הראשון הוא הצהרת Servlet:

 dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/dispatcher-config.xml 1 

עם הבלוק הזה של XML אנו מכריזים על סרוולט ש:

  1. נקרא "שולח
  2. הוא מופע של org.springframework.web.servlet.DispatcherServlet
  3. יאותחל עם פרמטר בשם contextConfigLocation שמכיל את הנתיב לתצורה XML

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

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

 משגר / 

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

4. תצורה היברידית

עם אימוץ גרסת 3.0 של ממשקי API של Servlet, ה web.xml הקובץ הפך לאופציונלי, וכעת אנו יכולים להשתמש ב- Java כדי להגדיר את התוכנה DispatcherServlet.

אנו יכולים לרשום servlet המיישם a WebApplicationInitializer. זה המקבילה ל- XML תצורה לעיל:

מחלקה ציבורית MyWebAppInitializer מיישם את WebApplicationInitializer {@Override public void onStartup (ServletContext container) {XmlWebApplicationContext context = new XmlWebApplicationContext (); context.setConfigLocation ("/ WEB-INF / spring / dispatcher-config.xml"); ServletRegistration.Dynamic dispatcher = container .addServlet ("dispatcher", DispatcherServlet חדש (הקשר)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/"); }}

בדוגמה זו אנו:

  1. יישום ה- WebApplicationInitializer מִמְשָׁק
  2. עקיפת ה- בהפעלה שיטה אנו יוצרים חדש XmlWebApplicationContext מוגדר עם אותו קובץ שהועבר כמו contextConfigLocation לסרוולט ב XML דוגמא
  3. ואז אנו יוצרים מופע של DispatcherServlet עם ההקשר החדש שרק יצרנו
  4. ולבסוף אנו רושמים את סרוולט במיפוי כתובת אתרתבנית

אז השתמשנו ג'אווה להכריז על הסרוולט ולקשור אותו לא מיפוי כתובות אתרים אבל שמרנו על התצורה בנפרד XML קוֹבֶץ: dispatcher-config.xml.

5. 100% ג'אווה תְצוּרָה

בגישה זו מוכרז ה- servlet שלנו בג'אווה, אבל אנחנו עדיין צריכים XML קובץ כדי להגדיר אותו. עם WebApplicationInitializer אתה יכול להשיג 100% ג'אווה תְצוּרָה.

בואו נראה איך נוכל לשקם את הדוגמה הקודמת.

הדבר הראשון שנצטרך לעשות הוא ליצור את הקשר היישום עבור ה- servlet.

הפעם נשתמש בהקשר מבוסס ביאורים כדי שנוכל להשתמש בו ג'אווה והערות לתצורה ולהסיר את הצורך XML קבצים כמו dispatcher-config.xml:

AnnotationConfigWebApplicationContext context = חדש AnnotationConfigWebApplicationContext ();

לאחר מכן ניתן להגדיר סוג זה של רישום לרישום מחלקת תצורה:

context.register (AppConfig.class);

או הגדרת חבילה שלמה שתסרוק לשיעורי תצורה:

context.setConfigLocation ("com.example.app.config");

כעת, לאחר שנוצר הקשר היישום שלנו, אנו יכולים להוסיף מאזין ל- ServletContext שיעמיס את ההקשר:

container.addListener (ContextLoaderListener חדש (הקשר));

השלב הבא הוא יצירת ורישום סרוולט השולח שלנו:

ServletRegistration.Dynamic dispatcher = container .addServlet ("dispatcher", DispatcherServlet חדש (הקשר)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/");

עכשיו שלנו WebApplicationInitializer צריך להיראות כך:

מחלקה ציבורית MyWebAppInitializer מיישמת את WebApplicationInitializer {@Override public void onStartup (ServletContext container) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.example.app.config"); container.addListener (ContextLoaderListener חדש (הקשר)); ServletRegistration.Dynamic dispatcher = container .addServlet ("dispatcher", DispatcherServlet חדש (הקשר)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/"); }}

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

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

6. מסקנה

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

אתה יכול למצוא את קוד המקור ממאמר זה ב- Github כאן וכאן.


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