1、1J2EE应用开发实例精解(RAD+WAS)第第8章章 Struts架构架构2n8.1 Struts简介简介n8.2 Struts流程流程n8.3 Struts的核心的核心APIn8.4 RAD中构建基于中构建基于Struts架构的架构的Web应用程序应用程序内容提要3学习要点n重点内容重点内容Struts架构的基本概念、流程以及核心架构的基本概念、流程以及核心APIRAD中创建基于中创建基于Struts架构的架构的Web应用程序应用程序48.1 Struts简介nStruts的体系结构的体系结构58.2 Struts流程nStruts时序图时序图68.3 Struts的核心APInStrut
2、s框架中的组件框架中的组件组件组件用途用途Struts-config.xml配置文件配置文件ActionServlet控制器控制器ActionClass包含事务逻辑包含事务逻辑ActionMapping帮助控制器将请求映射到操作帮助控制器将请求映射到操作ActionForm bean保存数据保存数据ActionForward用来指示操作转移的对象用来指示操作转移的对象错误处理错误处理用来存储和回收错误用来存储和回收错误Struts标记库标记库可以减轻开发显示层次的工作可以减轻开发显示层次的工作78.3 Struts的核心API(cont.)nStruts配置文件配置文件Struts配置文件(配
3、置文件(struts-config.xml)负责将)负责将Struts中各组件结中各组件结合在一起合在一起默认保存在默认保存在“动态动态Web应用程序应用程序”的的“WEB-INF”下下配置文件配置文件可可定义全局转发、定义全局转发、ActionMapping类、类、ActionForm bean、JDBC数据源数据源88.3 Struts的核心API(cont.)n配置全局转发配置全局转发全局转发用来在全局转发用来在JSP页之间创建逻辑名称映射页之间创建逻辑名称映射,转发都可以通过转发都可以通过对调用操作映射的实例来获得对调用操作映射的实例来获得nactionMappingInstace.f
4、indForward(“logicalName”); n nn 属性属性描述描述Name全局转发的名字全局转发的名字Path与目标与目标URL的相对路径的相对路径98.3 Struts的核心API(cont.)n配置配置ActionMappingActionMapping对象帮助进行框架内部的流程控制对象帮助进行框架内部的流程控制,可将请求可将请求URI映射到映射到Action类类,将将Action类与类与ActionForm bean相关联相关联ActionServlet在内部使用这些映射,并将控制转移到特定在内部使用这些映射,并将控制转移到特定Action类的实例类的实例所有所有Actio
5、n类使用类使用perform()方法实现特定应用程序代码,返回一方法实现特定应用程序代码,返回一个个ActionForward对象,其中包括响应转发的目标资源名称对象,其中包括响应转发的目标资源名称108.3 Struts的核心API(cont.)n配置配置ActionForm BeanActionServlet使用使用ActionForm来保存请求的参数,这些来保存请求的参数,这些bean的的属性名称与属性名称与HTTP请求参数中的名称相对应请求参数中的名称相对应控制器将请求参数传递到控制器将请求参数传递到ActionForm bean的实例,然后将这个的实例,然后将这个实例传送到实例传送到
6、Action类类118.3 Struts的核心API(cont.)n配置配置JDBC数据源数据源用用元素可以定义多个数据源元素可以定义多个数据源,属性如下:属性如下:nKey Action类使用这个名称来寻找连接类使用这个名称来寻找连接 nType 实现实现JDBC接口的类的名称接口的类的名称 128.3 Struts的核心API(cont.)nActionServlet类类在在web.xml中声明中声明ActionServlet,将它配置成启动时进行加载,将它配置成启动时进行加载第一次收到特定请求的第一次收到特定请求的URI时,时,ActionServlet将适当的将适当的Action类类进
7、行实例化,然后进行实例化,然后ActionServlet在在Action类实例中以类实例中以servlet为为变量名存储一个引用变量名存储一个引用被实例化后,被实例化后,Action类会被暂存以备再用类会被暂存以备再用ActinServlet提供了一组能够被提供了一组能够被Action对象使用的方法对象使用的方法,可使用可使用destroy()方法结束方法结束ActionServlet,也可使用,也可使用reload()方法从方法从Struts配置文件将信息重新加载配置文件将信息重新加载138.3 Struts的核心API(cont.)nActionMapping类类特定请求映射到特定特定请求
8、映射到特定Action的相关信息存储在的相关信息存储在ActionMapping中中ActionServelt将将ActionMapping传送到传送到Action类的类的perform()方方法,法,Action将使用将使用ActionMapping的的findForward()方法,此方方法,此方法返回一个指定名称的法返回一个指定名称的ActionForward,这样,这样Action就完成了本就完成了本地转发地转发若没有找到具体的若没有找到具体的ActionForward,就返回一个,就返回一个null148.3 Struts的核心API(cont.)nAction类类用于用于实现应用程
9、序的事务逻辑,负责处理请求实现应用程序的事务逻辑,负责处理请求收到请求后,收到请求后,ActionServlet会为这个请求选择适当的会为这个请求选择适当的Action,如,如果需要,创建果需要,创建Action的一个实例,调用的一个实例,调用Action的的perform()方法。方法。如果如果ActionServlet不能找到有效的映射,它会调用默认的不能找到有效的映射,它会调用默认的Action类类,如果找到了如果找到了,ActionServlet将适当的将适当的ActionMapping类转发类转发给给Action,这个,这个Action使用使用ActionMapping找到本地转发,
10、然后找到本地转发,然后获得并设置获得并设置ActionMapping属性属性根据根据servlet环境和被覆盖的环境和被覆盖的perform()方法签名,方法签名,ActionServlet也会传送也会传送ServletRequest对象或对象或HttpServletRequest对象。所有对象。所有Action类都扩展类都扩展org.apache.struts.action.Action类,并且覆盖类,并且覆盖类中定义的某一个类中定义的某一个perform()方法方法158.3 Struts的核心API(cont.)nActionForm类类在应用程序中为每个表单都创建了一个在应用程序中为每
11、个表单都创建了一个ActionForm bean,对于对于每个在每个在struts-config.xml文件中定义的文件中定义的bean,框架在调用,框架在调用Action类的类的perform()方法之前会进行以下操作:方法之前会进行以下操作:n在相关联的关键字下,它检查用于适当类的在相关联的关键字下,它检查用于适当类的bean实例的用户实例的用户会话,如果在会话中没有可用的会话,如果在会话中没有可用的bean,它就会自动创建一个,它就会自动创建一个新的新的bean并添加到用户的会话中并添加到用户的会话中n对于请求中每个与对于请求中每个与bean属性名称对应的参数,属性名称对应的参数,Act
12、ion调用相调用相应的设置方法。当应的设置方法。当Action perform()被调用时,最新的被调用时,最新的ActionForm bean传送给它,参数值就可以立即使用了传送给它,参数值就可以立即使用了168.3 Struts的核心API(cont.)nActionForward类类将将Action类的处理结果转发至目的地类的处理结果转发至目的地Action类获得类获得ActionForward实例的句柄,然后返回到实例的句柄,然后返回到ActionServlet。有有以下两种使用方法:以下两种使用方法:nActionServlet根据名称获取一个全局转发,根据名称获取一个全局转发,Ac
13、tionMappin实实例被传送到例被传送到perform()方法,并根据名称找到一个本地转发方法,并根据名称找到一个本地转发n另一种是调用下面的一个构造器来创建它们自己的一个实例另一种是调用下面的一个构造器来创建它们自己的一个实例178.3 Struts的核心API(cont.)n错误处理错误处理Struts提供了两个类来处理错误:提供了两个类来处理错误:ActionErrors和和ActionErrornActionErrors保存着保存着ActionError对象的集合,其中每一个代对象的集合,其中每一个代表了独立的错误信息表了独立的错误信息n每个每个ActionError都包含了关键字
14、,能够映射到资源文件中存都包含了关键字,能够映射到资源文件中存储的错误信息,而这个资源文件是在储的错误信息,而这个资源文件是在ActionServlet初始化参初始化参数中指定的数中指定的188.4 RAD中构建基于Struts架构的Web应用程序n在在RAD的的Web透视图中,选择透视图中,选择“文件文件 新建新建 项目项目”,打开打开“新建项目新建项目”窗口窗口n在在“新建项目新建项目”窗口中选择窗口中选择“动态动态Web项目项目”,选择,选择“下下一步一步”,打开,打开“新建新建Web项目项目”窗口窗口198.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“新建
15、新建Web项目项目”窗口中,输入名称窗口中,输入名称FirstStruts,然后,然后选择选择“下一步下一步”n选择选择“Struts”和和“JSP标记库标记库”选项,然后选择选项,然后选择“完成完成”创建动态创建动态Web项目项目208.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“项目资源管理器项目资源管理器”视图中,选择视图中,选择“动态动态Web项目项目 FirstStruts Web图图”,双击左键,打开,双击左键,打开“Web图编辑器图编辑器”视图视图n从从“选用板选用板”中选取中选取“Web页面页面”、“操作映射操作映射”、“表单表单Bean”,拖拽到
16、拖拽到“Web图编辑器图编辑器”视图中,并分别命名为视图中,并分别命名为index.jsp、computeDay、output.jsp和和dateData218.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“Web图编辑器图编辑器”视图中,选择视图中,选择“index.jsp”,单击右键,在弹,单击右键,在弹出窗口中选择出窗口中选择“连接连接”,并将箭头指向,并将箭头指向“computeDay”;选择;选择“computeDay”,单击右键,在弹出窗口中选择,单击右键,在弹出窗口中选择“连接连接”,并将箭,并将箭头指向头指向“index.jsp”,在弹出的,在弹出的
17、“选择连接选择连接”窗口中选择窗口中选择“全局转全局转发发”,然后选择,然后选择“确定确定”,并将连接名称改为,并将连接名称改为“failure”;同样,建;同样,建立从立从“computeDay”到到“output.jsp”的连接,在的连接,在“选择连接选择连接”窗窗口中选择口中选择“局部转发局部转发”,然后选择,然后选择“确定确定”,并将连接名称改为,并将连接名称改为“success”;最后,建立从;最后,建立从“computeDay”到到“dateData”的连的连接,并选择保存接,并选择保存228.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“Web图编辑器
18、图编辑器”视图中,选择视图中,选择“dateData”,单击右键,在弹,单击右键,在弹出窗口中选择出窗口中选择“创建表单创建表单Bean”,打开,打开“新建新建Form-Bean”窗口窗口n在在“新建新建Form-Bean”窗口中,选择窗口中,选择“下一步下一步”;选中;选中“FirstStruts” 复选框,再选择复选框,再选择“下一步下一步”;在打开的在打开的“创建新字创建新字段段”窗口中添加新字段窗口中添加新字段month、day、year和和dayofWeek,类型分别,类型分别为为int、int、int和和String;然后选择;然后选择“下一步下一步”,输入,输入Java包的名称包
19、的名称“com.ibm.dayofweek”,再选择,再选择“完成完成”238.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“编辑器编辑器”视图中打开视图中打开“动态动态Web项目项目 FirstStruts Java Resources JavaSource firststruts.forms DateData.java”文件,在文件,在ActionErrors errors = new ActionErrors();代码行的下面增加如下代代码行的下面增加如下代码码:if (year FirstStruts Java Resources JavaSource fi
20、rststruts.resources ApplicationResources.properties”,增加如下代码:,增加如下代码:pre_gregorian=Date is before 1582, the year the Gregorian calendar began258.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“Web图编辑器图编辑器”视图中,选择视图中,选择“/computeDay”,双击左键,双击左键,打开打开“新建操作映像新建操作映像”窗口,选择窗口,选择“下一步下一步”;输入;输入Java包的名称包的名称“com.ibm.dayofwee
21、k”,然后选择,然后选择“完成完成”268.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“编辑器编辑器”视图中打开视图中打开“动态动态Web项目项目 FirstStruts Java Resources JavaSource firststruts.actions ComputeDayAction.java”文件,文件,更改更改代码代码(书(书P114P115)278.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“Web图编辑器图编辑器”视图中,选择视图中,选择“index.jsp”,双击左键,打开,双击左键,打开“新建新建JSP文件文件
22、”窗口,在窗口,在“模型模型”下拉菜单中选择下拉菜单中选择Struts JSP,选,选择择“配置高级选项配置高级选项”复选框,然后选择复选框,然后选择“下一步下一步”;在接下来的;在接下来的“标标记库记库”页面、页面、“JSP文件文件”页面继续选择页面继续选择“下一步下一步”,直到出现,直到出现“表表单字段选择单字段选择”页面,在页面,在“表单表单bean条目条目”下拉菜单中选择下拉菜单中选择“dateData”,选中,选中“year”、“day”和和“month”字段,选中字段,选中“在表单中生成字段在表单中生成字段”复选框,选择复选框,选择“完成完成”创建创建index.jsp文件文件28
23、8.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“Web图编辑器图编辑器”视图中,选择视图中,选择“output.jsp”,双击左键,打开,双击左键,打开创建创建JSP文件向导,实现文件向导,实现output.jsp文件的创建文件的创建n在在“表单字段选择表单字段选择”页面中,只选择页面中,只选择“dayofWeek”字段,同时清字段,同时清除对除对“在表单中生成字段在表单中生成字段”复选框的选择复选框的选择298.4 RAD中构建基于Struts架构的Web应用程序(cont.)n在在“项目资源管理器项目资源管理器”视图中,选择视图中,选择“动态动态Web项目项目
24、 FirstStruts WebContent index.jsp”,单击右键,在弹出的菜单中选择,单击右键,在弹出的菜单中选择“运运行行 在服务器上运行在服务器上运行”;在弹出的;在弹出的“选择服务器选择服务器”窗口中选择窗口中选择“WebSphere Application Server V6.0”,并选择,并选择“完成完成”来自动来自动向服务器中添加项目;在向服务器中添加项目;在Web浏览器中运行浏览器中运行index.jsp文件,输入文件,输入year、day和和month的值分别为的值分别为“2009”、“9”、“1”,选择,选择“submit”,在,在output.jsp页面中会显示页面中会显示“dayofWeek Tuesday”,30Q & A
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。