Struts1的入门级学习教程.docx_第1页
Struts1的入门级学习教程.docx_第2页
Struts1的入门级学习教程.docx_第3页
Struts1的入门级学习教程.docx_第4页
Struts1的入门级学习教程.docx_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

struts1.x的入门级学习教程 在培训是辅导给我们将的一个struts1的串讲,最近在修改一个项目,在系统项目中使用的是struts1.3,俗话说临阵磨枪,不快也光吗?现在给自己一个时间来再次回顾一下。一、下载struts1.x在Apache官网上找到struts的主页,找到struts的下载页面,现在的最新版本是struts-2.0.14-all.zip.将struts1.x下载下来。二、了解struts1.3x构成1.struts运行需要的包 commons-digester.jar用于解析配置文件commons-fileupload.jar用于实现文件上传commons-logging.jar用于日志处理commons-beanutils.jar用于pojo的属性赋值commons-validator.jar用于表单验证jar包.2、struts标记库文件(tld)(1)struts-bean.tld(2)struts-html.tld(3)struts-logic.tld(4)struts-nested.tld(5)struts-tiles.tld3、配置文件Struts-config.xml12367891011121314151617181920214、资源文件(代码测试)使用资源文件的步骤:(1)确认资源文件的jar导入(2)引入标记库三、struts1.3x核心控制流程1。主要组件ActionServlet组件:充当struts框架的中央控制器。RequestProcessor组件:充当每个子应用模块的请求处理器Action组件:负责处理一项具体的业务。2。ActionServlet (1)Struts的启动通常从加载ActionServlet开始(如果没有其他Servlet的加载优先级比它高)。ActionServlet在应用一加载时即会被实例化并调用其init方法。(2)init方法所做的主要工作有:1)加载struts配置文件,并创建用于封装配置信息的ModuleConfig对象2)加载资源文件,并创建用于封装资源文件的MessageResources对象。另外,如果有相应配置的话,init方法还将初始化数据源和PlugIn注意:1)如果web.xml有多模块配置,将创建多个ModuleConfig对象和MessageResources对象分别用于封装各个模块的struts配置文件和资源文件。eg.多模块12config3/WEB-INF/struts-config.xml4567config/ma8/WEB-INF/ma/struts-config.xml91011config/mb12/WEB-INF/mb/struts-config.xml1314或者1516config17/WEB-INF/struts-config.xml181920config/catalog21/WEB-INF/ma-struts-config.xml222324config/authorize25/WEB-INF/mb-struts-config.xml26272)针对各个模块所创建的ModuleConfig对象和MessageResources对象将存储在ServletContext中,对应的属性名中有该模块名称的相应标识。 (3)ActionServlet的process()方法的主要工作有: 1)根据请求信息获知所请求的模块名称,从ServletContext中获得与请求模块对应的的ModuleConfig对象,并存储到request中。2)根据模块信息获得相应的RequestProcessor对象,一个模块对应一个RequestProcessor对象,RequestProcessor对象将关联与所属模块对应的ModuleConfig对象。3)调用RequestProcessor对象的process方法,将request和response作为参数传递给它。 3、RequestProcessor类(1)Struts框架只允许应用中存在一个ActionServlet类,但每个应用程序模块都有各自的RequestProcessor类实例。(2)RequestProcessor对象的process方法的主要工作: 1)调用自己的 processPreprocess(request, response)方法,该方法不进行任何操作,用于子类重写扩展其功能。2)获得与请求地址所匹配的ActionMapping对象,AcionMapping对象用于封装一个特定acion的配置信息。3)根据ActionMapping中的配置信息获得ActionForm对象(该对象将缓存到request或session中),并将表单数据填充到ActionForm中,然后根据ActionMapping的配置决定是否验证ActionForm,如果验证,将调用ActionForm的validate方法,若其返回的ActionErros对象中包含ActionMessage对象则表示验证失败,将转向action配置信息input属性所指示的地址。4)如果ActionForm无需验证或验证通过将创建并缓存与请求地址匹配的Action对象,将ActionMapping对象、ActionForm对象、request和response作为参数调用其execute方法。5)根据Action对象的execute方法返回的ActionForward对象,将请求转发或重定向到该ActionForward所封装的地址。4、Action类(1)Action类是用户请求和业务逻辑之间的桥梁(2)ActionServlet对所有的请求作集中的统一处理,每个不同的Action类具体处理不同的请求。(3)每个Action类都需要实现execute()方法,RequestProcessor类创建一个Action实例后,就会调用其execute()方法。(4)struts-config.xml:12actionpath=”/路径,当请求时.do时FC就调用该Action的execute方法”3type=”Action类的名称(包名.类名)”4name=”该Action关联的ActionForm的名称”58attribute=”缓存ActionForm对象的名称(key),不写key就是name的值”9scope=”缓存ActionForm的范围(request|session)默认是session”10validate=”是否要验证true|false”1114input=”和validate=”true”联用,表示验证失败后,FC把请求转向的地址15parameter=”是一个附加的属性,对于不同的Action可能有不同的意义1617192021225、内置的Struts Action类(1)目的1)减少Action类的数目2)便于代码的维护(2)DispatchAction 1)特点:DispatchAction 类是Action 类的子类;共享同一个Action 的路径;共享一个ActionForm,多个不同action path,可以在同一个类中。2)DispatchAction 的写法:1publicclassMyDispatchActionextendsDispatchAction23ActionForwardlogin(ActionFormform,HttpServletRequestrequest,45HttpServletResponseresponse,ActionMappingmapping)throwsException67returnmapping.findForward(“sucess”);8910111213 注意:不要覆盖execute()方法3)DispatchAction 的配置文件: 123456注意:parameter 属性是和表单中隐藏域的名字相对应的 4)DispatchAction 页面: Login(3)MappingDispatchAction 1)特点: MappingDispatchAction 类是DispatchAction 的子类可以匹配多个action 路径可以不共享同一个ActionForm2)MappingDispatchAction 的写法1publicclassMyMappingDispatchActionextendsMappingDispatchAction23ActionForwardlogin(ActionFormform,HttpServletRequestrequest,45HttpServletResponseresponse,ActionMappingmapping)throwsException67returnmapping.findForward(“success)89101112133)MappingDispatchAction 的配置文件 注意:parameter 属性是指定调用方法的名字4)MappingDispatchAction 页面注意:在JSP 页面中不需要再使用隐藏域来传递参数了,在form 中的action 就可以直接使用xxx.do 匹配了。(4)LookupDispatchAction 1)特点: LookupDispatchAction 类也是DispatchAction 类的子类。 解决一个表单的多个同名提交按钮的问题。 通过使用资源文件,用submit 按钮的value 来作为资源文件中的key 所对应的值,通过这个值来找到对应的key,再使用这个key 来获得指定Map 中所对应的值,这个值就是要调用的方法名。注意:在继承LookupDispatchAction 时,要覆盖getKeyMethodMap()方法,并定义Map,向Map 中放入指定的键值对。 2)LookupDispatchAction 的写法1publicclassTestLookupDispatchActionextendsLookupDispatchAction23publicActionForwardlogin(ActionMappingmapping,ActionFormform,45HttpServletRequestrequest,HttpServletResponseresponse)throwsException67returnmapping.findForward(success);891011publicActionForwardregister(ActionMappingmapping,ActionFormform,1213HttpServletRequestrequest,HttpServletResponseresponse)throwsException1415returnmapping.findForward(register);16171819publicMapgetKeyMethodMap()2021Mapmap=newHashMap();2223/key为资源文件的key值,value为action中的方法名。2425map.put(submit.login,login);2627map.put(submit.register,register);2829returnmap;3031323334353)LookupDispatchAction 资源文件 MessageRperties文件中submit.login=loginsubmit.register=register4)LookupDispatchAction 的配置文件:1234567891213141516171819202122235)LookupDispatchAction 页面:145userName:67password:8910111213141516171819202122232425 注意:页面中的property=submit与struts-config.xml中action的parameter元素值相同四、ActionForm1、为什么使用form?(1)用户提交的数据封装成对象(2)表单数据的缓存。(3)表单信息验证(服务器端验证)2、ActionForm的生命周期(1)ActionForm Bean有两种存在范围:request和session 1)如果存在于request范围,它仅在当前的请求/响应生命周期中有效 2)如果存在于session范围,同一个ActionForm实例在整个Http会话中有效注意:在struts配置文件中,元素的scope属性用来设置ActionForm的范围,默认值为session。3、配置ActionForm(1)action和form的关系是:一对多(2)struts-config.xml (3)在某一个Action的配置中可以写:4、Form验证(1)验证:1)表单级验证:(不访问数据库) JavaScript做的是客户端验证,可以减少服务器端的负担,但不够安全 在服务器端的Form验证避免跳过客户端的校验 2)业务逻辑验证:由Action负责完成(2)validator()方法 1)调用的条件: Form继承ActionForm,并且为ActionForm配置了Action映射,即元素的name属性和元素的name属性匹配。 元素的validate属性为true 2)validate()方法 该方法返回ActionErrors对象,如果返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,数据验证通过。如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误。3)validate()方法主要负责检查数据的格式和语法,而不负责数据是否符合业务逻辑。(3)Validator框架(验证框架)1)validate()方法验证的局限性:必须通过程序代码来实现验证逻辑,如果验证逻辑发生变化,必须重新编写和编译程序代码当系统中有多个ActionForm Bean,并且它们包含一些相同的验证逻辑时,开发人员必须对每个ActionForm Bean进行重复编程,完成相同的验证逻辑,这会降低代码的可重用性。 2)主要依赖的jar文件: jakart-oro.jar:提供了一组处理文本的类,具有文本替换、过滤和分割等功能 commons-validator.jar:提供了一个简单、可扩展的验证框架,包含了通用的验证方法和验证规则。3)条件: validator-rules.xml validation.xml struts-config.xml 写plug-in Form必须继承ValidatorForm(ActionForm子类)4)validator-rules.xml中规定了常见的验证需求。一般不需要改变。5)validation.xml是form验证的配置文件。 切记:Validator框架不能用于验证标准的ActionForm类。如果要使用Validator框架,应该采用ActionForm类的两个子类:DynaValidatorForm(支持动态ActionForm)和ValidatorForm(支持标准ActionForm)。5、动态ActionForm(1)ActionForm 的缺点:表单的改动会触发FormBean 的大量改动(应用程序停器,而且FromBean 维护量大)。(2)动态FormBean 是指,Struts 已提供给我们DynaActionForm(是ActionForm 的子类),我们只需通过配置文件进行配置。(3)DynaActionForm的写法:struts-config.xml 注意:Type 表示属性类型,注意若为基本类型时要用其包装类。 TestDynaActionForm.jsp 测试DynaActionForm 姓名: 年龄: TestDynaActionFormAction.java public class TestDynaActionFormAction extends Action Override public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception DynaActionForm daf = (DynaActionForm) form; String name = (String)daf.get(name); /取daf中的值 Integer age = (Integer)daf.get(age); System.out.println(name: + name + age: + age); return mapping.findForward(success); testDynaActionForm_success.jsp(取DynaActionForm的值) 测试动态ActionForm 姓名:$dynaActionF 年龄:$dynaActionForm.map.age (3)访问动态ActionForm 与访问普通ActionForm 的最大区别:属性的访问方式不同。1)普通ActionForm getter setter 方法。2)动态ActionForm DynaActionForm 把所有属性保存在Map 中。public Object get(String name)public void set(String name, Object value)注意:DynaActionForm 的校验不太方便。需要继承DynaActionForm,但是写了代码又不能满足动态的功能了。五、异常处理: 1、处理流程:(1)Action throw Exception(2)Action Servlet ExceptionHandler(3)ExceptionHandler 处理Exception ExceptionHandler 会读配置文件ActionMessage - request AttributeActionForward(4)ActionServlet ActionForward2、配置struts 的异

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论