Struts 2权威指南第3章 Struts 2基础1.docx

上传人:b****4 文档编号:11535388 上传时间:2023-03-19 格式:DOCX 页数:43 大小:44.15KB
下载 相关 举报
Struts 2权威指南第3章 Struts 2基础1.docx_第1页
第1页 / 共43页
Struts 2权威指南第3章 Struts 2基础1.docx_第2页
第2页 / 共43页
Struts 2权威指南第3章 Struts 2基础1.docx_第3页
第3页 / 共43页
Struts 2权威指南第3章 Struts 2基础1.docx_第4页
第4页 / 共43页
Struts 2权威指南第3章 Struts 2基础1.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

Struts 2权威指南第3章 Struts 2基础1.docx

《Struts 2权威指南第3章 Struts 2基础1.docx》由会员分享,可在线阅读,更多相关《Struts 2权威指南第3章 Struts 2基础1.docx(43页珍藏版)》请在冰豆网上搜索。

Struts 2权威指南第3章 Struts 2基础1.docx

Struts2权威指南第3章Struts2基础1

本章要点

—Struts1框架的基本知识

—使用Struts1框架开发Web应用

—WebWork框架的基本知识

—使用WebWork框架开发Web应用

—在Eclipse中整合Tomcat

—使用Eclipse开发Web应用

—为Web应用增加Struts2支持

—Struts2框架的MVC组件

—Struts2框架的流程

—通过web.xml文件加载Struts2框架

—通过struts.properties文件配置Struts2属性

—struts.xml文件的结构

—前面一章已经大致介绍了Struts2应用的基本情况,通过前一章的学习,读者应该对Struts2框架有了一个大致的掌握。

但对于各知识点的细节,还需要进一步学习,本章将详细介绍Struts2框架的基础部分。

因为Struts2是在WebWork和Struts1的基础上发展起来的,因此掌握一定的WebWork和Struts1框架的知识,将对于掌握Struts2框架大有裨益。

特别是WebWork方面的开发经验,绝大部分都可以适用于Struts2应用的开发。

本章将会简要介绍Struts1和WebWork框架的使用。

本章还将介绍在EclipseIDE工具中开发Struts2应用,并且详细介绍Struts2配置文件的各个细节。

3.1Struts1的MVC实现

Struts1是世界上最“古老”的MVC框架,它出现于2001年。

Struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。

Struts1框架有3个重要组成部分:

Action、ActionForm和ActionForward对象。

3.1.1下载和安装Struts1框架

本节的示例程序基于Struts1的1.2.9版,请读者也下载该版本的Struts1框架,下载和安装Struts1框架请按如下步骤进行。

登录struts.apache.org站点,下载Struts的合适版本。

解压缩下载到的压缩包,解压缩后,发现有如下文件结构:

—contrib:

该路径下存放了Struts1表达式语言支持的类库和标签库文件。

—lib:

该路径下存放了Struts1框架的核心类库。

—webapps:

该路径下存放了Struts1框架的示例应用及文档应用。

—另外还一些关于Struts的说明和LICENSE等文档

将lib下的JAR文件全部复制到WEB-INF/lib下,并将TLD文件全部复制到WEB-INF下,再将validator-rules.xml文件也复制到WEB-INF下。

如果需要用到Struts-EL(表达式)语言,还应将contrib下的JAR文件复制到WEB-INF/lib下。

为了在编译程序时可以导入Struts1类库,还应将struts.jar文件增加到环境变量中。

3.1.2实现ActionForm

Struts1使用单独的ActionForm封装请求参数,当用户提交一个请求时,Struts1将使用单独的ActionForm来封装所有的请求参数。

从结构上看,ActionForm就是一个POJO:

它需要为用户的每个请求参数都提供一个对应的属性,并为该属性设置相应的setter和getter方法——但ActionForm的设计不是POJO,它必须继承Struts1的ActionForm基类。

下面是一个简单的登录页面,包含两个表单域,分别代表用户名和密码。

该登录页面的代码如下:

<%@pagelanguage="java"contentType="text/html;charset=gb2312"errorPage=""%>

--导入Struts的三个标签库-->

<%@includefile="taglibs.jsp"%>

--使用国际化资源文件的key输出标题-->

<bean:</p><p>messagekey="login"/>

--输出登录页面标题-->

messagekey="loginTitle"/>

--输出Action处理完后的错误信息。

-->

${requestScope.err}

--通过messagePresent判断输入校验后的出错提示是否存在-->

messagesPresent>

--输出出错提示-->

messagekey="errors.header"/>

    messagesid="error">

  • writename="error"/>

  • messages>


messagesPresent>

--下面是登录表单-->

formaction="login.do">

--使用国际化信息来输出标签-->

messagekey="username"/>

textproperty="username"/>

messagekey="pass"/>

passwordproperty="pass"/>

submit>

messagekey="login"/>

submit>

form>

在浏览器中浏览该页面时,看到该页面包含了一个简单的登录表单。

该页面的界面如图3.1所示。

