资源描述
标题标题标题,第一级,第二级,第三级,#,方法调用,本讲要点与教学目标,【,教学要点,】,1,、动态方法调用,2,、定义与使用逻辑,Action,3,、在,Action,中使用通配符,2,让,Action,处理多个请求,【,问题的提出,】,每个,Action,只处理一种特定业务,这种方式会导致,Action,过多且不易管理。在实际的应用开发中,存在着大量相似业务处理,它们要处理的信息是相似的(,如:用户登录、用户注册、用户信息修改等都是对用户信息的处理,),如果能将这些处理集中在一个,Action,中,可以使这些业务处理能够共享,Web,资源信息,同时也便于,Action,的管理。,Struts2,框架允许一个,Action,内包含多个请求处理,其实现的方法有三种:,1.,动态方法调用(,DMI,),2.,定义逻辑,Action,3.,使用通配符,3,动态方法调用,(DMI),【,动态方法调用,】,DMI-Dynamic Method Invocation,:允许一个,Action,中处理多个相关的业务,要实现,DMI,则需要注意以下三点:,1,、,Action,定义,主要是业务方法的定义,2,、,Action,请求,请求,Action,中特定的业务方法,3,、,struts.xml,配置,设置框架允许动态方法调用,4,动态方法调用,(DMI),【,1,、,Action,定义,】,在,Action,中可以不用,execute(),方法处理业务,而使用自定义方法,其格式如下:,public String,methodName,()throws Exception,.,说明:,methodName,是任意合法的方法名,在一个,Action,中可以定义多个这样的方法,以处理不同的业务,5,动态方法调用,(DMI),【,2,、,Action,请求,】,对,Action,请求时不仅包括,Action,的名称,还包含,Action,中指定的方法,格式如下:,或:,说明:,Action,名与方法名之间用“!”分隔,6,动态方法调用,(DMI),【,3,、,struts.xml,配置,】,在框架的配置文件,struts.xml,中,必须允许框架使用动态方法调用,通过如下配置项实现:,说明:,以上配置缺省时为“,true”,,但从,blank,项目拷贝时,此项设置为,false,,因此要想使用,DMI,,要么把,false,改为,true,,要么把此配置项删除,7,Action,处理多个请求(登录,/,注册,),【,案例要求,】,使用同一个,Action,完成用户登录和用户注册业务,【,基本思路,】,1,、定义,UserAction,,,Action,中定义两个方法,login,和,regist,,分别用来处理登录和注册业务,使用基于模型驱动的方式获取请求参数。,2,、定义登录页,login.jsp,,其,form,的,action,设置为,user!login,3,、定义注册页,regist.jsp,,其,form,的,action,设置为,user!regist,4,、分别定义登录成功,log_succ.jsp,和注册成功页,reg_succ.jsp,5,、,struts.xml,中允许使用动态方法调用,8,Action,处理多个请求(登录,/,注册,),1,、定义数据模型,User,,用于获取请求参数(略),2,、定义,UserAction,,实现,ModelDriven,、,SessionAware,接口(登录成功时把用户信息写到,session,中),9,Action,处理多个请求(登录,/,注册,),10,Action,处理多个请求(登录,/,注册,),用户登录,login.jsp,11,Action,处理多个请求(登录,/,注册,),用户注册,regist.jsp,12,Action,处理多个请求(登录,/,注册,),登录成功,log_succ.jsp,13,Action,处理多个请求(登录,/,注册,),14,Action,处理多个请求(登录,/,注册,),struts.xml,配置,/log_succ.jsp,/login.jsp,/reg_succ.jsp,/regist.jsp,15,定义逻辑,Action,【,问题,】,虽然多个请求可以共用同一个,Action,类,但,1,、在请求,Action,的指定方法时必须使用,actionName!methodName,的形式,个性化的东西往往给人带来麻烦,我们追求的是,“,通用性,”,2,、对于不同业务方法返回的字符串不能相同,如,“,log_succ,”,、,“,reg_succ,”,【,解决方案,】,定义逻辑,Action,,即,针对,一个,Action,类的,每一个业务方法,在,struts.xml,定义一个独立的,Action,,由于配置文件的这种,Action,定义不对应一个独立的,Action,类,因此称为逻辑定义。,16,定义逻辑,Action,【,如何定义逻辑,Action,?,】,1,、,struts.xml,定义一组,name,不同、,class,相同,的,action,,,每个,action,对应一个业务方法,2,、,action,定义时,设置,method,属性,,其值为,Action,类中对应的,业务方法名,17,逻辑,Action,定义,1,、仅修改上一个案例的,struts.xml,文件,/log_succ.jsp,/login.jsp,/reg_succ.jsp,/regist.jsp,18,逻辑,Action,定义,用户登录,用户注册,19,逻辑,Action,定义,【,说明,】,如果使用逻辑,Action,定义,在,Action,类的不同业务方法中可以返回相同的值。,20,逻辑,Action,定义,配置文件可对应修改如下:,21,在配置文件中使用通配符,【,问题,】,如果针对一个,Action,类定义多个逻辑,Action,,会使配置文件看起来很臃肿,【,解决方法,】,Struts2,框架的配置文件中支持通配符的使用。,【,使用通配符,】,在,的,name,属性中使用,*,作通配符,它可以匹配任意一个字符串,在,元素的,其它属性,中,其内部的,元素,中都,可以使用,n,与其呼应,,其中,n,是表示匹配,name,中第几个,*,的一个整数,如果有一个请求匹配了,“,*,”,,则其后的,n,将被自动替换,。,22,案例,3,:使用通配符,1,、为了使用通配符,将上例中,reg_succ.jsp,的文件名改为,regist_succ.jsp,,将,log_succ.jsp,文件名改为,login_succ.jsp,2,、,Action,配置进行如下修改:,/,1_succ.jsp,/,1.jsp,23,案例,3,:使用通配符,通配符的匹配过程分析,1,、请求,action,2,、首先在配置文件中找全名匹配的,3,、如果未找到,则顺序查找包含,“,*,”,的,action,进行匹配,4,、如果找到匹配的,action,,则将其后配置中的,n,用匹配的字符串进行自动替换。,24,使用通配符,【,团队开发中,“,约定优于配置,”,原则,】,约定项目名、,Action,类名、,JSP,文件名、变量名、方法名等等,,约定做的好,则配置就会相当简洁,。,一个约定合理的项目,一个遵守约定的团队,肯定是工作效率高的团队。,【,例如,】,模块名与,package,名匹配,,action,命名使用,“,模块名,_,业务名,”,,,JSP,文件名使用,“,业务名,_succ.jsp,”,、,“,业务名,.jsp,”,等,这些约定在项目开发之前由项目经理完成。,25,
展开阅读全文