ในสองบทแรกเราแบ่งปันการสนับสนุนของ Spring Boot สำหรับ Restful แต่อินเทอร์เฟซ restful มักจะส่งคืนข้อมูลเท่านั้น เมื่อทำการพัฒนาเว็บเรามักจะมีทรัพยากรคงที่มากมายเช่น HTML รูปภาพ CSS ฯลฯ ดังนั้นคุณจะส่งคืนทรัพยากรคงที่ไปยังส่วนหน้าได้อย่างไร นักเรียนที่ได้ทำการพัฒนาเว็บมาก่อนควรรู้ว่าจะมีไดเรกทอรีเว็บแอปภายใต้โครงการเว็บที่เราสร้างมาก่อนและเราสามารถเข้าถึงได้โดยตรงโดยวางแหล่งข้อมูลแบบคงที่ในไดเรกทอรีนี้ อย่างไรก็ตามโครงการที่ใช้การบูตในฤดูใบไม้ผลิไม่มีไดเรกทอรีนี้ดังนั้นเราควรจัดการกับมันอย่างไร
1. วิธีที่โง่ที่สุด
ก่อนอื่นมาแบ่งปันวิธีที่โง่ที่สุดซึ่งก็คือการส่งคืนทรัพยากรคงที่โดยตรงไปยังส่วนหน้าผ่านกระแส เราสร้างไดเรกทอรี HTML ในไดเรกทอรีรากของทรัพยากรของโครงการ Maven จากนั้นเราวางไฟล์ HTML ในไดเรกทอรีนี้และระบุว่าเส้นทางการเข้าถึงใด ๆ เริ่มต้นด้วย / คงที่ / คือการเข้าถึงทรัพยากรคงที่ในไดเรกทอรี การดำเนินการมีดังนี้:
@ControllerPublic Class StaticResourceController {@requestmapping ("/static/**") โมฆะสาธารณะ gethtml (httpservletrequest Request, httpservletResponse) {String uri = request.getRequesturi (); สตริง [] arr = uri.split ("คงที่/"); string resourcename = "index.html"; if (arr.length> 1) {resourcename = arr [1]; } string url = staticResourceController.class.getResource ("/"). getPath () + "html/" + resourcename; ลอง {filereader reader = filereader ใหม่ (ไฟล์ใหม่ (URL)); bufferedReader br = new bufferedReader (reader); StringBuilder sb = new StringBuilder (); สตริงบรรทัด = br.readline (); ในขณะที่ (บรรทัด! = null) {sb.append (บรรทัด); line = br.readline (); } response.getOutputStream (). เขียน (sb.toString (). getBytes ()); Response.flushbuffer (); } catch (ioexception e) {e.printstacktrace (); -กระบวนการใช้งานนั้นง่ายมากซึ่งจะแยก URI ทรัพยากรออกจากเส้นทางก่อนจากนั้นอ่านไฟล์จากไดเรกทอรีแบบคงที่และส่งออกไปยังส่วนหน้า เนื่องจากมันเป็นเพียงการสาธิตอย่างง่ายไฟล์ประเภทข้อความเท่านั้นที่ถูกประมวลผลที่นี่และไฟล์รูปภาพสามารถประมวลผลได้ในทำนองเดียวกัน แน่นอนว่าเราจะไม่ทำสิ่งนี้ในความเป็นจริงและ Spring Boot จะมีทางออกที่ดีกว่าอย่างแน่นอน อย่างไรก็ตามแม้ว่าวิธีนี้จะโง่เล็กน้อย แต่ก็เป็นสิ่งที่สำคัญที่สุด ไม่ว่าเฟรมเวิร์กจะช่วยให้เราจัดการกับปัญหาแบบนี้ได้อย่างสะดวก แต่นอกเหนือจากกรอบงานแล้วเรายังคงสามารถเขียนเว็บโครงการได้อย่างเชี่ยวชาญ โดยการรู้หลักการดำเนินการเท่านั้นคุณจะสามารถจัดการกับปัญหาได้เมื่อคุณพบปัญหา ตอนนี้มาดูการสนับสนุนของ Spring Boot สำหรับทรัพยากรคงที่
2. วิธีการเข้าถึงทรัพยากรสปริงบูตเริ่มต้น
Spring Boot สามารถเข้าถึงไฟล์ได้โดยตรงในสี่ไดเรกทอรีโดยค่าเริ่มต้น:
classpath:/สาธารณะ/
classpath:/ทรัพยากร/
classpath:/คงที่/
classpath:/meta-info/resouces/
ตอนนี้เราสร้างสี่ไดเรกทอรีต่อไปนี้ในไดเรกทอรีทรัพยากรไฟล์ทรัพยากร:
โปรดทราบว่าทรัพยากรโฟลเดอร์ทรัพยากรภายใต้แถบสีน้ำเงินนั้นแตกต่างจากโฟลเดอร์ ClassPath:/ทรัพยากรภายใต้ ClassPath ทรัพยากรภายใต้แถบสีน้ำเงินแสดงว่าไฟล์ในไดเรกทอรีเป็นไฟล์ทรัพยากร เมื่อบรรจุภัณฑ์ไฟล์ทั้งหมดในไดเรกทอรีจะถูกบรรจุ ชื่อนี้สามารถเปลี่ยนได้ คุณสามารถระบุไดเรกทอรีทรัพยากรใน pom.xml:
<resources> <resources> <ไดเรกทอรี> SRC/Main/Resources </Directory> </sursece> </resources>
ทรัพยากรภายใต้ classpath เป็นหนึ่งในโฟลเดอร์ทรัพยากรคงที่เริ่มต้นของการบูตฤดูใบไม้ผลิและฟังก์ชั่นนั้นเหมือนกับสาธารณะคงที่และเนื้อสัตว์/ทรัพยากร ตอนนี้เราสามารถรีสตาร์ทสปริงบูตและเราสามารถผ่านได้
http: // localhost: 8080/1.html
http: // localhost: 8080/2.html
http: // localhost: 8080/3.html
http: // localhost: 8080/4.html
สี่ URL เข้าถึงทรัพยากรคงที่ภายใต้ไดเรกทอรีสี่ไดเรกทอรี
3. ปรับแต่งไดเรกทอรีทรัพยากรคงที่
ผ่านส่วนที่สองเรารู้ว่าไดเรกทอรีของทรัพยากรคงที่ที่สปริงบูตสามารถเข้าถึงได้โดยค่าเริ่มต้น แต่ทุกคนจะคิดอย่างแน่นอนว่าไดเรกทอรีนี้ได้รับการแก้ไขหรือไม่? เราสามารถกำหนดไดเรกทอรีทรัพยากรแบบสแตติกด้วยตนเองได้หรือไม่? คำตอบคือใช่ ตอนนี้เราปรับแต่งไดเรกทอรีทรัพยากรแบบคงที่ เรากำหนดไดเรกทอรีรูปภาพเพื่อจัดเก็บภาพ เส้นทางทั้งหมด /image /** จะเข้าถึงทรัพยากรในไดเรกทอรีรูปภาพ:
@ConfigurationPublic คลาส imagemvcconfig ขยาย webmvcconfigureradapter {@Override โมฆะสาธารณะ addresourceHandlers (ResourceHandlerRegistry Registry) {registry.addresourceHandler ("/image/**") -รหัสนี้ควรค่อนข้างง่าย @Configuration ระบุคลาสการกำหนดค่าซึ่งได้รับการกล่าวถึงหลายครั้งในบทความก่อนหน้า WebMVCCONFIGURERADAPTER เป็นอะแดปเตอร์สำหรับการกำหนดค่า MVC ที่จัดทำโดยฤดูใบไม้ผลิ มีวิธีการกำหนดค่ามากมาย AddResourceHandlers เป็นวิธีการที่เชี่ยวชาญในการจัดการทรัพยากรคงที่ เราจะพูดถึงวิธีการอื่นในภายหลัง ตอนนี้เรากำลังตรวจสอบว่าการกำหนดค่าข้างต้นนั้นถูกต้องหรือไม่ ฉันใส่ภาพ Spring.jpg ภายใต้ไดเรกทอรีรูปภาพ ตอนนี้เราเข้าถึงภาพผ่าน http: // localhost: 8080/image/spring.jpg:
อันที่จริงนอกเหนือจากวิธีการข้างต้นแล้วยังมีวิธีที่ง่ายกว่าอีกวิธีหนึ่งซึ่งคือการกำหนดค่าโดยตรงใน Application.yml:
ฤดูใบไม้ผลิ: MVC: รูปแบบคงที่:/ภาพ/** ทรัพยากร: การตั้งค่าคงที่: classpath:/ภาพ/
รูปแบบคงที่: โหมดการเข้าถึงค่าเริ่มต้นคือ /** หลายสามารถคั่นด้วยเครื่องหมายจุลภาค
การจัดวางแบบคงที่: ไดเรกทอรีทรัพยากรที่คั่นด้วยเครื่องหมายจุลภาคโดยหลายไดเรกทอรีไดเรกทอรีทรัพยากรเริ่มต้นคือ classpath:/meta-inf/resources/, classpath:/ทรัพยากร/, classpath:/static/, classpath:/สาธารณะ/
โปรดทราบว่าการกำหนดค่านี้จะเขียนทับไดเรกทอรีทรัพยากรคงที่เริ่มต้นของสปริงบูต ตัวอย่างเช่นหากกำหนดค่าในตัวอย่างคุณไม่สามารถเข้าถึงทรัพยากรในไดเรกทอรีแบบคงที่สาธารณะทรัพยากร ฯลฯ อีกต่อไป
4. สรุป
บทความนี้ส่วนใหญ่แบ่งปันกับคุณว่า Spring Boot จัดการทรัพยากรคงที่ Spring Boot สามารถเข้าถึงทรัพยากรคงที่ภายใต้ไดเรกทอรีสี่ไดเรกทอรี: classpath:/meta-inf/resources/, classpath:/ทรัพยากร/, classpath:/static/, classpath:/สาธารณะ/โดยค่าเริ่มต้น นอกจากนี้เรายังสามารถปรับแต่งการกำหนดค่าตามความต้องการของเรา ในที่สุดก็ควรสังเกตว่าหากมีทรัพยากรที่มีชื่อเดียวกันในไดเรกทอรีทั้งสี่นี้ทรัพยากรใดที่จะส่งคืนไดเรกทอรีใดก่อน คุณควรจะสามารถเดาได้ตามลำดับเริ่มต้นของการจัดวางแบบคงที่ โดยค่าเริ่มต้น Spring Boot จะส่งคืนทรัพยากรภายใต้ /meta-inf /ทรัพยากรก่อน แน่นอนเนื่องจากเราสามารถปรับแต่งค่าของการตั้งค่าคงที่ลำดับความสำคัญนี้จึงสามารถปรับได้
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น