该页面中有两个表单域,这两个表单域封装了需要向服务器发送的请求参数,对于Strurts应用而言,请求参数是通过ActionForm来封装的,ActionForm非常类似一个POJO(定义几个属性,为每个属性提供setter和getter方法),但该ActionFrom需要继承ActionForm,或者是它的子类。

因为本应用使用了Struts的校验框架,因此本应用中的ActionForm继承了ValidatorForm类。

下面是本应用中ActionForm类的代码:

publicclassLoginFormextendsValidatorForm

{

//下面两个属性用于封装两个表单域的请求参数

privateStringusername;

privateStringpass;

//以下是属性字段的系列get、set方法

publicStringgetUsername()

{

returnusername;

}

publicvoidsetUsername(Stringusername)

{

this.username=username;

}

publicStringgetPass()

{

returnpass;

}

publicvoidsetPass(Stringpass)

{

this.pass=pass;

}

}

上面ActionForm类的代码非常简单,除了该类需要继承ValidatorForm之外。

也正是因为该ActionForm继承了ValidatorForm,从而导致了该类的污染,降低了该类的代码复用。

对于Struts1而言,ActionForm类是一个既烦琐又没有技术含量的类,写起来难免让程序员觉得意兴索然。

虽然有很多IDE(集成开发环境)可以自动生成该ActionForm类,但Struts1框架也感觉到大量重复书写该类是一个负担,后来提供了动态ActionForm,让人可以避免书写ActionForm类。

注意Struts1中的ActionForm类是一个非常简单的类,它实质上是一个普通的JavaBean,但必须继承ActionForm类。

除此之外,ActionForm还可以使用动态FormBean,从而允许通过配置文件来定义ActionForm。

3.1.3实现Action

Action就是用于处理用户请求的业务控制器,当用户请求发送到ActionServlet后,ActionServlet拦截到用户请求,将请求转发到系统的业务控制器处理。

ActionServlet在转发用户请求时,会将请求参数封装成ActionForm实例,并将该ActionForm实例转发给Action实例。

Action实例从ActionForm中取出用户请求参数,然后调用业务逻辑组件处理用户请求,并根据处理结果,调用不同的视图页面来呈现处理结果。

下面是系统的Action处理类代码。

publicclassLoginActionextendsAction

{

//必须重写该execute方法,该方法用于处理用户请求

publicActionForwardexecute(ActionMappingmapping,ActionFormform,

HttpServletRequestrequest,HttpServletResponseresponse)throws

Exception

{

//获取封装用户请求参数的ActionForm实例

LoginFormloginForm=(LoginForm)form;

//从ActionForm中取出用户请求参数

Stringusername=loginForm.getUsername();

Stringpass=loginForm.getPass();

//处理用户请求

if(username!

=null&&username.equals("scott"))

{

returnmapping.findForward("welcome");

}

else

{

returnmapping.findForward("error");

}

}

}

上面的Action代码非常简单,甚至没有调用任何业务逻辑组件,只是直接判断用户请求参数的用户名和密码是否为scott和tiger,如果用户名和密码正确,则返回welcome的ActionForward,否则返回error的ActionForward。

注意ActionForward就是一个逻辑视图,通过在配置文件中定义ActionFoward的映射,完成逻辑视图名和实际视图资源之间的映射。

Struts1的Action类与Struts2的Action类有一定的类似性,都通过调用execute方法来处理用户请求。

但最大的区别在于Struts1Action的execute方法与ServletAPI耦合,但Struts2Action类的execute方法无需与ServletAPI耦合。

3.1.4配置Struts1的Action

实现了Struts1的Action后,还需要在struts-config.xml文件中配置Action,配置Action需要指定Action的实现类,以及Action处理请求的URL。

配置Action时,还应该配置该Action对应的ActionForm,每个ActionForm使用一个元素定义。

定义Action和ActonForm之间的关联关系时,在定义Action的元素中通过name属性指定与此Action关联的ActionForm。

因为本应用还使用了Struts1的数据校验框架,因此配置元素时,还应该增加validate属性,并将该属性值设置成true;还需要增加input属性,该属性指向输入校验失败后转入的视图资源。

下面是本应用的struts-config.xml文件代码。

xmlversion="1.0"encoding="GBK"?

>

--指定Struts1配置文件的DTD信息-->

DOCTYPEstruts-configPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN"

"http:

//struts.apache.org/dtds/struts-config_1_2.dtd">

--指定Struts1配置文件的根元素-->

--所有的ActionForm都应该在form-beans元素中定义-->

--每个form-bean定义一个ActionForm-->

--所有的Action都放在action-mappings元素中定义-->

--定义Action,其处理类为lee.LoginAction,对应的ActionForm为

loginForm-->

validate="true"scope="request"input="/login.jsp">

--当返回welcome的ActionForward时,转入welcome.jsp页-->

--当返回error的ActionForward时,转入error.jsp页-->

--加载国际化资源文件-->

--加载Struts1校验框架的插件-->

--指定数据校验的两个校验规则文件-->

/WEB-INF/validation.xml"/>

正如前面看到的,页面中使用大量国际化标签来输出国际化消息,因此本应用必须加载相应的国际化资源文件,本应用的国际化资源文件的baseName是MyResource。

