Java面向对象程序设计(第2版)第19章.ppt

上传人:小飞机 文档编号:6510293 上传时间:2023-11-07 格式:PPT 页数:26 大小:1,014.50KB
返回 下载 相关 举报
Java面向对象程序设计(第2版)第19章.ppt_第1页
第1页 / 共26页
Java面向对象程序设计(第2版)第19章.ppt_第2页
第2页 / 共26页
Java面向对象程序设计(第2版)第19章.ppt_第3页
第3页 / 共26页
Java面向对象程序设计(第2版)第19章.ppt_第4页
第4页 / 共26页
Java面向对象程序设计(第2版)第19章.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《Java面向对象程序设计(第2版)第19章.ppt》由会员分享,可在线阅读,更多相关《Java面向对象程序设计(第2版)第19章.ppt(26页珍藏版)》请在三一办公上搜索。

1、软件框架,FrameworkClass,operation(),HotspotSpecialization,Framework code,Application code,软件框架具有四个特点:基于框架的应用程序的流程控制在框架内部;框架针对通用功能给出了默认实现;框架内部代码不可被用户修改;框架可以被应用代码有选择的覆盖(重定义框架中的代码功能)或者细化(对框架中的空方法给出具体实现)来扩展功能。,框架封装了应用程序共性难点的解决方案,因而软件开发人员在应用框架进行编程时,不仅应明白自己做什么,更应明白框架已经做了什么,毕竟只有全面的逻辑理解才能更好地应用框架进行编程。,框架Hotspot类

2、,软件框架(Software Framework)是对通用功能操作进行抽象的软件,这些抽象的功能操作可以被应用代码通过框架提供的API接口进行有选择的改变,从而形成特定的应用软件。基于框架的应用软件在编程上可以复用框架代码,而不必从头编写。框架编程可以提高软件的质量、降低软件的开发成本、缩短开发周期。框架软件产品的最终用户不是一般使用者,而是软件开发人员。,软件框架与应用的控制关系,当应用依赖框架程度较高时,应用只能复用特定的框架,当有功能或性能更好的框架出现时,可能会因Hotspot的差异而无法移植。,应用程序基于框架编程就是对框架的复用,这种复用自然引出框架与应用之间控制关系问题。应用程序

3、复用框架,必须以Hotspot作为连接点,因而框架在某种程度上就决定了应用,或称应用依赖于框架。,以Struts1和Struts2两个版本的框架为例,对框架与应用之间的正向控制与反向控制给出进一步说明。,如果能做到应用不依赖于框架,控制关系就会反向(IoC,Inversion of Control),框架和应用的耦合关系就会大大降低,从而对框架和应用都有益处。,Struts1,JSP独立模块,Data,Browser,httpresponse,httprequest,JSP Model1,Browser,Data,httpresponse,httprequest,JSP Model2,定义:S

4、truts1是在JSP Model2基础上实现的一个MVC框架。,Web客户,WebServer,Action,(模型)ActionFormJavaBean,控制器ActionServlet,视图JSP,Action,Action,Servlet/JSP容器,Struts1实现的MVC框架,MVC结构,视图(电视),控制器(遥控器),模型(频道),Struts框架提供的Hotspot主要有Action和Formbean,应用程序需要继承这两个类,此外还需编写含有业务逻辑的JavaBean。,Struts提供Tag library,在JSP中便于对JavaBean、Html、错误消息、appli

5、cation.properties(本地文字)的访问和处理。,配置web.xml让JSP容器“知晓”struts框架,配置struts-config.xml让struts“知晓”特定的应用。,做到这三点,应用程序就充分利用了Struts框架,具有了MVC体系结构的设计特点,Struts1主要构件调用关系图,Struts1(一)环境配置(Tomcat),表:Tomcat主要目录用途描述,Hello应用下部署struts1的jar文件,Hello应用下部署struts1的标签文件,Struts1是Tomcat的一个应用,而用户建立的应用又是Struts1的一个应用,因而需要进行相应的配置工作,主要

