บริบทเว็บแอปพลิเคชันขยาย Application Context ซึ่งออกแบบมาเพื่อทำงานกับjavax.servlet.ServletContextมาตรฐานเพื่อให้สามารถสื่อสารกับคอนเทนเนอร์ได้
public interface WebApplicationContext extends ApplicationContext {
ServletContext getServletContext();
}
ถั่วอินสแตนซ์ใน WebApplicationContext จะสามารถใช้ ServletContext ได้หากใช้อินเตอร์เฟซ ServletContextAware
package org.springframework.web.context;
public interface ServletContextAware extends Aware {
void setServletContext(ServletContext servletContext);
}
มีหลายสิ่งที่เป็นไปได้ที่จะทำกับอินสแตนซ์ ServletContext เช่นการเข้าถึงทรัพยากร WEB-INF (xml configs และอื่น ๆ ) โดยการเรียกใช้เมธอด getResourceAsStream () โดยทั่วไปบริบทของแอปพลิเคชันทั้งหมดที่กำหนดไว้ใน web.xml ในแอปพลิเคชัน servlet Spring เป็นบริบทของ Web Application สิ่งนี้จะไปทั้งบริบทรูทเว็บแอปและบริบทแอปของเซิร์ฟเล็ต
นอกจากนี้ขึ้นอยู่กับความสามารถในบริบทของเว็บแอปพลิเคชันอาจทำให้แอปพลิเคชันของคุณทดสอบได้ยากขึ้นและคุณอาจต้องใช้คลาสMockServletContextสำหรับการทดสอบ
ความแตกต่างระหว่าง servlet และรูทบริบท
สปริงอนุญาตให้คุณสร้างลำดับชั้นบริบทแอ็พพลิเคชันหลายระดับดังนั้น bean ที่ต้องการจะถูกดึงจากบริบทพาเรนต์หากไม่มีอยู่ในบริบทแอ็พพลิเคชันปัจจุบัน ในเว็บแอปเป็นค่าเริ่มต้นมีสองระดับลำดับชั้นรากและ servlet บริบท:
สิ่งนี้ช่วยให้คุณสามารถเรียกใช้บริการบางอย่างเป็น singletons สำหรับแอปพลิเคชันทั้งหมด (โดยทั่วไปจะอยู่ที่นี่และการเข้าถึงบริการฐานข้อมูลพื้นฐานของ Spring Security beans) และบริการอื่น ๆ ที่แยกจากกันใน servlet ที่สอดคล้องกัน ตัวอย่างเช่นบริบท servlet หนึ่งจะให้บริการหน้าเว็บและอื่น ๆ จะใช้บริการเว็บไร้สัญชาติ
การแยกสองระดับนี้ออกมาจากกล่องเมื่อคุณใช้คลาส servlet ฤดูใบไม้ผลิ: เพื่อกำหนดค่าบริบทของแอปพลิเคชันรูทคุณควรใช้แท็กcontext-paramใน web.xml ของคุณ
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/root-context.xml
/WEB-INF/applicationContext-security.xml
</param-value>
</context-param>
(บริบทแอปพลิเคชันรูทถูกสร้างขึ้นโดยContextLoaderListenerซึ่งถูกประกาศใน web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
) และแท็กservletสำหรับบริบทแอปพลิเคชัน servlet
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>app-servlet.xml</param-value>
</init-param>
</servlet>
โปรดทราบว่าถ้า init-param จะถูกละไว้สปริงจะใช้ myservlet-servlet.xml ในตัวอย่างนี้
ดูเพิ่มเติม: ความแตกต่างระหว่าง applicationContext.xml และ spring-servlet.xml ใน Spring Framework
web.xml
ไฟล์ คำถามนี้ถามเกี่ยวกับฤดูใบไม้ผลิบางคลาส