指定应用的国际化资源文件通过元素指定。

本应用使用了Struts1的校验框架来完成输入校验,因此在本应用中加载了两个校验规则文件,其中validator-rules.xml文件是一个系统规则文件,通常无需修改;validation.xml文件是开发者定义的规则文件,该文件定义了需要校验的表单应该满足的规则。

下面是校验规则文件的代码。

xmlversion="1.0"encoding="GBK"?

>

--校验规则定义文件-->

DOCTYPEform-validationPUBLIC"-//ApacheSoftwareFoundation

//DTDCommonsValidatorRulesConfiguration1.1.3//EN"

"http:

//jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

--校验规则文件的根元素-->

--定义需要校验的ActionForm,定义该ActionForm为loginForm-->

--定义username表单域必须满足必填、模式匹配两个规则-->

--指定模式匹配在正则表达式-->

mask

^\w+$

--定义pass表单域必须满足必填、最小长度两个规则-->

--定义最小长度的规则-->

minlength}"resource="false"

position="1"/>

minlength

4

上面的规则文件定义了表单域的两个表单必须满足的规则:

username是必填的,而且必须匹配^\w+$的正则表达式;pass是必填的,并且至少有4位。

定义了上面的校验规则后,如果用户的输入不能通过该输入校验,则系统自动转入配置元素时指定的input属性所对应的视图资源。

输入校验的提示信息都保存在国际化资源文件中,因此使用输入校验时,通常都建议使用国际化资源文件来保存校验提示信息。

提示使用输入校验时,通常建议使用国际化资源文件来保存校验失败的提示信息。

3.1.5完成应用流程

经过上面步骤,可以非常清楚地看出上面示例应用的流程,用户进入系统的login.jsp页面,用户输入请求信息,发送请求。

如果用户的请求参数不能通过输入校验,则系统将请求转发到login.jsp页面,否则请求将被转发到业务逻辑控制器Action处。

Action处理用户请求参数,如果处理结果为success的ActionForward,则进入welcome.jsp页面;如果处理结果为error的ActionForward,则进入error.jsp页面。

图3.2显示了该应用的顺序图。

图3.2系统顺序图

如果用户输入的用户名正确、密码正确,用户登录成功,可以在welcome.jsp页面见到国际化的欢迎信息,并且通过Struts1的标签输出登录的用户名。

下面是welcome.jsp页面的代码。

<%@pagecontentType="text/html;charset=gb2312"errorPage="error.jsp"%>

--导入Struts的三个标签库-->

<%@includefile="taglibs.jsp"%>

--通过Struts1标签输出国际化的页面标题-->

<bean:</p><p>messagekey="loginSuccess"/>

messagekey="loginSuccess"/>


--通过Struts1标签输出国际化的欢迎信息,并把登录用的用户名作为参数传入-->

messagekey="welcome"arg0="${loginForm.username}"/>

如果用户登录成功,将看到如图3.3所示的页面。

图3.3登录成功页面

上面的Struts1应用已经包含了Struts1框架的核心部分,如ActionForm、Action实现,数据校验完成,应用的国际化支持等。

通过上面的示例应用,我们看到Struts1框架的最大缺点是:

Struts1应用的类与ServletAPI耦合严重,而且大都需要继承Struts1框架提供的基类,或实现Struts1框架提供的接口,造成了代码污染。

3.2WebWork的MVC实现

WebWork由OpenSymphony组织负责开发、维护,WebWork2前身是RickardOberg开发的WebWork。

现在我们所说的WebWork,通常指的是WebWork2,它是由Xwork1和WebWork2两个项目组成的。

WebWork紧紧以ServletDispatcher为核心,使用ServletDispatcher来处理所有的用户请求,它是整个WebWork框架的核心控制器。

WebWork支持多视图表示,视图部分可以使用JSP、Velocity、FreeMarker、JasperReports、XML等。

WebWork当前的最新版本是2.2.5,本节所使用的范例是基于该版本的WebWork完成的。

由于WebWork已经全面整合到Struts2框架中,故WebWork不会再有新版本发布,即不会有WebWork2.3.X发布。

3.2.1WebWork的下载和安装

WebWork当前的最新稳定版本是2.2.5,笔者建议读者也下载该版本。

WebWork的下载和安装按如下步骤进行。

登录

—dist:

该路径下存放了WebWork的两个编译版本。

—docs:

该路径下存放了WebWork的各种文档,包括WebWork的Wiki文档、API文档等。

—lib:

该路径下存放了WebWork编译和运行所需的第三方类库,其中default路径下的所有JAR文件是WebWork应用必需的类库文件。

—src:

该路径下存放了WebWork的源文件,如果使用WebWork过程中遇到无法解决的问题,可以参考该源文件解决。

—webapps:

该路径下存放了WebWork的示例应用,这些示例应用是学习WebWork极好的资料。

—webwork-2.2.5.jar:

该文件是WebWork框架的核心类库文件。

—webwork-src-2.2.5.jar:

该压缩文件里包含了WebWork

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1