当前位置:文档之家› 基于 Struts 2 构建 WebSphere Portal 上的 Portlet 应用

基于 Struts 2 构建 WebSphere Portal 上的 Portlet 应用

基于 Struts 2 构建 WebSphere Portal 上的 Portlet 应用
基于 Struts 2 构建 WebSphere Portal 上的 Portlet 应用

2008 年2 月28 日

Struts 2 是MVC 框架发展的最新阶段。Struts 2 从WebWork发展而来,而不是由Struts 1 演化而来,因此利用Struts 2 开发和部署应用程序有很多不同于Struts 1 的地方,尤其是在开发和部署Porlet方面,Struts 2 更是有着以往Portlet应用程序开发方式所无法比拟的优势。本文的目的就是通过在IBM 的WebSphere Portal Server 上开发和部署一个基于Struts 2 的Porlet应用,向读者介绍利用Struts 2 进行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)

Porlet示例程序设计概述

示例应用程序是一个简单的用户登录程序。合法的用户将跳转到的登录成功页面,登录失败的用户则跳转到登录失败页面,并被要求输入正确的用户名和密码。用户可以自由的在Portlet的View、Edit 和Help 模式之间进行切换。应用程序视图部分分为以下几部分:

?登录页面(login.jsp)——提示用户输入正确的用户名和密码,登录应用程序。

?登录成功页面(success.jsp)——提示用户登录成功。

?登录失败页面(fail.jsp)——提示用户登录失败,提示用户输入正确的用户名和密码。

?Edit 页面(edit.jsp)——用户进入Edit 模式后的页面。

?Help 页面(help.jsp)——用户进入Help 模式后的页面。

?程序主类——Login.java。

图 1. 程序初始页面

下图是本文示例的Action 与页面的交互图:图 2. Action 与页面的交互图

利用Struts2 实现Portlet

在本文中,使用Struts2 开发Portlet应用需要经历以下步骤:

1.使用RAD7 建立开发环境

2.生成web.xml 配置文件

3.生成portlet.xml 配置文件

4.编辑jsp 文件

5.应用Struts2

6.部署Portlet 应用程序

7.访问Portlet 应用

使用RAD7 建立开发环境

在Rational Application developer 7 中启动一个Portlet项目,需要遵循下列步骤:

1.选择新建一个Portlet项目,如图3 所示:

图 3. 新建一个Portlet项目

2.输入项目名Struts2TestPortlet,目标运行时选择WebSphere Portal v5.1 或者更高版本,

注意Portlet API 选择JSR 168 Portlet, 注意勾掉创建portlet选项,点击完成按钮。如图4 所示:

图 4. 设置项目属性

生成portlet项目及其结构如图5 所示:图 5.portlet 项目及其结构

3.接下来到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.xml 配置文件

双击WEB-INF/web.xml,打开web 部署描述符界面,如图6 所示:

图 6.web 部署描述符界面

