- 浏览: 705770 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
基于 Struts 2 构建 WebSphere Portal 上的 Portlet 应用
- 博客分类:
- Portal&Portlet
WebSphere Portal Server5.1 及以上版本支持两种 Portlet API:第一种是 IBM Portlet,这种 Portlet API 是 WebSphere Portal Server 专有的一种 Portlet API;第二种是符合 JSR168 标准的 Portlet API。由于 JSR168 是一个开放的标准,因此符合 JSR168 标准的 Portlet 将更易于移植。
IBM 为 IBM Portlet API 和 JSR168API 分别实现了基于 Struts1 的 Portlet 开发框架,由于基于 Struts1,这两种 Portlet 框架 API 同 Portlet API 耦合紧密,尤其需要指出的是由于无论 IBM Portlet 还是在 WebSphere Portal Server 上实现的 JSR168 标准的 Porlet API, 它们的接口都直接依赖于 PortletRequest/PortletResponse 对象,这就使得程序移植和单元测试等变得比较困难。此外,我们在使用 Struts1 开发 Servlet 应用时,习惯于将数据存放在 request 作用域中,通过页面的跳转将数据呈现到 jsp 视图页面。但是,这种做法在 portlet 开发中是不可行的。与 servlet 的生命周期有所不同,portlet 存在操作响应阶段和呈现阶段。 在 portlet 操作响应阶段存放在 request 作用域的变量,在呈现阶段就会失效。在原有 API 上解决这个问题既费时又不优雅,而 Struts 2 对 Portlet 的支持将能够很好的解决这些问题。
本文就是要通过一个简单的示例应用程序的开发和部署过程,来展示 Struts 2 怎样解决旧有的 Portlet API 所无法克服的困难的。
本文的重点不在于开发一个 Struts2 Web 应用程序,而在于开发一个作为 Portlet 的 Struts2 应用程序所需的的实现和配置。读者可以了解到如何利用 Struts 2 来创建一个 Portlet,这个 Portlet 将完全独立于其所开发和部署的平台。
在示例应用程序的开发和部署中用到了下列产品:
- IBM WebSphere Portal Server 集成测试环境 5.1
- IBM WebSphere Application Server Version 5.1
- Struts 2 Full Distribution 2.0.11
- IBM Rational Application developer 7(RAD7)
示例应用程序是一个简单的用户登录程序。合法的用户将跳转到的登录成功页面,登录失败的用户则跳转到登录失败页面,并被要求输入正确的用户名和密码。用户可以自由的在 Portlet 的 View、Edit 和 Help 模式之间进行切换。应用程序视图部分分为以下几部分:
- 登录页面(login.jsp)——提示用户输入正确的用户名和密码,登录应用程序。
- 登录成功页面(success.jsp)——提示用户登录成功。
- 登录失败页面(fail.jsp)——提示用户登录失败,提示用户输入正确的用户名和密码。
- Edit 页面(edit.jsp)——用户进入 Edit 模式后的页面。
- Help 页面(help.jsp)——用户进入 Help 模式后的页面。
- 程序主类——Login.java。
下图是本文示例的 Action 与页面的交互图:
在本文中,使用 Struts2 开发 Portlet 应用需要经历以下步骤:
- 使用 RAD7 建立开发环境
- 生成 web.xml 配置文件
- 生成 portlet.xml 配置文件
- 编辑 jsp 文件
- 应用 Struts2
- 部署 Portlet 应用程序
- 访问 Portlet 应用
在 Rational Application developer 7 中启动一个 Portlet 项目,需要遵循下列步骤:
- 选择新建一个 Portlet 项目,如图 3 所示:
图 3. 新建一个 Portlet 项目
- 输入项目名 Struts2TestPortlet,目标运行时选择 WebSphere Portal v5.1 或者更高版本,注意 Portlet API 选择 JSR 168 Portlet, 注意勾掉创建 portlet 选项,点击完成按钮。如图 4 所示:
图 4. 设置项目属性
生成 portlet 项目及其结构如图 5 所示:
图 5.portlet 项目及其结构
-
接下来到 Apache 官方网站下载 strtus2 的完整版 (Full Distribution)。将下载到的 Zip 文件解压缩。本文中使用的版本为 struts-2.0.11。将 struts-2.0.11 j4 文件夹下的 backport-util-concurrent-3.0.jar, retrotranslator-runtime-1.2.2.jar,struts2-core-j4-2.0.11.jar,xwork-j4-2.0.4.jar 和 lib 目录下的 ognl-2.6.11.jar, freemarker-2.3.8.jar 文件拷贝到 portlet web 工程的 WEB-INF/lib 目录下。
在这里需要注意的是从 j4 文件夹下拷贝过来的 JAR 包,这是因为 WebSphere Portal Sever 5.1 基于 jdk1.4,而 j4 文件夹下的内容就是 Struts2 支持 JDK1.4 的 JAR 文件。
双击 WEB-INF/web.xml,打开 web 部署描述符界面,如图 6 所示:
切换到过滤器选项卡,点击添加按钮,创建一个过滤器,名称设定为 Struts2 Filter, URL 映射为 /*, 并且使用现有的过滤器类 org.apache.struts2.dispatcher.FilterDispatcher,如图 7 所示。点击完成
生成的 web.xml 描述文件内容如下所示:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app id="WebApp_ID"> <display-name>Struts2TestPortlet</display-name> <filter> <filter-name>Struts2 Filter</filter-name> <display-name>Struts2 Filter</display-name> <description>Struts2 Filter</description> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>Struts2 Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> |
双击 portlet.xml,打开 Portlet 部署描述符界面,切换到 portlet 选项卡,如图 8 所示:
点击添加按钮,添加一个 portlet, 输入 portlet 类型 org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher,确定,如图 9 所示:
编辑该 portlet 的其它信息,分别设定 Portlet 名称,显示名称,标题,简短标题,关键字。本示例中均输入 Struts2 Test Portlet。如图 10 所示:
接下来在本页中编辑受支持的方式 text/html, 添加 portlet 模式 view,edit, help。如图 11 所示:
Portlet 模式让 Portlet 决定它该显示什么内容和执行什么动作。调用一个 Portlet 的时候,Portlet 容器会提供一个 Portlet 模式给那个 Portlet。当在处理一个请求动作时,Portlet 的模式是可以用程序来改变的。
JSR168 规范定义了三个 Portlet 模式: 浏览 (View)、编辑 (Edit) 和帮助 (Help)。Struts2 支持其中的全部三个模式。同时 Portal 还可以根据使用者的角色,来决定是要提供 ( 显示 ) 哪几个 Portlet 模式给使用者操作。在我们的例子中就使用了这三个模式。
继续在本页中添加初始化参数,首先是 Namespace 相关的参数见表 1:
/view |
/edit |
/help |
考虑到在同一个 Web 应用中需要同名 Action,Struts2 以命名空间方式管理 Action。同一个命名空间里不能有同名的 Action,不同的命名空间里可以有同名的 Action。Struts2 不支持为单独的 Action 设置命名空间,而是通过为包指定 namespace 属性来为下面所有的 Action 指定共同的命名空间。这一点可以从下面的 portlet.xml 清单中看出。Struts2 对 portlet 的三种模式的支持是通过 namespace 体现的。View, Edit, Help 三种模式分别对应 ViewNamespace, editNamespace, helpNamespace。
Action 相关的参数见表 2:
view |
edit |
help |
这些参数指定了在 portlet 的三种模式下的默认 aciton 名称,进入 View、Edit、Help 模式分别首先调用名称为 view、edit、help 的 action。
生成 portlet.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" id="com.ibm.faces.portlet.FacesPortlet.3ccbdcb861"> <portlet> <portlet-name>Struts2 Test Portlet</portlet-name> <display-name>Struts2 Test Portlet</display-name> <portlet-class> org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher </portlet-class> <init-param> <name>viewNamespace</name> <value>/view</value> </init-param> <init-param> <name>editNamespace</name> <value>/edit</value> </init-param> <init-param> <name>helpNamespace</name> <value>/help</value> </init-param> <init-param> <name>defaultViewAction</name> <value>view</value> </init-param> <init-param> <name>defaultEditAction</name> <value>edit</value> </init-param> <init-param> <name>defaultHelpAction</name> <value>help</value> </init-param> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> <portlet-mode>edit</portlet-mode> <portlet-mode>help</portlet-mode> </supports> <portlet-info> <title>Struts2 Test Portlet</title> <short-title>Struts2 Test Portlet</short-title> <keywords>Struts2 Test Portlet</keywords> </portlet-info> </portlet> </portlet-app> |
在本清单中 Portlet 类“org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher”在将 Struts2 集成到 Portlet 中起到了关键作用,该类将 Portlet 操作分发给 Struts2。
在 WEB-INF 下新建 jsp 文件夹,并生成几个 jsp 文件及内容如下 :
<%@ taglib prefix="s" uri="/struts-tags"%> <H2>Please sign in</H2> <s:form action="login" method="POST"> <s:textfield label="User Name" name="username" value="%{username}" /> <s:password label="Password" name="password" value="%{password}" /> <s:submit value="Sign in" /> </s:form> |
<%@ taglib prefix="s" uri="/struts-tags"%> <H2>Welcome <s:property value="username" /></H2> <p /><a href="<s:url action="view"/>">Back to sign in page</a> |
<%@ taglib prefix="s" uri="/struts-tags"%> <H2>Invalid username or password!</H2> <p /><a href="<s:url action="view"/>">Back to sign in page</a> |
<%@ taglib prefix="s" uri="/struts-tags"%> <H2>This is edit page!</H2> |
<%@ taglib prefix="s" uri="/struts-tags"%> <H2>This is help page!</H2> |
在 src 目录下建立 struts.xml,工程构建之后 struts.xml 会被置于 WEB-INF/classes 下,这也是 Struts2 默认的配置文件路径。
struts.xml 文件是基于 Struts2 的项目的核心配置文件。在 portlet 开发过程最重要的内容就是要将 "struts-portlet-default.xml" 包含进来,这个 xml 文件存在于前面步骤中我们拷贝过来的 struts2-core-j4-2.0.11.jar 中,只有把它包含进来我们才能使 Struts2 支持 portlet。接下来描述的内容就是将前面定义的 action 和页面关联起来。从中可以看出我们定义的 login 这个 actoin 的输入界面是 input.jsp,如果成功则会被转向 success.jsp,失败则会被转向 fail.jsp。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <include file="struts-portlet-default.xml" /> <package name="view" extends="struts-portlet-default" namespace="/view"> <action name="view"> <result>/WEB-INF/jsp/input.jsp</result> </action> <action name="login" class="struts2TestPortlet.action.Login"> <result name="input">/WEB-INF/jsp/input.jsp</result> <result name="success">/WEB-INF/jsp/success.jsp</result> <result name="fail">/WEB-INF/jsp/fail.jsp</result> </action> </package> <package name="edit" extends="struts-portlet-default" namespace="/edit"> <action name="edit"> <result>/WEB-INF/jsp/edit.jsp</result> </action> </package> <package name="help" extends="struts-portlet-default" namespace="/help"> <action name="help"> <result>/WEB-INF/jsp/help.jsp</result> </action> </package> </struts> |
package struts2TestPortlet.action; public class Login extends ActionSupport { String username; String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String execute() throws Exception { if (username.equals("yanzhid") && password.equals("pwd")) { return "success"; } else { return "fail"; } } } |
在实现相同功能的前提下,我们不妨看一下 Struts 1 的相关实现,示例中采用的是 IBM 的 Struts for JSR168 Portlet 实现。
首先,我们必须针对用户输入的表单数据创建一个 ActionForm,当然,您也可以通过 xml 文件配置的方式创建一个 DynamicForm。
public class LoginActionForm extends ActionForm { String username; String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public void reset(ActionMapping mapping, HttpServletRequest request) { username = null; password = null; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); return errors; } } |
接下来,我们需要实现一个 Action 类。
public class LoginAction extends com.ibm.portal.struts.action.StrutsAction { public ActionForward execute(ActionMapping mapping, ActionForm form, PortletRequest request, PortletResponse response) throws Exception { LoginActionForm loginActionForm = (LoginActionForm) form; String username = loginActionForm.getUsername(); String password = loginActionForm.getPassword(); if (username.equals("yanzhid") && password.equals("pwd")) { StrutsViewCommand.addAttributeNameToSave("username"); request.setAttribute("username", username); return mapping.findForward("success"); } else { return mapping.findForward("fail"); } } } |
在 Struts1 中,我们习惯使用 JSTL 从 request 作用域中取得数据,呈现到 JSP 页面上,success.jsp 页面被改动如下:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/portlet" prefix="portlet"%> <%@taglib uri="http://java.sun.com/jstl/core" prefix="c"%> <portlet:defineObjects /> <H2>Welcome <c:out value="${username}"/></H2> |
由于精通 Struts1 的读者很多,其余相关改动和 struts1 的配置我们不再拗述,请读者查阅相关文献。
从中我们可以看出 struts2 和 struts1 的区别,并从中体会到 Struts2 的优势:
- 捕获输入:
Struts1 使用 ActionForm 对象捕获输入。所有的 ActionForm 必须继承一个基类。因为其他 JavaBean 不能用作 ActionForm,开发者经常创建多余的类捕获输入。当然您也可以使用 xml 文件描述一个 DynamicForm,但工作量并未显著减少。
Struts 2 可以直接使用 Action 属性作为输入属性,消除了对第二个输入对象的需求。当然,Struts2 也支持 ActionForm 模式,用作输入 / 输出对象。 - Action 类 :
Struts1 要求 Action 类继承一个抽象基类。Struts1 的一个普遍问题是使用抽象类编程而不是接口。
Struts2 Action 类可以实现一个 Action 接口,也可实现其他接口。Struts2 提供一个 ActionSupport 基类去实现常用的接口,但 Action 接口不是必须的,任何有 execute 标识的 POJO 对象都可以用作 Struts2 的 Action 对象。 - Portlet 依赖 :
Struts1 Action 依赖于 Portlet API , 当一个 Action 被调用时,PorletRequest 和 PortletResponse 被传递给 execute 方法。
Struts2 Action 不依赖于容器,允许 Action 脱离容器单独被测试。如果需要,Struts2 Action 仍然可以访问初始的 request 和 response。但是,其他的元素减少或者消除了直接访问 PorletRequest 和 PortletResponse 的必要性。 - 可测性 :
测试 Struts1 Action 的一个主要问题是 execute 方法暴露了 Portlet API,这使得测试要依赖于容器。
Struts2 Action 可以通过初始化、设置属性、调用方法来测试,使测试更容易。 - 对 Portlet 的支持程度:
Struts1 框架天生并不支持 Portlet, 为了将大批 Struts 程序员吸引到 WebSphere Portal 开发上来,IBM 公司针对自己的两种 Portlet 实现(IBM Portlet 和 JSR168 Portlet), 分别对 Struts 框架进行了扩展,以适应 Portlet 开发。细心的读者一定已经发现了,我们的 LoginAction 类继承的是 com.ibm.portal.struts.action.StrutsAction 这个基类,而不是 Struts1 官方框架中的 Action 类。
Struts1 程序员刚刚进行 Portlet 开发的时候,一般会忽略一个重要的问题。与 servlet 的生命周期有所不同,portlet 存在操作响应 (Action) 阶段和呈现(Render)阶段。 在 portlet 操作响应阶段存放在 request 作用域的数据,在呈现阶段就会失效。为了解决这个问题,一个方案就是把数据放在 session 作用域中,考虑到服务器性能的原因,这个方案显然不被推荐。另一个方案就是使用 IBM 提供的一些特殊的 API, 按照 LoginAction 那样,在将数据放在 request 作用域之前,将数据变量名作为参数传给 StrutsViewCommand 的 addAttributeNameToSave 方法。为了说明这个问题,我们可以将 StrutsViewCommand.addAttributeNameToSave("username") 这行代码删掉,程序运行候就可以发现,success.jsp 将不会呈现 username 变量中保存的数据。
Struts2 的官方框架支持 JSR168 Portlet, 除了前期需要对 web.xml、portlet.xml 和 struts.xml 文件进行少许特殊配置外,程序员不需要考虑 Portlet 和 Servlet 之间的不同,无论是 Action 类的开发还是 JSP 页面中 Struts2 标签的应用,同在 Servlet 容器中用法是完全一样的。
采用 Struts2 的校验框架时,只需为该 Action 指定一个校验文件即可。该文件指定了 Action 的属性必须满足怎样的规则,下面清单即本应用中 Action 的校验文件的代码。Struts2 的校验文件规则与 Struts1 的校验文件设计方式不同,Struts2 中每个 Action 都可以有一个校验文件,该文件的文件名遵守如下规则:
<Action 名字 >-validation.xml
前面的 Action 名是可以改变的,后面的 -validation.xml 部分是固定不变的,且该文件应该被保存于 Action class 文件相同的路径下。如在本例中此校验文件在项目构建后保存在 WEB-INF/classes/Struts2TestPortlet/action/ 下,与 login.class 在同一目录中。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>Please input username!</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>Please input password!</message> </field-validator> </field> </validators> |
首先在 RAD7 控制台的服务器视图中添加一个可以运行 Portlet 的服务器。该视图中单击鼠标右键,选择新建—> 服务器。如图 13 所示 :
在弹出的新建服务器窗口中选择目标运行服务器,在本例中我们选择 WebSphere Portal V5.1 测试环境 , 对话框底部的服务器运行时呈现为 WebSphere Portal V5.1。在服务器主机名中输入 localhost,如图 14 所示。点击下一步,默认端口号为 9081。
继续点击下一步,出现门户网站服务器设置对话框,在这里需要将默认的管理员用户及密码设置成您在安装相应 Portal server 时设置的管理员用户及密码。如图 15 所示:
点击下一步,进入添加项目界面,将 " 可用的项目 " 一栏中的 Portlet 项目添加到右侧 " 已配置项目 " 栏中。点击完成,于是我们就完成了这个 Portlet 项目在 RAD7 中的配置和部署。如图 16 所示:
在启动服务器之前,需要右键点击服务器标签页中的已添加的服务器,选择 " 打开 ",然后进入 " 门户网站 " 标签页,检查确认管理员用户和密码已经被设置成安装 Portal server 时设置的管理员用户,如图 17 所示。以确保 Portal server 启动成功。
接下来,右键点击服务器标签页中已添加的服务器,选择 " 启动 ",服务器被启动。您可以从控制台中观察启动过程输出的日志。
打开浏览器网页输入:http://localhost:9081/wps/myportal, 输入管理员用户和密码,进入 Portal。程序转入 portlet view 模式的登录界面。如图 19 所示:
该 portlet 中用户需要输入自己的用户名和密码,本例中用户名和密码分别为 yanzhid 和 pwd,输入后点击 sign in 后进入成功页面,如图 20 所示:
如果用户未输入合法的用户名和密码,程序将跳转到登录失败页面。如图 21 所示:
通过点击 edit 按钮,potrlet 进入 edit 模式,如图 22 所示:
通过点击 help 按钮,potrlet 调用 help 模式,弹出 help 窗口,如图 23 所示:
为了使用本例中的 Struts2 的校验功能,返回到登录页面,重新登录。登录时不输入任何用户名和密码,直接点击 "Sign in" 按钮,您会看到用户名和密码文本框上方出现 "Please input username!" 和 "Please input password!" 字样,则说明本例中的校验功能正确执行了。如图 24 所示:
本文讨论了如何使用 Struts2 在 IBM WebSphere Portal 上来开发和部署一个 Portlet 应用,按照本文讲述的步骤操作,就可以在 WebShere Portal 上建立一个比较完整的 Portlet 应用了。
-
参与论坛讨论。
-
JSR 168: Portlet Specification :JSR 168 Portlet 规范的描述文档
- Struts 官方网站 http://struts.apache.org/ : 可以获得最新的 Struts 版本和文档,还可以参与邮件列表进行提问讨论。
-
developerWorks WebSphere Portal 专栏 : 学习 WebSphere Portal 的各种基础知识和应用技巧。
-
开发和部署一个作为 WebSphere Portal V5 Portlet 的 Struts 应用程序 :这篇文章描述并举例说明了如何利用 IBM Struts Portlet Framework 来开发和部署一个作为 Portlet 运行在 IBM WebSphere Portal V5 中的的应用程序。
-
集成 Hibernate,Spring,Struts Portlet 框架构建 Portlet 应用 :这篇文章介绍了流行的 Hibernate、Spring、Struts Portlet 框架应用到 Portlet 上的时候,遇到的一些细节问题。
-
IBM WebSphere 开发者技术期刊 : 在 IBM WebSphere Portal 的呈现阶段执行 Struts 操作 :这篇文章解答了 Struts1 框架在 Portlet 动作和呈现阶段所遇到的问题以及解决方案。
- IBM Developworks Struts 专题 :了解 Struts 的比较全面的站点。
- Struts2TestPortal.rar (5.6 MB)
- 下载次数: 0
相关推荐
总之,Struts2 JSR168 Portlet的开发融合了Struts2框架的灵活性和Portlet的标准化,使得开发人员能够在WebSphere Portal这样的大型企业门户上构建复杂的、交互式的应用程序。通过理解并掌握这个过程,开发者能够创建...
WebSphere Portal通过portlet技术实现了这一目标,portlet类似于小型Web应用程序,可以在门户页面上独立运行并交互。Portlet可以是静态内容、动态数据、Web服务或是复杂的业务流程。Portal还支持个性化,允许用户...
- **Struts Portlet Framework**:本书介绍了如何利用 Struts Portlet Framework 创建基于 Struts 的 Portlet 应用程序。 - **JSF Portlet**:最后,本书还涉及了如何使用 JSF 创建 Portlet 应用程序。 通过阅读...
在Portlet开发中,portlet与传统的Web应用有所不同,它运行在portlet容器中,如Liferay或WebSphere Portal。Portlet有自己的生命周期,包括初始化、渲染、事件处理等阶段。Struts2 Portlet插件则允许开发者使用...
- **工具**:WebSphere Portal 提供了一系列开发工具,帮助开发者快速构建和部署 Portlet 应用。 - **内容与搜索**: - **合成内容**:支持将多个来源的内容组合成单一视图。 - **Web 内容管理**:提供强大的内容...
1. **struts2-portlet-2.0.14.war**:这是一个portlet应用程序的例子,portlet是可以在portlet容器(如Liferay或WebSphere Portal)中运行的独立组件。在Struts 2框架下,portlet可以利用Struts 2的拦截器、结果类型...
【标题】"jsr168 portlet"是基于Java技术栈的一种Web应用程序规范,用于构建可重用、可组合的portlet组件。JSR(Java Specification Request)是Java社区进程中的一个请求,用来定义新的Java API或改进现有API。JSR...
在IBM WebSphere Portal环境下搭建开发环境,以及在Apache Pluto Portal环境下搭建开发环境,是开发Portlet应用的先决条件。快速入门部分可能涉及了基础的配置和测试步骤。 #### Portlet概念 Portlet定义了Portal...
Portlet是一种在Web应用程序中构建可重用、可组合组件的技术,尤其常见于企业级的portlet容器或门户应用中,如Liferay Portal、IBM WebSphere Portal等。Portlet允许开发者创建可嵌入到门户页面上的小型交互式应用,...
Struts是一个非常流行的Java EE框架,它主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用。MyEclipse则是一款强大的集成开发环境(IDE),特别适合于Java Web项目的开发。本篇文章将详细介绍如何在...
综上所述,对于想要在Portal开发领域有所成就的学习者来说,不仅要掌握基本的编程技术和工具,还需要深入了解特定领域的技术和标准,如WebSphere Portal、Portlet API等,并且不断学习新的技术和工具以适应快速变化...
Portlet是用于构建可重用、可组合的Web组件,特别是在Java企业级应用中的portlet容器,如Liferay或WebSphere Portal。 **Struts 框架的核心概念** 1. **Model**: 这是业务逻辑的代表,通常由JavaBeans或EJBs实现。...
Struts2.2.1 Apps 是一套基于Apache Struts 2.2.1版本的示例应用程序集合,这些示例旨在帮助开发者更好地理解和学习Struts2框架的核心功能和使用方式。Struts2是一个流行的Java Web应用程序框架,它提供了一种模型-...
- **定义**:Portlet是门户页面上的一个可重用的应用程序组件,能够根据用户需求动态生成内容。 - **分类**:根据功能不同,Portlet可以分为多种类型,如内容型、功能性等。 - **特点**: - 动态性:能够根据用户的...
`org.springframework.web.portlet-3.1.0.M2.jar`是Spring对portlet应用的支持,使得在portlet容器如Liferay或WebSphere Portal中,能够方便地构建和管理portlet组件。 `org.springframework.instrument.tomcat-...
5. **portlet-api.jar**: Portlet API 是用于开发portlet应用程序的标准接口,主要应用于portlet容器如IBM WebSphere Portal或Liferay Portal。如果这个应用是为portlet环境设计的,那么这个库将提供必要的接口和类...