电动车控制器介绍_第1页
电动车控制器介绍_第2页
电动车控制器介绍_第3页
电动车控制器介绍_第4页
电动车控制器介绍_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1电动车控制器介绍第一篇:电动车控制器介绍电动车控制器介绍电动车控制器是用来控制电动车电机的启动、运行、进退、速度、停止以及电动车的其它电子器件的核心控制器件,它就象是电动车的大脑,是电动车上重要的部件。我们开发的智能型无刷电动车控制器采用了美国cypress公司的方案,采用性能非常优异单片机作为主控芯片,来实现控制和保护电动车的电机、电池,使电动车驱动系统工作在最佳状态,从而提高产品的可靠性和使用寿命;采用霍尔电子无级调速系统,具有欠压保护、过流保护、堵转保护等保护功能,可靠的对电动车电机和电池进行保护,确保电动车使用及安全;加入了全新的无刷电机控制器理论,具有反充电/EABS刹车功能,用户在关掉电源的情况下可把电机锁死,使车子很难推行,另外还加入1+1助力系统,具有巡航功能,模式切换功能,实现了真正的智能型控制。一、控制器功能:1、工作电压:DC48V;2、功率:350W450W500W;3、欠压保护:DC41.5V±1V(也可根据用户要求设定);4、电动模式:霍尔电子无级调速系统,调速范围0~100%,1.1~4.2V;5、限流电流:≤17A(平均值),最大脉冲电流35A(根据用户要求设定);6、限速功能:最高车速可达35km/h~45km/h(根据电机而定),限速行驶速度控制在20XX/h以内;7、启动方式:手柄控制启动快慢,控制灵活;8、刹车:EABS+机械刹,高/低电平;9、巡航模式:具有自动巡航和手动巡航两种功能可选,8秒进入巡航,稳定行驶速度,无须手柄控制;10、1+1助力功能:控制器根据骑车者脚踏力的大小(速度快慢),给出相应比例的电机动力,实现了在骑行中辅以动力,让骑行者感觉更轻松,中轴转速智能型;11、堵转保护功能:自动判断电机在过流时是处于完全堵转状态还是在运行状态或电机短路状态,如过流时是处于运行状态,控制器将限流值设定在固定值,以保持整车的驱动能力;如电机处于纯堵转状态,则控制器2秒后将限流值控制在10A以下,起到保护电机和电池,节省电能;如电机处于短路状态,控制器则使输出电流控制在2A以下,以确保控制器及电池的安全。12、防飞车功能:解决了无刷控制器由于转把或线路故障引起的飞车现象,同时具有启动防飞车功能,提高了系统的安全性。13、电机锁功能:在关闭电门锁的情况下,控制器能自动将电机锁死,实现了部件级的防盗功能,解决了防盗型控制器在警戒状态下控制器还必须工作,工作电流大的不利因素。14、遥控功能:在关闭电门锁的情况下,控制器通过遥控报警器自动在将电机锁死的同时具有报警功能,实现了遥控与部件级的双重防盗功能,解决了防盗型控制器在警戒状态下控制器还必须工作,工作电流大的不利因素。并可在车场中通过遥控器寻车。15、反充电功能:滑行时可对电池进行反充电,在延长了电池的行驶时间的同时增加了电池的使用寿命,解决了电池在行驶时的行驶时间短和使用寿命不长的问题。16、电机选择:解决了正、反相绕阻电机之间不兼容的现象,方便了用户的使用。17、120XX60º选择:120XX60º电机可相互切换。18、指示灯显示代码:1、指示灯常灭:控制器进入运行状态;2、指示灯亮0.5灭0.5秒闪烁一次,灭1秒:控制器进入待机状态;3、指示灯亮0.5灭0.5秒闪烁二次,灭1秒:刹车信号;4、指示灯亮0.5灭0.5秒闪烁三次,灭1秒:MOS损坏;5、指示灯亮0.5灭0.5秒闪烁四次,灭1秒:飞车保护;6、指示灯亮0.5灭0.5秒闪烁五次,灭1秒:电流故障;7、指示灯亮0.5灭0.5秒闪烁六次,灭1秒:电源电压低保护;8、指示灯亮0.5灭0.5秒闪烁七次,灭1秒:霍尔信号故障;9、指示灯亮0.5灭0.5秒闪烁八次,灭1秒:手柄信号未接。二、使用方法:1、在接线前先切断电源,按接线图所示连接各根导线;2、该控制器应安装在通风、防水、防震部位;3、控制器限速控制插头应放置容易操作的地方;4、控制器接插件应接插到位,禁止将控制器电源正负极反接;5、测试后装进铝壳之前,建议放电。第二篇:电动车控制器设计方案电动自行车控制器设计电动自行车控制器方案20XX/11/5电动自行车控制器设计目录第一章概述3第二章系统需求分析4第三章控制器分析6一、电动车控制器框图6二、控制器关键功能分析7第四章控制器设计9一、硬件设计9二、软件设计12电动自行车控制器设计第一章概述近年来,随着改革开放和经济发展日益深刻,人民生活水平日渐提高,出行交通工具也发生前所未有的变化。老百姓出行不仅考虑快捷、方便,还追求时尚环保,因此近年来电动自动自行车日益受老百姓喜爱。作为电动自行车,其核心控制器则是电动自行车的关键,控制的好坏决定车子的平稳、安全、舒适,因此一个功能全面、可靠性强、符合要求的控制器决定了电动自行车的质量。为了使得电动自行车有良好的体验和可靠的质量保证,因此本文介绍一种控制器的设计方案。电动自行车控制器设计第二章系统需求分析1、具有安全检测功能,检测电池电压,电流需要检测电池中电流,电池电流不能过大,防止损伤电池;需要检查电机中的电流,并且识别是否是电机堵转还是车子上坡或者负载过大,并且限制电机电流17A以下,在15~17A间切换,防止大电流长时间烧坏电机;检测电池电压,电池电压大于电机额定电压120XX,发出报警铃声,提醒电压过大,不能驱动电机;2、显示速度和里程数利用三位数码管显示里程数,范围0~999Km,保证每分钟更新一次;用5个发光二极管显示速度,表示5个档位,每个档位间隔速度为10Km/h,即表示的速度为10Km/h、20XX/h、30Km/h、40Km/h、50Km/h,速度在哪个档位,对应发光二极管闪亮。3、具有转向灯控制电路当打开转向灯开关时,对应的转向灯每隔0.5秒闪一次,每次持续0.5秒电动自行车控制器设计4、照明灯控制电路当打开照明灯时,在仪表盘上显示照明打开,用一个发光二极管。5、具有报警功能当钥匙开关不再车上时,若轮子速度有变化,即发出报警声音。电动自行车控制器设计第三章系统分析一、电动车控制器框图上图是整车的控制系统框图,主要有电源、电机、控制器等,其中控制器位于核心地位,是整个控制系统的关键,也是负责组织各个部分协调工作的中心。其具体的控制框图如下图所示:电动自行车控制器设计电源降压模块灯管驱动电路照控速盘电压信号刹车信号信号转换电路WM灯P向、转明灯转向灯、照明灯信号信号转换电路PIC芯片信号转换电路MOS驱动电路电机电源输出电路电机电路电流、电机电压蜂鸣器P信号转换电路WM三极管驱动电路电机霍尔信号电压、里程显示输出数码管显示电路电源从图中可以看出,控制器由单片机及其外围电路构成,包括输入信号处理电路、输出信号处理电路、电源电路等。二、控制器关键功能分析控制器功能:1、改变电机速度即调速功能,检测车把电压,根据车把设定速度来进行速度设定。同时检测霍尔传感器计数值,作为当前速度,通过PID调节来计算应该输出的PWM波。2、刹车功能检测刹车信号,当刹车有效时,将速度设定值强制变为零,输出PWM也变为零。电动自行车控制器设计3、有防过压、过流检测电路检测电源电压,低压报警,防止损伤电池;检测电源电流,当电流过大时适当降速,限制电流在合理区间,防止烧坏电机、电源。4、显示电池电压、车速、里程数将车子的速度用数码管显示在仪表盘上,将电池电压通过发光二极管显示在仪表盘上。5、防盗当车子锁上时,车轮子有转动则报警。6、照明灯控制开关、转向灯控制开关可以采用双刀双掷开关,一个可控制强电信号,另一个给单片机进行检测。电动自行车控制器设计第四章控制器设计控制器是电动自行车的核心,要实现的功能有:1、可以改变电机速度2、可以刹车3、有防过压、过流检测电路4、显示电池电压、车速、里程数5、防盗控制器不仅要具有所有功能并且引出相关信号线,而且要有合适的外观尺寸,并且可以对内部电路进行保护。一、硬件设计1、电机驱动电路设计由V1~V6六只功率管构成的驱动全桥可以控制绕组的通电状态。按照功率管的通电方式,可以分为两两导通和三三导通两种控制方式。由于两两导通方式提供了更大的电磁转矩而被广泛采用。在两两导通方式下,每一瞬间有两个功率管导通,每隔1/6周期即60°电角度换相一次,每只功率管持续导通120XX角度,对应每相绕组持续导通120XX在此期间相电流方向保持不变。电动自行车控制器设计为保证产生最大的电磁转矩,通常需要使绕组合成磁场与转子磁场保持垂直。由于采用换相控制方式,其定子绕组产生的是跳变的磁场,使得该磁场与转子磁场的位置保持在60°~120XX对垂直的范围区间。2、照明灯、转向灯、速度显示仪表单片机检测到照明灯亮暗,转向灯亮暗及方向,将其显示在仪表盘上,灯的亮暗是通过三个发光二极管来显示的。由于一般的发光二极管20XX的电流就可以驱动,因此可以用单片机I/O引脚直接驱动。至于速度显示,可以通过数码管显示,数码管可以用三个,显示范围是0.0~99.9KM/h,可以用三极管控制选择端,每次选择一个数码管,进行给值,单片机输出的是四位信号,可以显示0~9的BCD码,通过数码管显示驱动芯片转换为数码管的7段码,则选中的数码管显示对应的数字,通过不断给数码管写值则可以达到看起来连续的效果。电动自行车控制器设计或者要节省成本,其实速度显示可以仅显示档位,比如0~5km/h、5~10km/h、10~15km/h、15~20XX/h、20XX5km/h分为5档,每档对应一个发光二极管,当速度在对应的档位时,对应的发光二极管亮,其他的不亮。3、电池电压检测电路检测电池电压需要对电池电压进行采样,采样电路的作用是强弱分离,对单片机引脚进行保护,同时对电池电压进行变换,变到适合单片机A/D引脚采样的范围。采样电路可以先用电容进行滤波,然后接上一个输入电阻很大的变换电路,可以通过741等放大器实现,然后对比较后的电压进行电阻分压转换,转换到0~3.3V,适合单片机采样。4、电机电流检测、电池电流检测、漏电检测在待检测的电路中串入阻值很小的电阻(注意大电流电路中电阻必须要有较大的功率),然后对电阻两侧的电压取样,经过后级差值比较电路得出压差。差值转换可以采用741,然后在进行放大缩小变化,转换成0~3.3V的范围,可以接入单片机A/D引脚进行电压检测,然后除以电阻及变比等即可得到对应线路的电流。通过和每个线路设定电流阈值及车状态检测,即可得到是否过流、是否漏电等信息。电动自行车控制器设计5、报警电路单片机通过I/O引脚输出报警信号开关,然后通过三极管驱动蜂鸣喇叭来提示是否有紧急情况。通过不同频率的信号分辨不同的报警信息。6、防盗电路防盗检测其实是检测轮子是否转动来实现的,即利用霍尔器件检测速度,若速度大于某个去掉干扰后的阈值就认为有被盗的可能,就驱动蜂鸣喇叭报警。二、软件设计1、软件流程图设计电动自行车控制器设计上电检查进入主循环检测速度输入,设定速度输入,刹车信号输入,电源电压检测输入速度PID计算,将PWM控制信号输出仪表盘显示速度程序流程图1,主要流程图,包括初始化、主循环。电动自行车控制器设计检测速度设定值,用单片机A/D转换功能将模拟电压转换为数字信号,低通滤波读出单片机光码盘计数器值,低通滤波增量式PID计算输出值,并且进行限速处理PWM输出设定程序流程图2,速度调整程序流程图电动自行车控制器设计已经检测到实际速度值,并且进行低通滤波处理将速度信号分成三位,分别是十位,个位,小数位计算三位数字转换成数码管设定值,并且进行输出时序设置调用显示子函数程序流程图3,显示子函数程序流程图电动自行车控制器设计速度PID计算刹车信号是否有效否进行增量式PID计算,设定是将设定速度设为零,进行PID计算,输出PWM设定子函数程序流程图4,速度调控流程图电动自行车控制器设计安全检测子函数电源电流是否过大是否否进行正常处理,显示电压是电流过大,进行漏电判断或者速度限制下一程序程序流程图5,安全检测程序流程图2、软件功能设计速度PID设计:1)可以采用增量式PID,在不同电压、不同速度下比例积分微分系数有所不同;2)带刹车检测,刹车时将设定速度设为0,电机PWM输出为零;3)超速限制,当速度超过20XX/h时,进行适当减速,限制在20XX/h以下;电动自行车控制器设计4)起步限速,开始时速度慢慢上升,防止突然启动。安全检测设计:1)检测电压电流,当电压较低时报警,以免损坏电池;2)电流检测,防止超过限制电流烧坏电机、电源或者电线,当电流大于最大电流时,减速是电流在最大电流值以下附近一个区间内波动;3)上电检测,当电机未开动时,若有较大电流则可能漏电进行报警;4)当车钥匙拔出来,并且开启报警功能后,若车轮子光码盘有读数说明车子可能被盗,要进行报警。显示设计:1)速度显示设计,用三段数码管显示速度的十位、个位和小数位,采用共阴极数码管,LM373锁存数字,三个IO口选通数码管,一次显示一位,每个循环周期控制一次;2)照明灯显示,主控电路用开关实现,单片机仅检测开关是否开启,并用一个IO口来控制三极管电路驱动发光二极管来显示是否开启照明灯,左右的转向灯采用相同的设计;3)电源电压显示,将检测到的电压用多个发光二极管显示,亮的越多电压越高,当电压低于报警电压时,所有二极管熄灭,驱动电路采用三极管驱动,每个循环周期进行一次显示。第三篇:struts2_控制器介绍struts2控制器介绍核心控制器FilterDispatcher核心控制器FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。Struts2的工作流程相对于Struts1要简单,与WebWork框架基本相同,所以说Struts2是WebWork的升级版本。Struts2框架按照模块来划分,可以分为ServletFilters、Struts核心模块、拦截器和用户实现部分。Struts2框架结构图如图3.1所示。图3.1Struts2框架结构图一个请求在Struts2框架中的处理大概分为以下几个步骤。客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入http://localhost:8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。注意:这里是有顺序的,先ActionContextCleanUp,再其他过滤器(OthterFilters、SiteMesh等),最后到FilterDispatcher。FilterDispatcher是控制器的核心,就是MVC的Struts2实现中控制层(Controller)的核心。FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServletRequest)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。ActionProxy通过ConfigurationManager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类。ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。Struts2的核心控制器是FilterDispatcher,有3个重要的方法:destroy()、doFilter()和Init(),可以在Struts2的下载文件夹中找到源代码,如代码3.1所示。代码3.1核心控制器FilterDispatcherpublicclassFilterDispatcherimplementsStrutsStatics,Filter{/***定义一个Log实例*/privatestaticfinalLogLOG=LogFactory.getLog(FilterDispatcher.class);/***存放属性文件中的.STRUTS_I18N_ENCODING值*/privatestaticStringencoding;/***定义ActionMapper实例*/privatestaticActionMapperactionMapper;/***定义FilterConfig实例*/privateFilterConfigfilterConfig;protectedDispatcherdispatcher;/***创建一个默认的dispatcher,初始化filter*设置默认的packages**/publicvoidinit(FilterConfigfilterConfig)throwsServletException{this.filterConfig=filterConfig;dispatcher=createDispatcher(filterConfig);dispatcher.init();Stringparam=filterConfig.getInitParameter(“packages”);Stringpackages=“erceptor.debugging”;if(param!=null){packages=param+“”+packages;}this.pathPrefixes=parse(packages);}//销毁filter方法publicvoiddestroy(){if(dispatcher==null){LOG.warn(“somethingisseriouslywrong,Dispatcherisnotinitialized(null)”);}else{dispatcher.cleanup();}}/***处理一个Action或者资源请求**filter尝试将请求同actionmapping相匹配*如果找到,将执行dispatcher的serviceAction方法*如果Action处理失败,doFilter将建立一个异常**如果请求静态资源*资源将被直接复制给response**如果找不到匹配Action或者静态资源,则直接跳出publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)res;ServletContextservletContext=getServletContext();StringtimerKey=“FilterDispatcher_doFilter:”;try{UtilTimerStack.push(timerKey);request=prepareDispatcherAndWrapRequest(request,response);ActionMappingmapping;try{mapping=actionMapper.getMapping(request,dispatcher.getConfigurationManager());}catch(Exceptionex){LOG.error(“errorgettingActionMapping”,ex);dispatcher.sendError(request,response,servletContext,HttpServletResponse.SC_INTERNAL_SERVER_ERROR,ex);return;}if(mapping==null){StringresourcePath=RequestUtils.getServletPath(request);if(“".equals(resourcePath)&&null!=request.getPathInfo()){resourcePath=request.getPathInfo();}if(serveStatic&&resourcePath.startsWith(”/struts“)){Stringname=resourcePath.substring(”/struts“.length());findStaticResource(name,request,response);}else{//为一个普通的request,则通过chain.doFilter(request,response);}return;}/***这个方法询问ActionMapper是否需要调用某个Action来处理这个(request)请求,*如果ActionMapper决定需要调用某个Action,*FilterDispatcher则把请求的处理交给ActionProxydispatcher.serviceAction(request,response,servletContext,mapping);}finally{try{ActionContextCleanUp.cleanUp(req);}finally{UtilTimerStack.pop(timerKey);}}}……}在doFilter()方法中,将调用dispatcher.serviceAction,该方法如果找到相应的Action,将把用户请求交给ActionProxy。serviceAction()代码在Dispatcher.java中,如代码3.2所示。代码3.2Dispatcher类publicclassDispatcher{.../***为mapping加载类,并调用相应的方法或者直接返回result**根据用户请求的参数,建立Action上下文*根据指定的Action’名称和包空间名称,加载一个Action代理ActionProxy*然后Action的相应方法将被执行,*/publicvoidserviceAction(HttpServletRequestrequest,HttpServletResponseresponse,ServletContextcontext,ActionMappingmapping)throwsServletException{MapextraContext=createContextMap(request,response,mapping,context);//如果存在一个值栈,则建立一个新的并复制以备Action使用ValueStackstack=(ValueStack)request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);if(stack!=null){extraContext.put(ActionContext.VALUE_STACK,ValueStackFactory.getFactory().createValueStack(stack));}StringtimerKey=”HandlingrequestfromDispatcher“;try{UtilTimerStack.push(timerKey);Stringnamespace=mapping.getNamespace();Stringname=mapping.getName();Stringmethod=mapping.getMethod();Configurationconfig=configurationManager.getConfiguration();//FilterDispatcher把请求的处理交给ActionProxyActionProxyproxy=config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(namespace,name,extraContext,true,false);proxy.setMethod(method);request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY,proxy.getInvocation().getStack());//ActionMapping直接返回一个resultif(mapping.getResult()!=null){Resultresult=mapping.getResult();result.execute(proxy.getInvocation());}else{proxy.execute();}if(stack!=null){request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY,stack);}}catch(ConfigurationExceptione){LOG.error(”Couldnotfindactionorresult",e);sendError(request,response,context,HttpServletResponse.SC_NOT_FOUND,e);}catch(Exceptione){thrownewServletException(e);}finally{UtilTimerStack.pop(timerKey);}}…}从上面代码中可以看出来,Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理。关于Action代理相关内容,读者可以参考拦截器章节的介绍。★提示★前面一直在说Action可以是一个普通的Java类,与ServletAPI完全分离,但是为了实现业务逻辑,Action需要使用HttpServletRequest内容。Struts2设计的精巧之处就是使用了Action代理,Action代理可以根据系统的配置,加载一系列的拦截器,由拦截器将HttpServletRequest参数解析出来,传入Action。同样,Action处理的结果也是通过拦截器传入HttpServletResponse,然后由HttpServletRequest传给用户。其实,该处理过程是典型的AOP(面向切面编程)的方式,读者可以在后面详细了解到。Struts2处理过程模型如图3.2所示。图3.2Struts2处理过程模型★说明★拦截器是Struts2框架的核心,通过拦截器,实现了AOP(面向切面编程)。使用拦截器,可以简化Web开发中的某些应用,例如,权限拦截器可以简化Web应用中的权限检查。3.1.2业务控制器Action业务控制器Action是由开发者自己编写实现的,Action类可以是一个简单的Java类,与ServletAPI完全分离。Action一般都有一个execute()方法,也可以定义其他业务控制方法,详细内容将在后面介绍。Action的execute()返回一个String类型值,这与Struts1返回的ActionForward相比,简单易懂。Struts2提供了一个ActionSupport工具类,该类实现了Action接口和validate()方法,一般开发者编写Action可以直接继承ActionSupport类。编写Action类后,开发者还必须在配置文件中配置Action。一个Action的配置应该包含下面几个元素:1、该Action的name,即用户请求所指向的URL。2、Action所对应的class元素,对应Action类的位置。3、指定result逻辑名称和实际资源的定位。Action是业务控制器,笔者建议在编写Action的时候,尽量避免将业务逻辑放到其中,尽量减少Action与业务逻辑模块或者组件的耦合程度。3.1.3业务模型组件业务模型组件可以是实现业务逻辑的模块,可以是EJB、POJO或者JavaBean,在实际开发中,对业务模型组件的区分和定义也是比较模糊的,实际上也超出了Struts2框架的范围。不同的开发者或者团队,都有自己的方式来实现业务逻辑模块,Struts2框架的目的就是使用Action来调用业务逻辑模块。例如一个银行存款的业务逻辑模块,如代码3.3所示。代码3.3模拟一个银行业务的实现模块packagech3;publicclassBank{//定义银行账户privateStringaccounts;//定义操作金额privatedoublemoney;//属性的getter和setter方法publicStringgetAccounts(){returnaccounts;}publicvoidsetAccounts(Stringaccounts){this.accounts=accounts;}publicdoublegetMoney(){returnmoney;}publicvoidsetMoney(doublemoney){this.money=money;}//模拟银行存款方法publicbooleansaving(Stringaccounts,doublemoney){//调用DAO等模块读写数据库returndosomeing();}}上面实例在实际开发中没有任何意义,这里只是作为业务逻辑模块来说明,在执行saving(Stringaccounts,doublemoney)方法时,可以调用相应的数据库访问其他组件,来实现存款操作。使用Action调用该业务逻辑组件可以在execute()方法中实现,如代码3.4所示。代码3.4业务控制器Bank_Saving_Actionpackagech3;importjava.util.Map;importcom.opensymphony.xwork2.ActionContext;importcom.opensymphony.xwork2.ActionSupport;publicclassBank_Saving_ActionextendsActionSupport{//定义银行账户privateStringaccounts;//定义操作金额privatedoublemoney;publicStringexecute()throwsException{//创建Bank实例Bankbk=newBank();//调用存款方法if(bk.saving(accounts,money)){returnSUCCESS;}else{returnERROR;}}//属性的getter和setter方法publicStringgetAccounts(){returnaccounts;}publicvoidsetAccounts(Stringaccounts){this.accounts=accounts;}publicdoublegetMoney(){returnmoney;}publicvoidsetMoney(doublemoney){this.money=money;}Bank_Saving_Action演示了对银行存款业务逻辑组件的调用,这里是通过在Action中创建业务逻辑组件实例的方式实现的。在实际开发中,可以使用静态工厂获得业务逻辑组件的实例或者使用IoC容器来管理。Action中不实现任何业务逻辑,只是负责组织调度业务逻辑组件。调用关系如图3.3所示。图3.3调用业务逻辑组件★说明★业务控制器Action一般情况下不是直接创建业务逻辑组件实例,而是使用工厂模式或者是从Spring容器中获得业务逻辑组件实例,这样可以提高系统的性能。3.1.4视图组件Struts1只能支持JSP作为视图资源,而Struts2的进步之处就是可以使用其他视图技术,如FreeMarker、Velocity等。通过前面的学习和示例,读者会知道Action的返回结果只是一个简单的字符串,也就是一个逻辑上的视图名称,要与实际视图资源对应,必须通过配置文件来实现。在struts.xml配置文件中,每一个Aciton定义都有name和class属性,同时还要指定result元素。result元素指定了逻辑视图名称和实际视图的对应关系。每个result都有一个type属性,前面介绍的struts.xml中并没有显式指定type值,即使用了默认的type类型:dispatcher,该结果类型支持JSP所谓视图资源。对于Struts2的视图技术和result返回类型,后面将详细介绍。第四篇:电动车控制器的标准和电动车控制器购买需要注意事项电动车控制器的标准和

温馨提示

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

评论

0/150

提交评论