הגישו משאבים סטטיים עם אביב

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

מאמר זה בוחן כיצד לשרת משאבים סטטיים עם אביב - באמצעות תצורת XML ו- Java.

2. שימוש במגף קפיץ

Spring Boot מגיע עם יישום מוגדר מראש של ResourceHttpRequestHandler כדי להקל על הגשת משאבים סטטיים.

כברירת מחדל, מטפל זה מגיש תוכן סטטי מכל אחד מהם / static, / public, / resources, ו / META-INF / משאבים ספריות שנמצאות בשביל הכיתה. מאז src / main / resources נמצא בדרך כלל בכיתה כברירת מחדל, אנו יכולים להציב שם כל אחת מהספריות הללו.

לדוגמא, אם שמנו about.html קובץ בתוך /סטָטִי בספריית הכיתה שלנו, ואז נוכל לגשת לקובץ זה דרך //localhost:8080/about.html. באופן דומה, אנו יכולים להשיג את אותה התוצאה על ידי הוספת קובץ זה בספריות אחרות שהוזכרו.

2.1. דפוסי נתיב בהתאמה אישית

כברירת מחדל, Spring Boot מגיש את כל התוכן הסטטי תחת חלק הבסיס של הבקשה, כלומר /**. למרות שנראה כי מדובר בתצורת ברירת מחדל טובה, אנחנו יכולים לשנות את זה באמצעות spring.mvc.static-path-pattern מאפיין תצורה.

לדוגמא, אם אנו רוצים לגשת לאותו קובץ דרך //localhost:8080/content/about.html, אנחנו יכולים לומר זאת ב application.properties:

spring.mvc.static-path-pattern = / content / **

בסביבות WebFlux עלינו להשתמש ב- spring.webflux.static-path-pattern תכונה.

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

בדומה לדפוסי שבילים, ניתן גם לשנות את מיקומי המשאבים המוגדרים כברירת מחדל באמצעות spring.resources.static-locations מאפיין תצורה. מאפיין זה יכול לקבל מספר מיקומי משאבים המופרדים בפסיקים:

spring.resources.static-locations = classpath: / files /, classpath: / static-files

כאן אנו מגישים תוכן סטטי מה- /קבצים ו / קבצים סטטיים ספריות בתוך מסלול הכיתה. יתר על כך, Spring Boot יכול להגיש קבצים סטטיים מחוץ לשביל הכיתה:

spring.resources.static-locations = file: / opt / files 

כאן אנו משתמשים בחתימת משאבי הקבצים, קוֹבֶץ:/, כדי להגיש קבצים מהדיסק המקומי שלנו.

3. תצורת XML

אם אתה צריך ללכת בדרך האופנה הישנה עם תצורה מבוססת XML, אתה יכול לעשות שימוש טוב ב- mvc: משאבים אלמנט כדי להצביע על מיקום המשאבים עם תבנית ספציפית של כתובת אתר ציבורית.

לדוגמא - השורה הבאה תשרת את כל הבקשות למשאבים המגיעות עם דפוס כתובת אתר ציבורי כמו "/אֶמְצָעִי/**"על ידי חיפוש ב" /אֶמְצָעִי/ספריה תחת תיקיית הבסיס ביישום שלנו.

כעת, אנו יכולים לגשת לקובץ CSS כמו בדף ה- HTML הבא:

דוגמא 3.1.

 בית 

4. ה ResourceHttpRequestHandler

אביב 3.1. הציג את ResourceHandler רישום כדי להגדיר ResourceHttpRequestHandlers לצורך הגשת משאבים סטטיים מהכיתה, מה- WAR או ממערכת הקבצים. אנחנו יכולים להגדיר את ResourceHandlerRegistry באופן פרוגרמטי בתוך מחלקת תצורת ההקשר שלנו באינטרנט.

4.1. הגשת משאב המאוחסן במלחמה

כדי להמחיש זאת, נשתמש באותה כתובת אתר כמו קודם כדי להצביע עליה myCss.css, אך כעת הקובץ בפועל יהיה ממוקם במלחמות המלחמה webapp / משאבים התיקיה, שם המקום להציב משאבים סטטיים בעת פריסת יישומי Spring 3.1+:

דוגמא 4.1.1.

@Configuration @EnableWebMvc מחלקה ציבורית MvcConfig מיישם את WebMvcConfigurer {@Override public void addResourceHandlers (ResourceHandlerRegistry registry) {registry .addResourceHandler ("/ resources / **") .addResourceLocations ("/ resources /"); }}

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

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

עכשיו - השורה הבאה ב- html דף יביא לנו את myCss.css משאב בתוך webapp / משאבים מַדרִיך:

4.2. הגשת משאב המאוחסן במערכת הקבצים

נניח שאנחנו רוצים לשרת משאב המאוחסן ב- / opt / files / מדריך בכל פעם שנכנסת בקשה לכתובת האתר הציבורית התואמת לתבנית: /קבצים/**. אנו פשוט מגדירים את דפוס כתובת האתר וממפים אותו למיקום המסוים הזה בדיסק:

דוגמה 4.2.1.

@ ביטול ריק ריק addResourceHandlers (הרישום ResourceHandlerRegistry) {הרישום .addResourceHandler ("/ files / **") .addResourceLocations ("file: / opt / files /"); }

* (למשתמשי Windows: הטיעון הועבר אל addResourceLocations לדוגמא זו תהיה "קובץ: /// C: / opt / files /“).

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

דוגמה 4.2.2.

 בית 

4.3. קביעת תצורה של מספר מיקומים עבור משאב

מה אם נרצה לחפש משאב ביותר ממיקום אחד?

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

דוגמה 4.3.1

@ ביטול הריק הציבורי addResourceHandlers (הרישום ResourceHandlerRegistry) {registry .addResourceHandler ("/ resources / **") .addResourceLocations ("/ resources /", "classpath: / other-resources /"); }

בקשת התלתל הבאה תציג את שלום.html הדף המאוחסן באפליקציות webappp / משאבים או ה משאבים אחרים תיקייה בכיתה.

תלתל -א //localhost:8080/handling-spring-static-resources/resources/Hello.html

5. החדש ResourceResolvers

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

5.1. ה PathResourceResolver

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

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

@ ביטול הריק הציבורי addResourceHandlers (הרישום ResourceHandlerRegistry) {הרישום .addResourceHandler ("/ resources / **") .addResourceLocations ("/ resources /", "/ other-resources /") .setCachePeriod (3600) .resourceChain (true). addResolver (PathResourceResolver חדש ()); }

דברים שיש לשים לב אליהם:

  • אנו רושמים את PathResourceResolver בשרשרת המשאבים כבלעדית ResourceResolver בּוֹ. ראה סעיף 4.3. כדי לבדוק כיצד לשרשר יותר מאחד ResourceResolver.
  • המשאבים המוצגים יישמרו במטמון בדפדפן למשך 3600 שניות.
  • הרשת מוגדרת לבסוף בשיטה resourceChain (נכון).

עכשיו - קוד ה- HTML שבשילוב עם ה- PathResourceResolver, מאתרת את foo.js התסריט באחד מה- webapp / משאבים של ה webapp / משאבים אחרים תיקיה:

5.2. ה EncodedResourceResolver

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

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

להגדרת תצורה EncodedResourceResolver, אנחנו רק צריכים להגדיר את זה ב ResourceChain בדיוק כפי שהגדרנו את PathResourceResolver, כמו בשורת הקוד הבאה:

registry .addResourceHandler ("/ other-files / **") .addResourceLocations ("file: / Users / Me /") .setCachePeriod (3600) .resourceChain (true) .addResolver (EncodedResourceResolver חדש ());

כברירת מחדל, ה- EncodedResourceResolver מוגדר לתמוך br ו gzip קידודים.

אז, הדברים הבאים סִלְסוּל הבקשה תקבל את הגרסה המקוונת של דף הבית.html הקובץ הממוקם במערכת הקבצים ב- משתמשים / אני / מַדרִיך:

תלתל -H "קבל-קידוד: gzip" //localhost:8080/handling-spring-static-resources/other-files/Hello.html

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

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

5.3. שִׁרשׁוּר ResourceResolvers

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

למעשה, אם resourceChain אינו מוגדר ל נָכוֹן, ואז כברירת מחדל רק א PathResourceResolver ישמש לשרת משאבים. בדוגמה 4.3.1. אנחנו משרשרים את PathResourceResolver כדי לפתור את המשאב אם GzipResourceResolver לא מצליח.

דוגמא 5.3.1.

@ ביטול ריק ריק addResourceHandlers (הרישום ResourceHandlerRegistry) {הרישום .addResourceHandler ("/ js / **") .addResourceLocations ("/ js /") .setCachePeriod (3600) .resourceChain (נכון) .addResolver (חדש GzipResourceResolver.) addResolver (PathResourceResolver חדש ()); }

עכשיו לאחר שהוספנו את / js / ** דפוס ל ResourceHandler, בוא נכלול את foo.js משאב הממוקם ב webapp / js / במדריך שלנו home.html דף כמו בדוגמה 4.3.2.

דוגמא 5.3.2.

 בית 

ראוי להזכיר כי החל מסגרת האביב 5.1, ה- GzipResourceResolver הוצא משימוש לטובת EncodedResourceResolver. לכן, עלינו להימנע משימוש בו בעתיד.

6. תצורת אבטחה נוספת

אם אתה משתמש באביב אבטחה - חשוב לאפשר גישה למשאבים סטטיים. נצטרך להוסיף את ההרשאות המתאימות לגישה לכתובת האתר של המשאב:

7. מסקנה

במאמר זה הדגמנו דרכים שונות בהן יישום Spring יכול לשרת משאבים סטטיים.

תצורת המשאבים מבוססת ה- XML ​​היא אפשרות "מורשת" שנוכל להשתמש בהם אם עדיין איננו יכולים לרדת במסלול תצורת Java.

אביב 3.1. יצא עם אלטרנטיבה תכנותית בסיסית באמצעותה ResourceHandlerRegistry לְהִתְנַגֵד.

ולסיום - החדש מחוץ לקופסה ResourceResolvers ו ResourceChainRegistration לְהִתְנַגֵד נשלח עם אביב 4.1. מציעים תכונות אופטימיזציה של טעינת משאבים כמו מטמון ושרשור מטפלי משאבים כדי לשפר את היעילות בהגשת משאבים סטטיים.

כמו תמיד, הדוגמה המלאה זמינה ב- Github. בנוסף, קודי מקור הקשורים ל- Spring Boot זמינים גם בפרויקט זה.


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