Một ứng dụng web mùa xuân tiêu chuẩn (được tạo bởi Roo hoặc Mẫu "Spring MVC Project") tạo một web.xml với ContextLoaderListener
và DispatcherServlet
. Tại sao họ không chỉ sử dụng DispatcherServlet
và làm cho nó để tải cấu hình hoàn chỉnh?
Tôi hiểu rằng ContextLoaderListener nên được sử dụng để tải nội dung không liên quan đến web và DispatcherServlet được sử dụng để tải nội dung liên quan đến web (Bộ điều khiển, ...). Và điều này dẫn đến hai bối cảnh: bối cảnh cha và bối cảnh con.
Lý lịch:
Tôi đã làm theo cách tiêu chuẩn này trong vài năm.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Handles Spring requests -->
<servlet>
<servlet-name>roo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/webmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Điều này thường gây ra vấn đề với hai ngữ cảnh và sự phụ thuộc giữa chúng. Trước đây, tôi luôn có thể tìm ra giải pháp và tôi có cảm giác mạnh mẽ rằng điều này làm cho cấu trúc / kiến trúc phần mềm luôn tốt hơn. Nhưng bây giờ tôi đang phải đối mặt với một vấn đề với các sự kiện của cả hai bối cảnh .
- Tuy nhiên, điều này khiến tôi phải suy nghĩ lại về hai mẫu ngữ cảnh này và tôi đang tự hỏi bản thân: tại sao tôi phải tự đưa mình vào rắc rối này, tại sao không tải tất cả các tệp cấu hình mùa xuân bằng một DispatcherServlet
và xóa ContextLoaderListener
hoàn toàn. (Tôi vẫn sẽ có các tệp cấu hình khác nhau, nhưng chỉ có một ngữ cảnh.)
Có lý do gì để không xóa ContextLoaderListener
?