以下是spring文档建议初始化dispatcherServlet的方法:
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/root-context.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
我的问题是在init-param
标记内提供一个空的参数值。尽管将该参数定义为context-param
,但我们仍然提供空值。因此,当传递给servlet的contextConfigLocation
方法时,null
应为init()
。怎么了,请纠正我。
答案 0 :(得分:9)
在Spring Web Applications中,有两种类型的容器,每种容器都以不同方式配置和初始化。
应用程序上下文由您在context-params中指定并由ContextLoaderListener选取的配置文件进行初始化。这纯粹是我认为与业务逻辑相关的bean。
Web应用程序上下文是可能存在或可能不存在的应用程序上下文的子项。每个DispatcherServlet都有关联的WebApplicationContext,它从init-params中获取spring bean来创建上下文。
可以从每个WebApplicationContext中引用ApplicationContext中可用的任何bean。
我们有两种不同的bean配置的原因是为了保持中间层服务(如业务逻辑组件和数据访问类(通常在ApplicationContext中定义))和Web相关组件(如控制器和视图)之间的明确区分解析器(在每个Dispatcher Servlet的WebApplicationContext中定义)。