6、分为Tomcat配置、环境变量配置、struts1应用配置。,HelloApp Struts Application action org.apache.struts.action.ActionServlet config/WEB-INF/struts-config.xml 2 action*.do,凡是“*.do”的请求都转给Controller(ActionServlet)进行处理,并对Controller的包路径和转载参数(struts-config.xml)进行了设置。,web.xml文件配置(一),hello.jsp/WEB-INF/struts-bean.tld/WEB-INF/s

7、truts-bean.tld/WEB-INF/struts-html.tld/WEB-INF/struts-html.tld/WEB-INF/struts-logic.tld/WEB-INF/struts-logic.tld,对应用的标签库文件进行设置。,默认欢迎页面的设置。,web.xml文件配置(二),Struts1(二)应用开发,继承Struts1的Hotspot对需求进行设计,package hello;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionMessage;i

8、mport org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;public final class HelloForm extends ActionForm private String userName=null;public String getUserName()return(this.userName);public void setUserName(String userName)t

9、his.userName=userName;public void reset(ActionMapping mapping,HttpServletRequest request)this.userName=null;public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)ActionErrors errors=new ActionErrors();if(userName=null)|(userName.length()1)errors.add(username,new ActionMessage

10、(hello.no.username.error);return errors;,1)ActionForm负责request中表单数据的接收,并进行必要的有效性检查。如果验证正确,则ActionServlet调用相应的Action,否则产生错误转交给JSP视图处理。,Hotspot,Html提交的userName表单项就是利用该接口给属性userName 赋值。,该方法被调用,验证userName表单项内容是否为空。errors为哈希表结构,验证合法时,其单元长度为0;ActionMessage对象可以读取application.properties文本文件获得相应的字符串。,提供reset接

11、口对属性设置默认值。,#Application Resources for the Hello sample application#Application Resources that are specific to the hello.jsp filehello.jsp.title=Hello-A first Struts programhello.jsp.page.heading=Hello World!A first Struts applicationhello.jsp.prompt.person=Please enter a UserName to say hello to:hel

12、lo.jsp.page.hello=Hello#Validation and error messages for HelloForm.java and HelloAction.javahello.dont.talk.to.monster=We dont want to say hello to Monster!hello.no.username.error=Please enter a UserName to say hello to!,application.properties文本文件内容,2)实现控制器调用相应模型对象的功能:从FormBean中得到提交的数据,对数据进行逻辑判断,如果

