创建 Struts portlet 和项目

虽然 Struts portlet 项目与标准 portlet 和 Struts 项目有一些共同特征,但是您应该知道它们之间仍然存在一些差别。Struts portlet 项目结构和相关资源都取决于 WebSphere® Portal 提供的“Struts Portlet 框架”(SPF)支持并且包括在 Rational® Developer 中。

使用“新建 Portlet 项目”向导创建 Struts portlet 项目。将在创建项目过程中添加缺省 Struts-type 类型 portlet 和 Web 图文件(可选)。该向导将自动生成 Struts portlet 配置文件以及 web.xml 文件和 portal.xml 文件的必要更新,并将所有 SPF 标记库和 JAR 文件添加至所需目录结构的项目中。

该项目中将包括 Struts Portlet 框架定义的下列资源类型:
资源类型 文件 目标目录 说明
TLD
IBM® API portlet
SPFLegacyBlank.war 中的所有 *.tld 文件。
JSR 168 API portlet
SPFStandardBlank.war 中的所有 *.tld 文件。
WEB-INF  
JAR
IBM API portlet
SPFLegacyBlank.war 中除 Blank.jar 之外的所有 *.jar 文件。
JSR 168 API portlet
SPFStandard.war 中除 Blank.jar 之外的所有 *.jar 文件。
WEB-INF/lib  
配置文件
  • struts-config.xml
  • struts-config-mode.xml(用于不同的方式/标记)
WEB-INF

Struts 配置文件中将自动生成定义“请求处理器”类的 <controller> 元素。

部署描述符
  • portlet.xml
  • web.xml
WEB-INF

IBM(旧的)API portlet

