您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Struts1框架知识和实战讲解
Struts1框架知识和实战讲解单玉玲2013年7月26日海外事业一部单玉玲经历项目:IYOYO投票系统宏赡FTS系统电子病历系统中外运UC工作流系统智能养老系统长城租赁项目该门课程教学方式(0.5天)PPT+实例+练习+随堂考试单玉玲海外事业一部项目经理shan_yling@cvicse.com经历项目:IYOYO投票系统宏赡FTS系统电子病历系统中外运UC工作流系统智能养老系统长城租赁项目目录1.Struts1概述2.Struts1构成3.Struts1核心控制流程4.Struts1ActionForm目录5.Struts1异常处理6.Struts1标签库7.课程总结8.作业1.Struts1概述Struts是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。Struts是开源软件,使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,Struts是一个不错的选择。1.Struts1概述Struts实现MVC设计模式(1)Struts实质上就是在JSPModel2的基础上实现一个MVC框架。模型:由实现业务逻辑的JavaBean或EJB组件构成;控制器:由ActionServlet和Action来实现;视图:由一组JSP文件构成。1.Struts1概述(2)实现的MVC框架:2.Struts1构成1、Struts运行需要的jar包:(1)commons-digester.jar用于解析配置文件(2)commons-fileupload.jar用于实现文件上传(进行了进一步的封装)(3)commons-logging.jar用于日志处理(4)commons-beanutils.jar用于POJO的属性赋值、拷贝等(5)commons-validator.jar用于表单验证2.Struts1构成2、struts标记库文件(tld):(1)struts-bean.tld(2)struts-html.tld(3)struts-logic.tld(4)struts-nested.tld(5)struts-tiles.tld2.Struts1构成3、配置文件struts-config.xml2.Struts1构成3.Struts1核心控制流程1、主要组件:(1)ActionServlet组件:充当Struts框架的中央控制器;(2)RequestProcessor组件:充当每个子应用模块的请求处理器;(3)Action组件:负责处理一项具体的业务。2、ActionServlet(1)Struts的启动通常从加载ActionServlet开始(如果没有其他Servlet的加载优先级比它高)。(2)ActionServlet在应用一加载时即会被实例化并调用其init方法。init方法所做的主要工作有:加载struts配置文件,并创建用于封装配置信息的ModuleConfig对象;加载资源文件,并创建用于封装资源文件的MessageResources对象;如果有相应配置的话,init方法还将初始化数据源和PlugIn。注意:如果web.xml有多模块配置,将创建多个ModuleConfig对象和MessageResources对象分别用于封装各个模块的struts配置文件和资源件。3.Struts1核心控制流程init-paramparam-nameconfig/param-nameparam-value/WEB-INF/struts-config.xml/param-value/init-param!--config后面的/ma表示模块名,访问ma模块里的配置文件的action中的url路径位:应用路径/模块名/url.do--init-paramparam-nameconfig/ma/param-nameparam-value/WEB-INF/ma/struts-config.xml/param-value/init-param3.Struts1核心控制流程(3)ActionServlet的process()方法的主要工作有:根据请求信息获知所请求的模块名称,从ServletContext中获得与请求模块对应的的ModuleConfig对象,并存储到request中。根据模块信息获得相应的RequestProcessor对象,一个模块对应一个RequestProcessor对象,RequestProcessor对象将关联与所属模块对应的ModuleConfig对象。调用RequestProcessor对象的process方法,将request和response作为参数传递给它。3.Struts1核心控制流程3、RequestProcessor类(1)Struts框架只允许应用中存在一个ActionServlet类,但每个应用程序模块都有各自的RequestProcessor类实例。(2)RequestProcessor对象的process方法的主要工作:调用自己的processPreprocess(request,response)方法,该方法不进行任何操作,用于子类重写扩展其功能。获得与请求地址所匹配的ActionMapping对象,ActionMapping对象用于封装一个特定action的配置信息。根据ActionMapping中的配置信息获得ActionForm对象(该对象将缓存到request或session中),并将表单数据填充到ActionForm中,然后根据ActionMapping的配置决定是否验证ActionForm,如果验证,将调用ActionForm的validate方法,若其返回的ActionErros对象中包含ActionMessage对象则表示验证失败,将转向action配置信息input属性所指示的地址。3.Struts1核心控制流程如果ActionForm无需验证或验证通过将创建并缓存与请求地址匹配的Action对象,将ActionMapping对象、ActionForm对象、request和response作为参数调用其方法。根据Action对象的方法返回的ActionForward对象,将请求转发或重定向到该ActionForward所封装的地址。3.Struts1核心控制流程4、Action类(1)Action类是用户请求和业务逻辑之间的桥梁(2)ActionServlet对所有的请求作集中的统一处理,每个不同的Action类具体处理不同的请求。3.Struts1核心控制流程(4)struts-config.xml:action-mappingsactionpath=”/路径,当请求时×××.do时FC就调用该Action的execute方法”type=”Action类的名称(包名.类名)”name=”该Action关联的ActionForm的名称”!--如果有,则FC在调用execute方法之前要获得ActionForm对象(第一次调用该Action时创建,然后从request或者session)并且用请求参数对其填充,然后将其(ActionForm对象)作为参数调用execute方法--attribute=”缓存ActionForm对象的名称(key),不写key就是name的值”3.Struts1核心控制流程scope=”缓存ActionForm的范围(request|session)默认是session”validate=”是否要验证true|false”!--如果是true,则FC在填充ActionForm之后,调用Action的execute之前,会验证该ActionForm对象(一种是调用validate方法,另外一种是使用validation框架)--input=””和validate=”true”联用,表示验证失败后,FC把请求转向的地址parameter=””是一个附加的属性,对于不同的Action可能有不同的意义!--封装该Action可能转发(重定向)的地址信息--forwardname=””该forward的名称(用于mapping.findForward方法)path=””地址必须以“/”开头redirect=””表示是否重定向/………/action/action-mappings4.Struts1ActionForm1、为什么使用form?(1)用户提交的数据封装成对象;(2)表单数据的缓存;(3)表单信息验证(服务器端验证).2、ActionForm的生命周期(1)ActionFormBean有两种存在范围:request和session1)如果存在于request范围,它仅在当前的请求/响应生命周期中有效;2)如果存在于session范围,同一个ActionForm实例在整个Http会话中有效。注意:在struts配置文件中,action元素的scope属性用来设置ActionForm的范围,默认值为session。4.Struts1ActionForm5.Struts1异常处理1、处理流程:(1)ActionthrowException(2)ActionServletExceptionHandler(3)ExceptionHandler处理ExceptionExceptionHandler会读配置文件ActionMessage-requestAttributeActionForward(4)ActionServletActionForward5.Struts1异常处理2、配置struts的异常处理全局的异常处理:global-exceptionsexceptionkey=errorpath=xxx/xxxtype=xxx.xxx.Xxxx/global-exceptionsactionpath=xxx/xxxtype=xxx.xxx.Xxxxexceptionkey=xxxpath=xxx/xxxtype=xxx.xxx.Xxxx/action在exception标签中的key,也就是在出现异常时会封装在ActionErrors中,也就是可以在页面中使用。ActionError(Stringkey,Objectvalue0),可以通过在构造ActionError时,指定不同的key值来对异常进行分类,并且在html:error标签的自己构造ActionErrors并使用下面的方法发送voidsaveErrors(HttpServletRequestrequest,ActionErrorserrors)这个方法用以把封装了异常的ActionErrors的key存储到request中。6.Struts1标签库Struts提供了五个标签库,即:HTML、Bean、Logic、Template和Nested。HTML标签:用来创建能够和Struts框架和其他相应的HTML标签交互的HTML输入表单;Bean标签:在访问JavaBeans及其属性,以及定义一个新的bean时使用;Logic标签:管理条件产生的输出和对象集产生的循环;Template标签:随着Tiles框架包的出现,此标记已开始减少使用;Nested标签:增强对其他的Struts标签的嵌套使用的能力。6.Struts1标签库标签的公共特征:styleId:命名自定义标签创建时的脚本变量名。name:指出关键字值,在该关键字下可以找到一个存在的bean。如果给出了scope属性,则仅仅在scope中查找。否则,根据标准的顺序在各种
本文标题:Struts1框架知识和实战讲解
链接地址:https://www.777doc.com/doc-4524536 .html