用一句话来说就是:
在Spring Portlet MVC 框架中,
每个Portlet都有一个相关的WebApplicationContext, 整个Portlet Application也有一个大的WebApplicationContext
对于Portlet级别的WebApplicationContext,
(1)它的配置文件名称必须是<portlet_name>-portlet.xml
(2)这个portlet_name 必须和portlet.xml中相应portlet的名称对应。
(3)这个配置文件必须放在 WEB-INF 目录下(默认),否则必须在portlet.xml中显式给出,通过配置 contextConfigLocation的值,这个值可以是多值,用逗号分隔
比如我要指定一个非默认位置,那么可以在portlet.xml中
- <portlet>
- <portlet-name>helloWorld</portlet-name>
- <portlet-class>
- org.springframework.web.portlet.DispatcherPortlet
- </portlet-class>
- <init-param>
- <name>contextConfigLocation</name>
- <value>/WEB-INF/context/portlet/myContext.xml</value>
- </init-param>
- ...
- </portlet>
(4)这个配置文件仅仅对应的portlet可见,其中定义的bean也仅在对应的portlet可以访问,其他portlet不可以访问。
---
对于Portlet Application级别的WebApplicationContext
(1) 里面定义的bean可以被同一个应用下所有的Portlet所共享
(2) 这个配置文件中如果定义了bean的名称(id)如果和某个Portlet级别的配置文件中定义的bean的名称冲突,那么Portlet级别的会覆盖Portlet Application级别的bean.
(3) 每个Portlet级别的应用上下文会隐式的继承Portlet Application 级别的应用上下文
(4)这个文件必须默认放在WEB-INF目录下,并且默认位置是/WEB-INF/context/applicationContext.xml,可以在web.xml中指定其他位置:
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/context/applicationContext.xml</param-value>
- </context-param>
(5)这个文件的读取者是ContextLoaderListener,所以必须在Portlet Application的web.xml中配置如下:
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
-- 总结如下
portlet.xml 平行的相当于 web.xml ,只不过前者配置了每个portlet,后者配置了整个portlet application