切换到过滤器选项卡,点击添加按钮,创建一个过滤器,名称设定为Struts2 Filter, URL 映射为/*,并且使用现有的过滤器类org.apache.struts2.dispatcher.FilterDispatcher,如图7 所示。点击完成

图7. 创建一个过滤器

生成的web.xml 描述文件内容如下所示:

web.xml 描述文件内容

"https://www.doczj.com/doc/f315805348.html,/dtd/web-app_2_3.dtd">

Struts2TestPortlet

Struts2 Filter

Struts2 Filter

Struts2 Filter

org.apache.struts2.dispatcher.FilterDispatcher

Struts2 Filter

/*

生成portlet.xml 配置文件

双击portlet.xml,打开Portlet部署描述符界面,切换到portlet选项卡,如图8 所示:图8.Portlet 部署描述符界面

点击添加按钮,添加一个portlet,输入portlet类型

org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher,确定,如图9 所示:

图9. 添加portlet

编辑该portlet的其它信息,分别设定Portlet名称,显示名称,标题,简短标题,关键字。本示例中均输入Struts2 Test Portlet。如图10 所示:

图10. 编辑portlet信息

接下来在本页中编辑受支持的方式text/html, 添加portlet模式view,edit, help。如图11 所示:图11. 添加portlet模式

Portlet模式让Portlet决定它该显示什么内容和执行什么动作。调用一个Portlet的时候,Portlet容器会提供一个Portlet模式给那个Portlet。当在处理一个请求动作时,Portlet的模式是可以用程序来改变的。

JSR168 规范定义了三个Portlet模式:浏览(View)、编辑(Edit) 和帮助(Help)。Struts2 支持其中的全部三个模式。同时Portal 还可以根据使用者的角色,来决定是要提供( 显示) 哪几个Portlet模式给使用者操作。在我们的例子中就使用了这三个模式。

继续在本页中添加初始化参数,首先是Namespace 相关的参数见表1:

表 1. Namespace 相关的参数

考虑到在同一个Web 应用中需要同名Action,Struts2 以命名空间方式管理Action。同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。Struts2 不支持为单独的Action 设置命名空间,而是通过为包指定namespace 属性来为下面所有的Action 指定共同的命名空间。这一点可以从下面的portlet.xml 清单中看出。Struts2 对portlet的三种模式的支持是通过namespace 体现的。View,Edit,Help 三种模式分别对应ViewNamespace, editNamespace, helpNamespace。Action 相关的参数见表2:

表 2. Action 相关的参数

这些参数指定了在portlet的三种模式下的默认aciton名称,进入View、Edit、Help 模式分别首先调用名称为view、edit、help 的action。

图12. 编辑portlet初始化参数

生成portlet.xml 文件如下:

portlet.xml 描述文件内容

xmlns="https://www.doczj.com/doc/f315805348.html,/xml/ns/portlet/portlet-app_1_0.xsd"

version="1.0" xmlns:xsi="https://www.doczj.com/doc/f315805348.html,/2001/XMLSchema-instance"

xsi:schemaLocation="https://www.doczj.com/doc/f315805348.html,/xml/ns/portlet/portlet-app_1_0.x sd

https://www.doczj.com/doc/f315805348.html,/xml/ns/portlet/portlet-app_1_0.xsd"

id="com.ibm.faces.portlet.FacesPortlet.3ccbdcb861">

Struts2 Test Portlet

Struts2 Test Portlet

org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher

viewNamespace

/view

editNamespace

/edit

helpNamespace

/help

defaultViewAction

view

defaultEditAction

edit

defaultHelpAction

help

text/html

view

edit

help

Struts2 Test Portlet

在本清单中Portlet类“org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher”在将Struts2 集成到Portlet中起到了关键作用,该类将Portlet操作分发给Struts2。

编辑jsp文件

在WEB-INF 下新建jsp文件夹,并生成几个jsp文件及内容如下:

success.jsp

edit.jsp

help.jsp

应用Struts2

建立Struts2 配置文件struts.xml

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

struts.xml

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"https://www.doczj.com/doc/f315805348.html,/dtds/struts-2.0.dtd">

namespace="/view">

/WEB-INF/jsp/input.jsp

/WEB-INF/jsp/input.jsp

name="success">/WEB-INF/jsp/success.jsp

/WEB-INF/jsp/fail.jsp

namespace="/edit">

/WEB-INF/jsp/edit.jsp

namespace="/help">

/WEB-INF/jsp/help.jsp

新建java 类Login.java

Login.java

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) {

https://www.doczj.com/doc/f315805348.html,ername = username;

}

public String execute() throws Exception {

同Struts1 的比较

在实现相同功能的前提下,我们不妨看一下Struts 1 的相关实现,示例中采用的是IBM 的Struts for JSR168 Portlet实现。

首先,我们必须针对用户输入的表单数据创建一个ActionForm,当然,您也可以通过xml 文件配置的方式创建一个DynamicForm。

java 类LoginActionForm.java

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) {

https://www.doczj.com/doc/f315805348.html,ername = username;

}

public void reset(ActionMapping mapping, HttpServletRequest request) {

username = null;

password = null;

接下来,我们需要实现一个Action 类。

java 类LoginAction.java

public class LoginAction extends com.ibm.portal.struts.action.StrutsAction { public ActionForward execute(ActionMapping mapping, ActionForm form,

PortletRequest request, PortletResponse response) throws Exception {

|-------10--------20--------30--------40--------50--------60--------70--------80--------9|

|-------- XML error: The previous line is longer than the max of 90 characters ---------|

LoginActionFormloginActionForm = (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 页面被改动如下:

由于精通Struts1 的读者很多,其余相关改动和struts1 的配置我们不再拗述,请读者查阅相关文献。从中我们可以看出struts2 和struts1 的区别,并从中体会到Struts2 的优势:

1.捕获输入:

Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他

JavaBean 不能用作ActionForm,开发者经常创建多余的类捕获输入。当然您也可以使用xml 文件描述一个DynamicForm,但工作量并未显著减少。

Struts 2 可以直接使用Action 属性作为输入属性,消除了对第二个输入对象的需求。当然,

Struts2 也支持ActionForm模式,用作输入/ 输出对象。

2.Action 类:

Struts1 要求Action 类继承一个抽象基类。Struts1 的一个普遍问题是使用抽象类编程而不是接口。

Struts2 Action 类可以实现一个Action 接口,也可实现其他接口。Struts2 提供一个

ActionSupport基类去实现常用的接口,但Action 接口不是必须的,任何有execute 标识的POJO 对象都可以用作Struts2 的Action 对象。

3.Portlet依赖:

Struts1 Action 依赖于Portlet API , 当一个Action 被调用时,PorletRequest和

PortletResponse被传递给execute 方法。

Struts2 Action 不依赖于容器,允许Action 脱离容器单独被测试。如果需要,Struts2 Action 仍然可以访问初始的request 和response。但是,其他的元素减少或者消除了直接访问

PorletRequest和PortletResponse的必要性。

4.可测性:

测试Struts1 Action 的一个主要问题是execute 方法暴露了Portlet API,这使得测试要依

赖于容器。

Struts2 Action 可以通过初始化、设置属性、调用方法来测试,使测试更容易。

5.对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 的验证功能

采用Struts2 的校验框架时,只需为该Action 指定一个校验文件即可。该文件指定了Action 的属性必须满足怎样的规则,下面清单即本应用中Action 的校验文件的代码。Struts2 的校验文件规则与Struts1 的校验文件设计方式不同,Struts2 中每个Action 都可以有一个校验文件,该文件的文件名遵守如下规则:

-validation.xml

前面的Action 名是可以改变的,后面的-validation.xml 部分是固定不变的,且该文件应该被保存于Action class 文件相同的路径下。如在本例中此校验文件在项目构建后保存在

WEB-INF/classes/Struts2TestPortlet/action/ 下,与login.class在同一目录中。

Login-validation.xml

"-//OpenSymphony Group//XWork Validator 1.0.2//EN"

"https://www.doczj.com/doc/f315805348.html,/xwork/xwork-validator-1.0.2.dtd">

true

Please input username!

true

Please input password!

部署Portlet应用程序

首先在RAD7 控制台的服务器视图中添加一个可以运行Portlet的服务器。该视图中单击鼠标右键,选择新建—>服务器。如图13 所示:

图13. 新建服务器

在弹出的新建服务器窗口中选择目标运行服务器,在本例中我们选择WebSphere Portal V5.1 测试环境, 对话框底部的服务器运行时呈现为WebSphere Portal V5.1。在服务器主机名中输入localhost,如图14 所示。点击下一步,默认端口号为9081。

图14. 选择目标运行服务器

Struts2框架工作原理及应用体会

2012年第11卷第6期 产业与科技论坛2012.(11).6 Industrial &Science Tribune Struts2框架工作原理及应用体会 □宋 君 张家爱 【摘要】通过针对特定用户的分析,搭建以Struts2为技术核心的旅行社管理系统。本文简单的介绍了MVC 、 Struts2的工作原理,同时总结了在项目制作过程中所得到的心得。 【关键词】 Struts2;MVC ;FilterDispatcher ;Action 【基金项目】本文为大学生科技创新院级基金项目(编号:2011070)成果 【作者单位】宋君,吉林农业科技学院信息工程学院;张家爱,吉林农业科技学院信息工程学院教师 本着锻炼自我与积极参与到实用性技术的目标,以发掘自身创新意识为前提。利用空闲时间,在老师的指导下,进行了一次大学生创新项目的实践性活动。本着实用原则,以某中小旅行社为客户(根据用户需求,匿名),以Struts2框架为基点,进行了一次旅行社管理系统的开发。在项目结束之余, 特将在项目过程中经历的种种认识进行了简单的总结,希望让阅读本文的朋友们,更多的参与到此类活动中。 一、基础思想— ——MVC 简述作为时下经典框架之一, MVC 具有其独特的价值。MVC 框架简单的说,就是将数据模型与用户视图进行分离。通过控制器进行协调处理的一种结构是框架。同时,也是本文中要讨论的Sturts2框架的基础思想。 M 是指模型层(Model ),V 是指用户视图(View ),C 则是指控制器 (Controller )。这种划分方式是以将模型层与视图层进行代码分离,从而降低两者之间的耦合性,使同一程序可以使用不同形式进行表现。不同层之间的修改不会或尽量少的印象到其他层功能的史前为前提。有效的提高的代码的维护性和设计难度。 图1 二、 Struts2工作原理(一)Struts2框架组成。Struts2框架由三个主要部分组成:核心控制器、业务控制器,以及由用户实现的业务逻辑组件。这里我们将侧重于核心控制器与业务控制器的理解与说明。 (二)核心控制器:FilterDispatcher 。FilterDispatcher 是Struts2框架的核心控制器,在此,我们可以将FilterDispatcher 看作一个类似于过滤网的过滤器。当用户发出请求,并到达Web 硬哟那种时,该过滤器会过滤用户请求。如果用户请求的结尾为action ,则将该请求转入Struts2框架进行处理。当Struts2框架获得了*.actio 请求后,会根据请求前面“*”的那部分内容,决定调用哪个业务逻辑组件作为响应单位。这里需要说明的是Struts2用来处理用户请求的Action 实例并不是业务控制器,而是作为Action 的代理———正因为Struts2的一大特点,与Servlet API 的非耦合性,使得用户实现的业务控制器无法直接处理用户请求。有效的提高了后期调试维护的效率。而Struts2框架再次提供了了一系列的拦截器。这些拦截器负责将HttpServletRequest 请求的参数解析出来,传入Action 中,并毁掉Action 的Execute 方法来处理用户请求。用户实现的Action 类仅作为Struts2的Action 代理的代理目标。用户实现的业务控制器则包含了对用户请求的处理。用户的请求数据包含在HttpServletRequest 对象中,而用户的Action 类无需访问HttpServletRequest 对象。拦截器负责将HttpServletRequest 里的请求数据解析出来,并传给业务逻辑组件Action 实例。 (三)业务控制器。业务控制器就是前文提到的用来实现用户Action 的实力,这里的每个Action 类通常包含有一个execute 方法,当业务控制器处理完用户的请求后,该方法将会针对此次处理返回一个字符串— ——该字符串就是一个逻辑树图名。当程序开发人员开发出系统所需要的业务控制器后,还需要针对性的配置Struts2的Action ,即需要配置Ac- tion 的以下三个部分:(1)Action 所处理的URl 。(2)Action 组件所对应的实现类。(3)Action 里包含的逻辑试图和物理资源之间的对应关系。每个Action 都要处理一个用户请求,而用户请求则总是包含有指定的URL 。当核心控制器过滤用户请求,并调用后,根据请求的URL 和Action 处理URL 之间的对应关系来处理转发。 · 342·

Struts2练习题说课讲解

Struts 2作业 1.简述什么是MVC? 答:MVC 的全称为model-view-controller(模型-视图-控制器)。MVC 是一种开发应用程序的模式,这个模式已经具有了很好的框架架构,并且十分容易维护。使用MVC 开发出来的应用程序一般包括以下几块内容:·控制器(Controller):控制器类处理客户端向Web 应用程序发出的请求,获取数据,并指定返回给客户端,用来显示处理结果的视图。·模型(Model):模型类代表了应用程序的数据,这些数据通常具有一个数据验证逻辑,用来使得这些数据必须符合业务逻辑。·视图(View):视图类是Web 应用程序中用来生成并显示HTML 格式的服务器端对客户端请求的响应结果的模板文件 2.Struts 2以(WebWork)为核心,采用(拦截器)的机制来处理用户的 请求。 3.简述一个请求在Struts 2框架中的处理流程,请按自己对框架的理解叙述。答:1-用户提交自己的请求;2-由web.xml拦截,转发到action进行处理;3- Struts.xml根据相应的action配置,调用相应的方法来处理,并根据结果转发到不同的页面。 4.不属于Action接口中定义的字符串常量是( B )? A)SUCCESS B)FAILURE C)ERROR D)INPUT 5.资源文件的后缀名为(D)? A)txt B)doc C)property D)properties 6.在JSP页面中可以通过Struts 2提供的(D)标签来输出国际化信息。 A) B) C) D) 7.以文字过滤拦截器为例,简述拦截器的使用步骤。 答:1-用户提交自己的请求; 2-由web.xml拦截,转发到action进行处理; 3- Struts.xml根据相应的action配置,调用相应的方法来处理,并根据结果转发到不同的页面; 8.在同一个系统中配置多个拦截器,试说明它们的执行顺序。 答:一般来说:先配置的拦截器,会先获得执行的机会,但是实际情况不是这样。execute()方法执行之前,配置在前面的拦截器,会先对用户的请求起作用。execute()方法执行之后,配置在后面的拦截器,会先对用户的请求起作用。(两头向中间靠拢的执行)。 9.请简述struts2中输入校验的几种方式。

基于Struts2框架的信息发布系统的设计与初步实现

第一章Struts2的起源和发展 说到网络应用很难让人不联想到网络信息的浏览,自从Internet进入民用领域之后,上网成为了越来越多的人闲暇时光的消磨手法。于是网络系统的开发也变得越来越总要。 1.1 Web技术的发展 随着Internet技术的大面积应用和发展,传统的静态HTML页面由于缺乏足够的用户交互能力已经无法满足日益膨胀的网络需求。人们希望Web应用中能够包含更多的动态交互功能,于是为了应对拥有更广泛用户群的动态Web开发,软件开发商分别推出的ASP和JSP两款动态网站开发解决方案。但是当时的JSP 开发并没有很科学的层次设计,最初的JSP开发中逻辑代码和前端代码杂合在一起。虽然在最初开发时这样的做法使得开发非常的容易,然而随着Web系统的使用越来越广泛,应用规模的日益增长,如果继续使用传统的简单的JSP + Servlet 结构进行Web系统的开发,则会由于系统层次混乱而导致系统的开发难度和维护成本越来越大,最终使开发过程陷入困境。 1.2 MVC思想进入Web系统开发 面对开发过程中所出现的困难,开发者们试图寻找一种能够使得开发结构更加具有条理性的开发模式。根据以往面向对象系统设计的经验,开发者开始将MVC开发模式引入Web系统的开发。MVC模式将一个应用分为三个基本部分:Model(模型)、View(视图)、Controller(控制器)。在此模式中触发事件由控制器捕获,并根据事件的类型来改变模型和视图。这样既可将系统模型与视图分离,从而使各部分能够工作在最小的耦合状态下协同工作,从来提高系统的扩展性和可维护性。将其引入Web系统开发后,系统模式由传统的JSP完成用户请求和响应改变为由控制器捕获用户请求,JavaBean完成模型操作,而JSP专门负责响应用户需求。老一代的开发框架Struts1便是这时的产物。

struts2标签使用实例

Struts2中数据标签使用示例 S truts2提供了大量丰富的标签供使用,它不再像S truts1中一样,将种类标签进行分门列别,但可以根据其使用的用途用以区别。本文通过对S truts2中数据标签的学习,来对S truts2中标签的学习起到一个抛砖引玉的作用。 文中将介绍Action标签、Bean标签、Data标签、Include标签、P aram标签、Set标签、T ext标签、P roperty 标签等标签。 代码下载:https://www.doczj.com/doc/f315805348.html,/y1ps2Mjpc3NiLKuetMOpCsZOOypD6KSdo8-46Zy2wpoMcABeo4vOC NJXtWDEO93-TXgZogwAF YxSOni5BEG2EoN65OFwHdG71v-/St ruts2DataTags.rar?download 一、标签 Action标签,顾名思义,是用来调用Action的标签,在JSP中页面中,可以指向具体指定某一命名空间中的某一Action。而标签的主体用于显示及渲染Actionr的处理结果。 1.WebRoot\pages\dataTagssuccess.jsp处理页面 <%@ page contentType="text/htm l; charset=GBK" %> <%@ taglib prefix="s" uri="/struts-tags" %> Action Tag 示例

Action Tag 示例

s:action标签用于在页面显示结果.
这里使用标签进行页面跳转,并用于显示处理的结果。 2.先来看st ruts.xml中的配置: /pages/dataTags/success.jsp

基于Struts2结构的在线考试系统设计与实现

龙源期刊网 https://www.doczj.com/doc/f315805348.html, 基于Struts2结构的在线考试系统设计与实现 作者:唐晔 来源:《软件导刊》2013年第06期 摘要:基于Struts2和J2EE技术框架,结合MySQL数据库,设计并实现了一个基于B/ S 架构的在线考试系统,重点阐述了用户答题模块的设计,并提出了一种系统随机出题的方法。 关键词:在线考试系统;Struts2技术;J2EE;随机出题 中图分类号:TP319文献标识码:A文章编号:1672-7800(2013)006-0071-02 作者简介:唐晔(1973-),男,遵义师范学院计算机科学与技术系副教授,研究方向为计算机网络。 0引言 根据市场需求,网站的开发需要高效,同时考虑到网站的盈利性,则需要降低人力成本和资源成本。目前,大部分基于Java开发的网站都采用了Struts2的框架结构,并结合MySQL 数据进行开发,以降低开发成本和提高开发效率。Struts2是基于MVC模式的开发,Struts2框架为程序员的开发带了极大方便,同时也更好地满足了用户的多样化需求。 本系统是基于Struts2开发的一个在线考试系统,同时采用了J2EE技术,结合Mysql数据库,设计并实现了一个基于B/S架构的网上考试系统,并提出了一种系统随机出题的方法。 1系统总体设计 使用在线考试系统的用户必须是注册用户,使用时要先登录。当用户选择某种测试后,系统会自动给出题目进行考试。考试开始时,系统自动计时,用户必须在规定的时间内完成考试,否则时间到了则不能答题。用户答完题后可以直接提交,系统会在用户自主提交或时间超时的情况下对用户所做的题进行评分。用户信息和试题维护由管理员进行管理,当管理员进入管理时,也需要有一个登录验证功能来验证是否有权限进入管理页面。管理员可以完成录入、修改、添加、删除等功能,还可以把已保存在文本文件里的数据导入到数据库中。 本系统总体结构如图1所示。 2系统设计 2.1数据表设计

Struts2的工作机制原理分析及实例

Struts2的工作机制分析及实例 一、概述 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x 与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork 的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.doczj.com/doc/f315805348.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到 struts-2.1.0-src\struts-2.0.10\src\core\src\main\java目录下查看Struts2的源文件,如图14所示。 (图14) 二、主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork 的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。

Struts2+Hibernate架构技术教程课后参考答案

第1章Struts2框架技术入门 1.5 习题 1.5.1 选择题 1.D 2.A 3.C 4.B 5.B 1.5.2 填空题 1.MVC 2.Struts1和WebWork 3.IBM 4. FilterDispatcher 5.JSP、Struts2标签 1.5.3 简答题 1.简述MVC设计模式的工作流程。 答:MVC设计模式工作流程是: (1)用户的请求(V)提交给控制器(C); (2)控制器接受到用户请求后根据用户的具体需求,调用相应的JavaBean或者EJB(M部分)来进行处理用户的请求; (3)控制器调用M处理完数据后,根据处理结果进行下一步的调转,如跳转到另外一个页面或者其他Servlet。 2.简述Struts2的工作原理。 答:Struts2中使用拦截器来处理用户请求,从而允许用户的业务控制器Action与Servlet分离。用户请求提交后经过多个拦截器拦截后交给核心控制器FilterDispatcher处理,核心控制器读取配置文件struts.xml,根据配置文件的信息指定某一个业务控制器Action(POJO类)来处理用户数据,业务控制器调用某个业务组件进行处理,在处理的过程中可以调用其他模型组件共同完成数据的处理。Action处理完后会返回给核心控制器FilterDispatcher一个处理结果,核心控制器根据返回的处理结果读取配置文件struts.xml,根据配置文件中的配置,决定下一步跳转到哪一个页面。 一个客户请求在Struts2框架中处理的过程大概有以下几个步骤: (1)客户提交请求到服务器; (2)请求被提交到一系列的过滤器过滤后最后到FilterDispatcher; FilterDispatcher是核心控制器,是基于Struts2中MVC模式的控制器部分; (3)FilterDispatcher读取配置文件struts.xml,根据配置信息调用某个Action来处理客户请求; (4)Action执行完毕,返回执行结果,根据struts.xml的配置找到对应的返回结果。

Liferay Struts2 完整实例 修正

目录 一.Liferay,ext开发环境的搭建 (1) 二.集成struts2 (3) 1.依赖包: (3) 2.使用Struts2 (3) 三.使用Hibernate. Spring (4) 1.建立bean (4) 2.建立事务层: (5) 3 .建立持久层 (8) 4. Action 中调用事务层 (10) 三.将portlet注册到portal (11) 四.加入国际化 (13) 五.加入处理页面 (13) 2010年12月20日,修改在页面上的标签找不到国际化信息。 一.Liferay,ext开发环境的搭建 1.进入myeclipse,修改liferay-portal-src-5. 2.3文件名为portal。导入portal到eclipse. 2.展开portal工程目录,我们可看到一个release.properties文件, 新建一个它的扩展配置文件, 文件名为release.${username}.properties。 ${username}是计算机当前用户名 我文件名是release.Administrator.properties,文件内容只一行:lp.ext.dir=D:\myspace\ext 即扩展工程放置路径。 3.打开myeclipse里面ant视图(window--> show view --> ant) , 在ant视图中,点击添加, 选择:\portalspace\portal\目录下build.xml 顺序执行clean ,start ,build-ext

4.将liferay-portal-tomcat-6.0- 5.2.3.zip解压到D:\portalspace\目录下,并更名为servers。 在D:\portalspace\ext目录下我们可以看到app.server.properties文件, 同样我们也要建立一个扩展配置文件app.server.${username}.properties,文件内容两行:lp.ext.dir=D:/myspace/ext app.server.type=tomcat app.server.tomcat.dir=D:/ myspace /servers/tomcat-6.0.18 5.将myspace/ext 工程导入到eclipse中。 6.打开window --> preference --> myeclipse --> application servers 将其他应用服务器 disabble掉, 找到tomcat6,将tomcat home diretory 指向D:\myspace\servers\tomcat-6.0.18, 展开tomcat6,JDK选择我们配置好的JDK1.5+, JDK选项下面optional java vm argument输入如下内容: -Xms128m -Xmx256m -XX:MaxPermSize=128m 7.建立数据库lportal 。在D:\myspace\ext\ext-impl\src\portal-ext.properties文件中添加数据 库连接信息 # MySQL jdbc.default.driverClassName=com.mysql.jdbc.Driver jdbc.default.url=jdbc:mysql://localhost:3306/lportal https://www.doczj.com/doc/f315805348.html,ername=root jdbc.default.password=root hibernate.dialect=org.hibernate.dialect.MySQLDialect 若不添加以上内容liferay就会使用自带默认数据库. 8.选择 :\myspace\ext\目录下build.xml 顺序执行clean,deploy 将ext项目部署到 tomcat-6.0.18. 然后选择eclipse中的tomcat6.0启动即可 9.在浏览器里输入http://localhost:8080/可以看到portal系统了。输入emal: test@https://www.doczj.com/doc/f315805348.html, password: test登录

struts2教程(完全版)

Yaio 4 一、准备工作及实例 4 1.解压struts- 2.1.6-all.zip 4 2.六个基本包 4 3.初识struts2配置文件 4 (1).web.xml文件 4 (2).struts.xml文件 4 (3).struts.properties(参default.properties) 4 (4)struts-default.xml 5 (5)其它配置文件 5 4.让MyEclipse提示xml信息 5 5.如何使用alt+/提示 5 6.实例 5 7.开启struts2自带的开发模式常量 7 8.vo传参模式 8 9.ModerDriven传参模式(不建议采用) 8 10.为什么要使用struts2代替struts1.x 9

二、struts.xml配置及例程 9 1.配置文件的优先级 9 2.配置形式 9 3.package配置相关 10 4.分工合作include:指定多个配置文件 12 5.tomcat认证访问 12 6.初识拦截器 13 7.Action中的method属性 15 8.使用ForwardAction实现页面屏蔽。 17 8.使用default-Action配置统一访问 17 小结Action 18 9.使用通配符 18 10.使用0配置:ZERO Annotation 19 11.Result配置详解 19 12.异常处理 24 三、在Action获取Scope对象 25 方式一、与Servlet解耦合的非IOC方式 25

方式二、与Servlet解耦合的IOC方式 27 方式三、与Servlet耦合的非IOC方式 27 方式四、与Servlet耦合的IOC方式 28 四、OGNL与ValueStack(VS) 29 1.值栈入门 29 2.OGNL入门 31 3.普通方法访问 31 4.静态方法访问 31 5.默认类Math的访问 32 6.调用普通类的构造方法 32 7.集合对象初步 32 8.集合对象进阶 33 9.N语法top语法 34 10.获取Stack Context中的信息 35 11.总结$ # %的区别 35 12.总结OGNL[重点] 35 五、拦截器 36

基于Struts2的高校毕业论文管理系统毕业论文

基于Struts2的高校毕业论文管理系统毕业论文 目录 1.引言 (1) 2. 概述 (1) 2.1 系统的开发背景 (1) 2.2 系统的现状 (2) 3.技术工具简介 (2) 3.1Tomcat服务器 (2) 3.2 MySQL数据库 (3) 3.3 JAVA语言 (3) 3.4 JSP技术 (3) 3.5 Struts2框架 (3) 4.系统的总体分析 (3) 4.1系统的需求性分析 (4) 4.2 系统功能概述 (4) 4.2.1学生角色 (4) 4.3业务流图 (5) 4.4 数据流程图 (8) 5.系统的总体设计 (10) 5.1 模块分析与整体设计 (11) 5.2 数据库设计和构建 (14) 6.系统功能的具体实现 (17) 6.1 登录部分的设计 (17) 6.2 学生个人信息管理部分的设计 (18) 6.2.1学生登录后的界面如图 (19) 6.2.2查看个人资料 (19) 6.2.3论文选课的实现 (20) 6.2.5在线答疑 (23) 6.2.6论文成绩的公布 (23) 6.3.2教师申请提交论文题目 (24) 6.3.3 查看申报结果 (25) 6.3.4上传资料界面 (27) 6.3.5老师查看学生的留言信息 (28) 6.3.6查看答辩小组界面 (29) 6.4院系管理员部分的设计 (29) 6.4.1管理员登陆后的界面 (30) 6.4.2查看老师上传的论文题目的申请 (30) 6.4.3查看院系中所有论文申请的情况 (30) 6.4.4分配选题 (31)

6.4.5查看最后的选题结果 (31) 6.4.6 院系管理员下载功能实现 (32) 6.4.7查看答辩小组信息界面 (32) 6.4.8新增答辩小组 (33) 6.4.9.查看答辩组的分组情况 (33) 6.4.10管理员发布学生成绩 (33) 6.5 系统管理员部分的设计 (34) 7.测试的过程 (34) 7.1登录测试 (34) 7.2商品数据测试 (34) 7.3其它测试 (34) 7.4的测试结果 (35) 7.5 的不足之处 (35) 8.总结与展望 (35) 参考文献 (36)

Struts2配置详解2 配置Action

配置Action Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。 该方法如下: public String execute() throws Exception Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:public String xxx() 在实际开发中,action类很少直接实现Action接口,通常都是从 com.opensymphony.xwork2.ActionSupport类继承,ActionSupport实现了Action接口和其他一些可选的接口,提供了输入验证,错误信息存取,以及国际化的支持,选择从ActionSupport继承,可以简化action的定义。 开发好action之后,好需要对action进行配置,以告诉Struts2框架,针对某个URL的请求应该交由哪个action进行处理。 1.Action映射: action映射是Struts2框架中的基本”工作单元”,action映射就是将一个请求 URL(即action的名字)映射到一个action类,当一个请求匹配某个action的名字 时,框架就使用这个映射来确定如何处理请求。 action元素的完整属性表 例如: /user.jsp 2. 使用method属性 在配置action时,我们可以通过action元素的method属性来指定action调用的方法,所指定的方法,必须遵循与execute方法相同的格式。 在Struts2.xml文件中,我们可以为同一个action类配置不同的别名,并使用 method属性。 在Struts.xml文件中为同一个Action类配置不同的别名 /Methods/list.jsp

Struts2简单示例

Struts2增删改查例子 UserBean //要添加set,get public class UserBean{ private Long id; private String name; private String password; private int age; private Date birthday; private Long sex; private Set likes; private String des;//描述 } public class LikeBean{ private Long id; private String name; } FormAction public class FormAction{ //属性要生成get,set //标记(添加,修改) private String tip; private UserBean userBean; private List likeList; private List userList; //到列表页面 public String list(){ userList =new ArrayList(); userList.add(new UserBean("abc",19,new Date())); userList.add(new UserBean("def",70,new Date())); userList.add(new UserBean("ghi",40,new Date())); return"list"; } //到添加页面 public String toAdd(){ likeList =new ArrayList(); likeList.add(new LikeBean(new Long(1),"上网")); likeList.add(new LikeBean(new Long(2),"读书")); likeList.add(new LikeBean(new Long(3),"游戏")); tip ="add"; return"info";

尚学堂-马士兵Struts2教学视频之Struts2 学习笔记

Struts2 学习笔记 ---wjt276 [二○一○年一月五日完]

目录 01 Struts2-Action (5) 一、Struts作用: (5) 二、搭建Struts2的运行环境: (5) 三、Namespace (6) 四、标签 (6) 五、Action (6) 六、路径问题的说明 (8) 七、Action的动态调用方法 (8) 八、Action通配符(wildcard)的配置 (9) 九、Action的属性接收参数 (10) 1、在Action添加成员属性接受参数 (10) 2、域模型(Domain Model) (10) 3、ModelDriven接收参数 (11) 十、Action属性接收参数中文问题 (12) 十一、简单数据验证 (12) 十二、访问Web元素 (14) 一、方法一:ActionContext方式 (15) 二、方式二:Ioc(控制反转)—推荐使用 (15) 三、方式三:获取原类型 (16) 四、方式四:获取原类型-控制反转 (17) 十三、Struts2配置文件模块化包含(include) (17) 十四、默认的Action (18) 十五、Action总结 (18) 02 Struts2-Result (19) 一、Result类型 (type) (19) 二、全局结果集(Globle Result) (20) 三、动态的结果集(dynamic result) (21) 四、带参数的结果集 (21) 五、Result总结 (22) 六、项目经理: (22) 03 OGNL表达式语言 (23) 04 Struts2-Tags (28) Struts2标签目录 (28) 一、property标签 (28) 二、set标签 (29) 三、bean标签 (29) 四、标签-少使用 (29) 五、If elseif else (30) 六、Iterator标签 (31) 七、Theme (31) 05设计约定(编码规定) (32) 06 项目开发顺序 (32) 07 声明式异常处理 (33) 08 国际化 (35) 一、国际化资源文件 (35) 二、Java国际化 (35)

基于MVC模式Struts框架研究与应用详解

摘要: Struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC 的web应用程序的开发。本文讨论了Struts框架实现MVC模式的原理与方法,给出了一个具体的应用实例。 分布式企业应用软件结构复杂、涉及多种技术,对设计开发人员提出了很高的要求。在此情况下,运用设计模式――可复用的设计方案进行软件的设计开发十分必要。MVC模式已被证明是一种成功的软件设计模式,本文主要讨论了一种实现MVC模式的应用框架――Struts,并通过一个实例展示了Struts框架实现MVC模式的方法。 MVC设计模式 MVC(Modle-View-Controller,模型-视图-控制器)模式是Xerox PARC在20世纪80年代为编程语言Smalltalk-80所设计的一种软件设计模式,至今已被广泛使用,并被推荐为Sun公司J2EE平台的设计模式,其为开发交互式应用系统提供了一个优秀的设计模式,受到越来越多开发者的欢迎。 MVC模式主要由3个部分组成:模型、视图和控制器,其结构如图1所示。 图1 MVC模式框架 模型表示业务逻辑和业务规则等,在MVC的三个部件中拥有最多的处理任务。它可以用JavaBean和EJB等组件技术来处理数据库的访问。模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。 视图是屏幕上的显示。模型进行操作之后,其结果就是通过视图来显示的。在视图中其实没有真正的处理发生,只是作为一种输出数据并允许用户操作的方式。 控制器用于管理用户与视图发生的交互。一旦用户想对模型进行处理时,它不能直接去执行模型,而是通过控制器来间接地实现。控制器能从视图中取值,然后将相应的值传给模型进行处理。控制器接受用户的输入并调用模型和视图去完成用户的需求。 由上述可知,MVC模式的处理过程是:首先由控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图返回数据,并通过表达层呈现给用户。 MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的MVC框架,由于Struts有完整的文档并且相对来讲比较简单,所以用它开发MVC系统还是比较方便地。 Struts框架 Struts是Apache组织的一个开放源码项目。Struts是一个比较好的MVC框架,提供了对开发MVC系统的底层支持,它采用的主要技术是Servlet,JSP和Custom tag library。其基本构成如图2所示。

Struts2详细实例教程

Struts2(上) 一、经典的MVC模式 二、Struts1.x对MVC的实现 三、Struts1.x的主要组件和作用 组件作用 ActionServlet 中央控制器 Action 分控制器,调用JavaBean实现业务逻辑, Action可以分为Action、DispatchAction等不 同类型

ActionForm 封装参数,实现服务器验证,文件上传等Forward 转发到目的地,可以是JSP,也可以是另一个 Action Struts-config.xml 配置文件,配置有ActionForm,Action,Forward 等,通过XML解析,然后使用反射技术使用 该文件 Struts标签库和JSTL类似,和Struts-config.xml、 ActionForm、Action等对象可以紧密集成 四、Struts1.x 开发实例-登录程序 见案例。 五、Struts2(WebWork)的MVC Struts2的MVC架构 六、Struts2的主要组件 组件作用 FilterDispatcher 起中央控制器作用的过滤器 Action 处于Model层的Action,调用JavaBean实现 业务逻辑 struts.xml 核心配置文件,配置有Action、Result等result 和forward类似,转发的目的地,支持多种视 图技术。

七、Struts2的实例-登录 在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。 在Struts2.0.11版本中找到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib 目录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。 在src目录下建立一个类,包名mypack,类名UserAction,其代码如下: package mypack; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String username; private String userpass; public String getUsername() { return username; } public void setUsername(String username) { https://www.doczj.com/doc/f315805348.html,ername = username; } public String getUserpass() { return userpass; } public void setUserpass(String userpass) { https://www.doczj.com/doc/f315805348.html,erpass = userpass; } @Override public String execute() throws Exception { if ("Mike".equals(username) && "123".equals(userpass) || "张三".equals(username) && "abc".equals(userpass)) return "success"; else return "error"; } } 在src目录下建立Struts2的配置文件struts.xml,内容如下:

基于Struts2和Spring框架的Web整合开发研究

基于Struts2和Spring框架的Web整合开发研究 发表时间:2011-04-08T10:32:02.020Z 来源:《价值工程》2011年第3月上旬作者:谢宗旺方旭升 [导读] 介绍了最新的基于MVC Model2的Struts2框架,分析了Spring框架的容器特性 谢宗旺 Xie Zongwang;方旭升 Fang Xusheng (南京航空航天大学经济与管理学院,南京 211100) (College of Economics & Management,Nanjing University of Aeronautics and Astronautics,Nanjing 211100,China) 摘要:介绍了最新的基于MVC Model2的Struts2框架,分析了Spring框架的容器特性,研究了Struts2和Spring的整合开发策略,最后结合实例详细介绍了利用整合框架进行Web应用开发的具体流程和关键技术。 Abstract: The newly- invented Struts2 framework system structure based on MVC Model2 is introduced here while the container feature of Spring framework has been studied. The strategies of integration and development in Struts2 and Spring have been put forward accompanied with an application model which well illustrates the detailed procedure and critical techniques in Web application design utilizing the integrated framework. 关键词: Struts2;Spring;MVC;整合开发 Key words: Struts2;Spring;MVC;Integration & Development 中图分类号:TP311 文献标识码:A 文章编号:1006-4311(2011)07-0168-02 0 引言 基于MVC模式的Struts1框架是Web应用开发最为流行的框架,但是它由于采用侵入式的代码设计,代码与JSP/Servlet耦合紧密,代码重用低、测试难,表现层技术只支持JSP。新的MVC框架Struts2框架诞生克服了Struts1一些缺点,通过与其他框架整合,充分发挥它的良好特性。本文拟整合Struts2和Spring框架来进行Web应用开发。 1 Struts2框架 Struts2框架由3部分组成:核心控制器、业务控制器和业务逻辑组件[1]。核心控制器由FilterDispatcher充当,负责拦截用户以.action结尾的请求,该其转入框架处理。业务控制器Action类的实例,包含了execute()方法,返回值是字符串如SUCCESS,与此对应跳转到相应视图。处理请求的Action实例并不是业务控制器,而是Action代理。框架提通过拦截器将HttpServletRequest请求的参数解,传入到Action中,执行相应方法处理请求。关于业务逻辑组件方面,在实际的开发中一般通过工厂模式或者其他IoC(控制反转)容器来获得业务 逻辑组件的实例。Struts2具体的框架结构如图1。 2 Spring框架 Spring是简化企业级应用开发的开源框架,使得用简单的JavaBean能够实现EJB的功能,是一个轻量级的IoC(控制反转)和AOP(面向切面编程)容器框架[2]。IoC容器就是框架的核心机制,用以实现松散藕合,由容器控制对象间依赖关系,减轻了组件间依赖关系,提高组件的可移植性。IoC又称为依赖注入,基本概念是不创建对象,只描述创建方式,在代码中不直接与对象和服务连接,但在配置文件中描述组件所需要服务项。控制反转模式的本质是将程序之间关系的控制权由程序代码转移到外部容器[3]。 3 整合Struts2和Spring框架 通过分析两者框架特性可知,Struts2核心是控制功能。用户开发的控制器要实现业务逻辑处理要通过其它途径来获得业务逻辑组件实例,比如IoC容器。Spring正好具有容器的特性,将两者整合具体策略如下:将Spring以插件的形式与Strut2框架整合,用户把创建的Action实例交给Spring容器来负责生成和管理,Spring插件提供了一种伪Action的机制,当用户在struts.xml文件中配置Action时,指定class 属性值为创建Action实例的实现类,利用Spring插件后允许开发者在指定class属性时,不指向Action实现类,而是指向Spring容器的Bean ID。当Action类需要获得业务逻辑组件时,Spring容器通过依赖注入机制,为Action注入业务逻辑组件。通过这种整合方式,将控制器与业务逻辑组件相分离,业务逻辑组件与DAO组件相分离。Struts2和Spring框架整合后的运作流程图如图2所示。

相关主题
文本预览
相关文档 最新文档