对标准 web.xml 文件进行了下列修改:

  • 添加了 servlet com.ibm.wps.portlets.struts.WpsStrutsPortlet。
  • Web-appservletservlet-mapping 标记包含具有字符串值的标识属性,该字符串值以唯一标识作为后缀来防止与其它 portlet 相冲突。
  • 使用基于前缀的映射来配置 WpsStrutsPortlet,在 servlet 的 struts-servlet-mapping 初始参数中定义基于扩展的 servlet-mapping。当包括 Struts 链接时,应使用基于扩展的映射。如果您要将此 Struts portlet 项目作为独立应用程序运行,则将 servlet-mapping 条目从基于扩展的 servlet-mapping(*.do)更改为基于前缀的 servlet-mapping(例如,诸如 /app/* 的 URL 模式)。
    注: 您不能将同一配置用于 Web 项目和 portlet 应用程序。
  • 对于参数 struts-servlet-mapping,基于扩展的映射是必需的并在 WpsStrutsPortlet 的初始参数中定义。
  • 使用 Struts portlet 标记库定义。
  • 在 portlet.xml 中包括 Portlet 方式配置信息。因为(对于 SPF)方式和标记将视为 Struts 模块,所以这些模块也定义为 WpsStrutsPortlet 的初始参数的一部分。
  • 提供 Struts 方式的欢迎文件列表支持。
  • 提供与 Struts portlet 相关的 init-param 值。
     

JSR 168(标准)API portlet

portlet.xml 文件中包含下列各项:

  • 添加了 portlet com.ibm.portal.struts.portlet.StrutsPortlet。注意,这不是 servlet 条目;仅在 portlet.xml 中定义它。
  • 使用定义中包含的标记来唯一地标识 Portlet,以免与其它 portlet 发生冲突。
  • 需要基于扩展名的映射(例如,*.do),并且是在 StrutsPortlet 的初始参数 struts-servlet-mapping 中定义的。
  • 在 portlet.xml 中包括 Portlet 方式配置信息。因为(对于 SPF)方式和标记将视为 Struts 模块,所以这些模块也定义为 StrutsPortlet 的初始参数的一部分。
  • 提供与 Struts portlet 相关的 init-param 值。
  • 受支持的 Struts 方式的初始页面在 portlet.xml 中被定义为此 portlet 的一部分 portlet 首选项。例如:
    <portlet-preferences>
      <preference>
        <name>com.ibm.struts.portal.page.view.html</name>     <value>index.jsp</value>
      </preference>
      <preference>
        <name>com.ibm.struts.portal.page.edit.html</name>     <value>html/edit/index.jsp</value>
      </preference>
    </portlet-preferences>

Struts portlet 标记库定义适用于 JSR 168 SPF,而支持 Struts 方式的欢迎文件的列表包含在 web.xml 文件中。

IBM(旧的)API portlet 约定

下列样本配置和部署描述符文件片段显示在 Struts portlet 项目中使用的代表标记:

struts-config.xml
将以下 controller 部分添加至所有 struts 配置文件:
<controller processorClass="com.ibm.wps.portlets.struts.WpsRequestProcessor">
</controller>
web.xml
这里显示了已添加至 web.xml 的样本 Struts portlet servlet。(特定于 Struts portlet 的值用粗体表示。):
<servlet id="Struts_Unique_Servlet_Name">
     <servlet-name>Struts</servlet-name>
     <display-name>Struts Portlet</display-name>
     <servlet-class>com.ibm.wps.portlets.struts.WpsStrutsPortlet</servlet-class>

   <!-- Struts configuration -->
     <init-param>
       <param-name>config</param-name>
       <param-value>/WEB-INF/struts-config.xml</param-value>
     </init-param>      <init-param>
       <param-name>struts-servlet-mapping</param-name>
       <param-value>*.do</param-value>
     </init-param> 	 <!-- end of Struts configuration -->
</servlet>
注: 以上 config 参数是定义 Struts 配置文件和模块的标准方法。Struts portlet 使用 struts-servlet-mapping 参数来定义将哪些内容用作 Struts 操作映射,以便可以识别应该作为 Struts 操作来处理的那些路径。此参数的使用方式与配置 Apache Struts servlet 时使用“servlet-mapping”值的方式相同。强烈建议对 param-value 使用扩展映射。
以下是 Struts portlet servlet 的 servlet-mapping 示例。定义它用来表示 Struts portlet,因为此 portlet 也是一个 servlet。
<servlet-mapping id="Struts_Unique_ServletMapping">
      <servlet-name>Struts</servlet-name>
      <url-pattern>/Struts/*</url-pattern>
</servlet-mapping>
以下是可以添加至 web.xml 的其它标记库的示例:
<taglib>
    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
portlet.xml
以下是在 portlet.xml 中定义的抽象 portlet 的示例:
<portlet-app uid="A_Unique_ID:1" major-version="1" minor-version="0">
	<portlet-app-name>Struts Portlet Application</portlet-app-name>
	<portlet id="Portlet_1" 
href="WEB-INF/web.xml#Struts_Unique_Servlet_Name"
major-version="1" minor-version="0">
		<portlet-name>Struts Portlet</portlet-name>
		<cache>
			<expires>0</expires>
			<shared>NO</shared>
		</cache>
		<allows>
			<maximized/>
			<minimized/>
		</allows>
            <supports>
               <markup name="html">
                  <view/>
               </markup>
            </supports>
	</portlet>
</portlet-app>
以下是在 portlet.xml 中定义的具体 portlet 的示例:
<concrete-portlet-app uid="A_Unique_ID:1.1">
	<portlet-app-name>Struts Blank Application</portlet-app-name>
	<concrete-portlet href="#Portlet_1">
		<portlet-name>Struts Portlet</portlet-name>
		<default-locale>en</default-locale>
		<language locale="en">
			<title>Struts Portlet</title>
			<title-short>Struts Portlet</title-short>
			<description>Struts Portlet</description>
			<keywords>WPS, Struts</keywords>
		</language>
        <config-param>
           <param-name>FilterChain</param-name>
           <param-value>StrutsTranscoding</param-value>
        </config-param>
        <!-- any additional Struts related config-param values added here -->
	</concrete-portlet>
</concrete-portlet-app>
注: FilterChain <config-param> 参数在 WebSphere Portal V5.1 中不可用。

JSR 168(标准)API portlet 约定

下列样本配置和部署描述符文件片段显示在 Struts portlet 项目中使用的代表标记:

struts-config.xml
将以下 controller 部分添加至所有 Struts 配置文件:
<controller processorClass="com.ibm.portal.struts.portlet.WpRequestProcessor">
</controller>
web.xml
以下是要添加至 web.xml 的其它标记库的示例:
<taglib>
    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
portlet.xml
这里显示了已添加至 portlet.xml 的样本 Struts portlet:
<portlet>
     <portlet-name>StrutsPortletProject</portlet-name>
     <display-name>StrutsPortletProject portlet</display-name>
		<portlet-class>
			  com.ibm.portal.struts.portlet.StrutsPortlet
    </portlet-class>

   <!-- Struts configuration -->
     <init-param>
       <param-name>config</param-name>
       <param-value>/WEB-INF/struts-config.xml</param-value>
     </init-param>
     <init-param>
       <param-name>struts-servlet-mapping</param-name>
       <param-value>*.do</param-value>
     </init-param>
	 <!-- end of Struts configuration -->

     <!-- Here is an example of edit mode initialization: -->
     <init-param>
       <param-name>config/html/edit</param-name>
       <param-value>/WEB-INF/struts-html-edit.xml</param-value>
     </init-param>

     <!-- The following snippets are generated by the portlet API. -->
     <expiration-cache>0</expiration-cache>
     <supports>
       <mime-type>text/html</mime-type>
       <portlet-mode>view</portlet-mode>
       <portlet-mode>edit</portlet-mode>
     </supports>
     <supported-locale>en</supported-locale>
     <resource-bundle> strutsportletjsr168.nl.StrutsPorltetJSR168PortletResource	</resource-bundle>
       <portlet-info>
           <title>StrutsPortletJSR168 portlet</title>
       </portlet-info>

   <portlet-preferences> 

   <!-- example of setting the first page of the html view mode --> 
     <preference> 
       <name>com.ibm.struts.portal.page.view.html</name> 
       <value>index.jsp</value> 
     </preference> 

   <!-- example of setting the first page of the html edit mode -->
     <preference> 
       <name>com.ibm.struts.portal.page.edit.html</name>
       <value>html/edit/index.jsp</value>
     </preference>

   </portlet-preferences>

</portlet>
注: 以上 config 参数是定义 Struts 配置文件和模块的标准方法。
相关概念
Struts portlet 应用程序
Struts Portlet 框架
使用 portlet 部署描述符
基于 Struts 的 Web 应用程序 - 概述
用于应用程序开发的 Struts 工具
相关任务
创建 Struts portlet
创建 Struts portlet JSP 文件
创建架构良好的、使用 Struts 的 Web 应用程序
相关参考
Struts 1.1 与 SPF 标记库类之间的差别

(C) Copyright IBM Corporation 2002, 2005. All Rights Reserved.