您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > chap01 领略清晰的MVC流程----Struts讲解技术资料
第1章领略清晰的MVC流程(Struts讲解)Struts是学习轻量级的J2EE框架必须了解的一个框架,它的各种优点使得它成为了目前昀流行的三个框架之一,它实现了MVC模式,本章主要对Struts所实现的MVC流程,Struts的配置,Struts标签进行介绍。1.1Struts的流程本节将着重介绍Struts的基本流程,并对个流程进行简单的分析。Struts的业务流程比较复杂,但仔细体会也不难理解,为了便于读者理解这里使用一个流程图对Struts的运行机制进行描述,如图1-1所示:图1-1Struts业务流程图下面针对上面的流程,做一些必要的讲评。(1)第一步,一般情况下,用户所有的以do结尾的请求都会被一个叫ActionServlet截获。ActionServlet是Struts中一个特殊的Servlet,它本质上还是一个HttpServlet,只是它在Struts中充当“门卫”的作用。当有以do结尾的Http请求时,它会认为这•2•是在向它要服务。接下来,它要做的事情就是查找这个“服务”是否存在。也就是Action。ActionServlet的存在体现了一种在门槛集中控制的思想。以使得后面的工作有序的进行。(2)第二步,这一步牵涉到一个配置文件,它叫struts-config.xml。这个文件中包含了ActionForm,Action,Forward等信息,它的存在主要有两个意义,第一,它告诉人们这个系统“有什么”。第二,它告诉系统其它组件请求的服务“在哪里”。来自第一步的Http请求就会在这个文件中查找,判断其是否存在对应的Action,如果有则继续下去,否则进行错误处理,这就体现了“有什么”的意义。下面步骤中会提到“在哪里”的意义。总之,struts-config.xml起到一种站点地图的作用。(3)第三步,在Struts观点中,一个JSP的后面应该跟着一个ActionForm。尤其是当这个JSP包含表单的时候。于是当表单提交的时候,这个ActionForm,就会调用它的Setter方法将字段进行填充。然后,一般是在Action部分调用getter方法将字段内容进行提取,起到这种作用的Java组件,非JavaBean莫属。所以ActionForm本质上就是一个JavaBean,在视图和控制器中充当数据通信兵。(4)第四步,这时候又需要查看struts-config.xml。看来它还负责告诉系统组件可以“做什么”。ActionForm把数据填充完毕后,正打算将这些数据打包传送给Action,但它不能这样自作主张,先要查看下struts-config.xml确定下是否还有其它的事要做,昀典型的就是是否需要调用validate对数据进检验。(5)第五步,ActionForm当前面的工作都顺利通过后,就可以顺理成章的将数据打包给Action了。Action会调用它的execute方法,打算将封装在ActionForm中的数据移交到别的地方,从struts的设计思想来看,Action昀好不要一厢情愿的去对ActionForm中的数据进行复杂的处理,因为那不是一个控制器应该做的。昀好还是留点事情给模型层做。(6)第六步,Action把ActionForm中的数据提交给模型层如此这般(业务逻辑)后,还需要负责将处理的结果在视图层呈现出来,一个可行的做法是使用昀原始的办法在Action中进行页面跳转,这时候就像编写古老的servlet一样。但struts认为所有的页面跳转都可以统一起来管理,于是就有了ActionForward这个对象。通过这个对象,Action可以查找struts-config.xml文件来确定它所请求的页面的位置(struts-config.xml“在哪里”的意义得以体现)。在实际开发中,我们也的确会体验到这种集中管理的好处。•3•1.2Struts的配置1.2.1struts-config.xml的配置在讲述配置struts-config.xml之前,需要讲解一下如何使得一个web应用具有struts能力。在MyEclicpseJ2EEDevelopment透视图中选择MyEclipse|addstrutscapablitity命令,打开“StrutssupportforMyEclipseWebProject”对话框,如图1-2所示:图1-2添加Struts能力●Strutsconfigpath表示struts-config.xml文件存放的路径,当然struts-confg.xml本身文件名也是可以修改的。●Struts-specification表示使用struts的版本●ActionServletname表示的是在web.xml中servlet的名字●URLpattern表示Struts截获的地址类型,默认情况下截获所有以do结尾的地址。●Basepackagefornewclasses表示资源文件存放的包路径和以后新建文件的一个包路径,可以修改。●Defaultappliationresources表示默认资源文件的路径。单击Finish按钮后,一个空的webproject就会多出很多的导入包和一些标签文件,如图1-3所示。•4•图1-3具有Struts能力的webproject这时候,一个webProject就具备了Struts的能力,同时我们也看到了它自动生成的struts-config.xml文件,下面的工作就是针对这个文件而言的。文件配置前的内容如下struts-config!—配置数据源--data-sources/!—配置ActionForm--form-beans/!—配置异常--global-exceptions/!—配置全局Forward,相对应的可以在ActionMapping中配置局部Forward--global-forwards/!—配置Action信息--action-mappings/!—消息资源文件路径--message-resourcesparameter=com.yourcompany.struts.ApplicationResources//struts-config下面的配置都逐一讲解各个元素的具体含义。下面的配置将围绕一个实例展开,这个例子的背景是大名鼎鼎的登录。用户通过JSP页面尝试登录系统,经过ActionForm的数据提交,Action的逻辑判断,昀终用户成功登陆到一个成功页面或者是转到一个友好的错误页面。•5•1.2.1.1ActionForm的配置先通过myeclipse来创建一个ActionForm。双击struts-config.xml文件打开图形化编辑器在空白处右击,在弹出的快捷菜单中选择new|Form命令,将出现如图1-4的界面。图1-4新建ActionForm向导填写usecase并添加两个属性usename和password其它的保持默认或者会默认生成,如图1-5所示。•6•图1-5新建ActionForm完成单击Finish按钮后,web应用程序就会发生两个变化,一个是添加了一个JavaClass,代码如下:该Form类的对象存储了从页面提交的用户名和密码信息,并可进行验证。/**GeneratedbyMyEclipseStruts*Templatepath:templates/java/JavaClass.vtl*/packagecom.yourcompany.struts.form;importjavax.servlet.http.HttpServletRequest;importorg.apache.struts.action.ActionErrors;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionMapping;/***MyEclipseStruts*Creationdate:09-10-2007**XDocletdefinition:*@struts.formname=loginForm*///默认继承ActionFormpublicclassLoginFormextendsActionForm{•7•/**Generatedfields*///密码/**passwordproperty*/privateStringpassword;//用户名/**usernameproperty*/privateStringusername;/**GeneratedMethods*//***Methodvalidate*@parammapping*@paramrequest*@returnActionErrors*///验证方法,它是否执行取决于对应action中的validate属性,如果为true则执行,//否则不执行。publicActionErrorsvalidate(ActionMappingmapping,HttpServletRequestrequest){//TODOAuto-generatedmethodstub//可以在这里添加验证代码returnnull;}/***Methodreset*@parammapping*@paramrequest*///重置方法,它在validate之前运行,一般用于数据类型转化publicvoidreset(ActionMappingmapping,HttpServletRequestrequest){//TODOAuto-generatedmethodstub}/***Returnsthepassword.*@returnString*/publicStringgetPassword(){returnpassword;•8•}/***Setthepassword.*@parampasswordThepasswordtoset*/publicvoidsetPassword(Stringpassword){this.password=password;}/***Returnstheusername.*@returnString*/publicStringgetUsername(){returnusername;}/***Settheusername.*@paramusernameTheusernametoset*/publicvoidsetUsername(Stringusername){this.username=username;}}另一个变化就是修改了struts-config.xml文件,修改后的文件内容如下:struts-configdata-sources/form-beans!—所有的ActionForm都需要在这里配置--form-beanname=loginFormtype=com.yourcompany.struts.form.LoginForm//form-beansglobal-exceptions/global-forwards/action-mappings/message-resourcesparameter=com.yourcompany.struts.ApplicationResources//struts-config通过对比发现新的struts-config.xml文件中form-beans元素的内容不再是空了,而是多了一项form-beanname=loginFormtype=com.yourcompany.struts.form.LoginForm/事实上,每个ActionForm都对应一个from-bean元素,这个元素描述了这个Form•9•的名称和类路径信息。以便在其它地方引用的时候可以找到这个ActionForm的具体位置,同时体现了一种简单隐藏复杂的思想:给一个复杂的事务命上一个简单的名称。1.2.1.2
本文标题:chap01 领略清晰的MVC流程----Struts讲解技术资料
链接地址:https://www.777doc.com/doc-635274 .html