用一句话来说就是:

在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中

 
  
  1. <portlet> 
  2. <portlet-name>helloWorld</portlet-name> 
  3. <portlet-class> 
  4. org.springframework.web.portlet.DispatcherPortlet 
  5. </portlet-class> 
  6. <init-param> 
  7. <name>contextConfigLocation</name> 
  8. <value>/WEB-INF/context/portlet/myContext.xml</value> 
  9. </init-param> 
  10. ... 
  11. </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中指定其他位置:

 

 
  
  1. <context-param> 
  2. <param-name>contextConfigLocation</param-name> 
  3. <param-value>/WEB-INF/context/applicationContext.xml</param-value> 
  4. </context-param> 

(5)这个文件的读取者是ContextLoaderListener,所以必须在Portlet Application的web.xml中配置如下:

 
  
  1. <listener> 
  2. <listener-class> 
  3. org.springframework.web.context.ContextLoaderListener 
  4. </listener-class> 
  5. </listener> 

 

-- 总结如下

portlet.xml  平行的相当于 web.xml ,只不过前者配置了每个portlet,后者配置了整个portlet application