Struts 2权威指南第3章 Struts 2基础1.docx
- 文档编号:11535388
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:43
- 大小:44.15KB
Struts 2权威指南第3章 Struts 2基础1.docx
《Struts 2权威指南第3章 Struts 2基础1.docx》由会员分享,可在线阅读,更多相关《Struts 2权威指南第3章 Struts 2基础1.docx(43页珍藏版)》请在冰豆网上搜索。
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输出标题-->
messagekey="login"/>
--输出登录页面标题-->
messagekey="loginTitle"/>
messagekey="loginTitle"/>
--输出Action处理完后的错误信息。
-->
--通过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的 因为本应用还使用了Struts1的数据校验框架,因此配置 下面是本应用的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表单域必须满足必填、模式匹配两个规则--> --指定模式匹配在正则表达式--> --定义pass表单域必须满足必填、最小长度两个规则--> --定义最小长度的规则--> minlength}"resource="false" position="1"/> 上面的规则文件定义了表单域的两个表单必须满足的规则: username是必填的,而且必须匹配^\w+$的正则表达式;pass是必填的,并且至少有4位。 定义了上面的校验规则后,如果用户的输入不能通过该输入校验,则系统自动转入配置 输入校验的提示信息都保存在国际化资源文件中,因此使用输入校验时,通常都建议使用国际化资源文件来保存校验提示信息。 提示使用输入校验时,通常建议使用国际化资源文件来保存校验失败的提示信息。 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标签输出国际化的页面标题--> 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts 2权威指南第3章 2基础1 权威 指南 基础
![提示](https://static.bdocx.com/images/bang_tan.gif)