13、有问题则调用ActionForward提交给相应的JSP视图,如果没有问题,则产生JavaBean进行业务逻辑处理,并将JavaBean对象放入request当中,再指出下一步处理的JSP视图,由视图从request当中取出进行处理。,String badUserName=Monster;/逻辑判断 if(userName.equalsIgnoreCase(badUserName)errors.add(username,new ActionMessage(hello.dont.talk.to.monster,badUserName);saveErrors(request,errors);/得到

14、处理错误的JSP视图 return(new ActionForward(mapping.getInput();/产生相应的JavaBean,用于特定的业务规则处理 PersonBean pb=new PersonBean();pb.setUserName(userName);pb.saveToPersistentStore();/将产生的pb对象的引用放入request当中,由JSP视图取出处理 request.setAttribute(Constants.PERSON_KEY,pb);/得到Form Bean并从request当中删除,因为不需要其属性进行再转发 request.remove

15、Attribute(mapping.getAttribute();/将控制权转交 return(mapping.findForward(SayHello);,package hello;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpServletResponse;i

16、mport org.apache.struts.action.Action;import org.apache.struts.action.ActionMessage;import org.apache.struts.action.ActionMessages;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.util.Mess

17、ageResources;public final class HelloAction extends Action/本方法将由ActionServlet自动调用 public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception ActionMessages errors=new ActionMessages();/从Form Bean中得到提交数据 String userName=

18、(String)(HelloForm)form).getUserName();,Hotspot,/本类类型是JavaBean,是处理实际业务逻辑的类。package hello;public class PersonBean private String userName=null;public String getUserName()return this.userName;public void setUserName(String userName)this.userName=userName;/提交userName的持久化处理,例如存入数据库或文件当中 public void save

19、ToPersistentStore(),/系统中使用的所有常量在此定义package hello;public final class Constants public static final String PERSON_KEY=personbean“;,持久存储的Framework可参见Hibenate,3)JSP视图。,!,当JavaBean存放在request当中时,主体才被执行,通过得到request中指定javabean的属性值。第二次调用后,在提交参数没有错误的情况下执行。,声明和加载标签库,JSP中不再存在Java代码。,对ActionForm以及Action中的错误进行显示处

20、理。,不再存在直接的文本内容,利用从application.properties中得到key对应的字符串。,生成相应的html标签,第一次调用时只有此部分执行。,中的name对应 scope=“request“/指定ActionForm的存放范围,还可选择page、session、application validate=“true“/如果为true,则ActionServlet调用ActionForm的validte()方法。input=“/hello.jsp“/ActionForm的validte()返回错误时的调用页面。/action中execute()执行完毕后的转发页面,可以设置多个

21、,但name应不同,Struts1(三)应用部署,一个应用最终如果能被struts框架“知道”,一定要在struts-config.xml 中进行配置。每个应用都需要在中 配置项,在 中配置项,另外,它们共享一个,应用类部署(classes下是应用的包路径),用ActionMapping对象进行描述定义的内容,例如调用getInput()接口将得到属性input信息,JSP部署,Struts1(四)操作结果,首次访问,没有输入姓名时点“提交”的界面,输入“Monster”后点“提交”的界面,输入“Jack”后点“提交”的界面,Struts1(五)评价,1、Struts是实现MVC的框架,其中V

22、由视图组件构成(JSP+标签库);C就是ActionServlet;M由ActionBean和JavaBean组成。由于三类模块相互独立,因而在实现MVC模式上较JSPModel1具有较大的灵活性。,a=50%b=30%c=20%,View,Model,JavaBean充当Model,可以根据请求不同转给不同的JSP,从而实现一个Model对应多个视图;同理,也可实现一个视图对应多个Model,因而在编程上具有更大的灵活性。,2、JSP当中没有直接的文本字符串,所有的文本字符串都部署在文件当中,这就为文本字符串的变化以及国际化提供了方便。,一个Model对应多个表现视图,框架同应用是正向控制关

23、系,即应用依赖于框架。易产生线程安全问题。ActionForm的冗余问题。(4)表现层单一。,不足之处:,Struts2,Struts2源于WebWork(开源组织opensymphony的开源项目),可以看作是WebWork的升级版本而不是Struts1的升级版,因而与Struts1有着明显的结构差异,基于框架的编程思维也截然不同。,Struts2内部逻辑控制关系图,Struts2拦截器时序图,Struts2拦截器等效时序图,Struts2很好地解决了Struts1中存在的不足之处,Struts2是个IoC反向控制容器,大大降低了框架和应用的耦合程度。,避免了内置对象传递引起的侵入式设计问题

24、的发生。,Struts2为每一个请求单独建立一个Action对象,从而不会产生线程安全问题。Struts2去除了Struts1中的ActionForm:数据校验逻辑可以放在interceptor的intercept方法或者Action的execute方法中进行。Struts2视图通过支持模板技术扩展了表现类型:Struts2支持的视图类型有JSP、Velocity和FreeMaker。,Struts2建立了新的数据共享模型Value StackOGNL对Value Stack中的对象进行统一操作,Interceptor链的构成、Action调用与框架不存在直接的耦合关系,Hotspot数量减少以及Action可以不用继承Hotspot,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号