1个回答
展开全部
springmvcstruts2概明白 内容自中国络请认真看遍 Spring轻型容器(light-weight container)其核Bean工厂(Bean Factory)用构造我所需要M(Model)基础Spring提供AOP(Aspect-Oriented Programming, 面向层面编程)实现用提供非管理环境申明式事务、安全等服务;Bean工厂扩展ApplicationContext更加便我实现J2EE应用;DAO/ORM实现便我进行数据库发;Web MVCSpring Web提供Java Web应用框架或与其流行Web框架进行集 1)源框架 2)IoC(控制反转),类创建依赖关系写配置文件由配置文件注入实现松耦合 3)AOP 安全事务等于程序逻辑相独立功能抽取利用spring配置文件些功能插进实现按照面编程提高复用性 前言 近看Spring MVC源码,自MVC模式各种框架实现认识写给家看看,算总结.所,恳请家用怀疑眼光看待篇文章,假认识,麻烦指. MVC与WEB应用 MVC用我说.于现较熟Model-View-Control(MVC)框架言,其注意主要问题外乎面些: Model: 模型应该包含由视图显示数据.J2EE Web应用,数据通应该由普通javabean组.旦控制器选择视图,模型要包含视图相应数据.模型本身应该进步访问数据,应该业务象相联系. 模型要解决问题包括: l 封装要显示数据 l 我认模型要依赖于特定框架 l 定非javabean View: 视图负责显示模型包含信息,视图必解控制器或底层业务象具体实现 视图要解决问题包括: l 显示给定数据模型情况显示内容 l 应该包含业务逻辑 l 能需要执行显示逻辑,比颜色交替显示某数组各行 l 视图处理验证错误,数据验证应该由其组件完 l 视图应该处理参数,参数应该交由控制器集处理 Control: 控制器像MVC枢神经,许需要些助手帮助比解析视图,解析参数等.控制器访问业务象或者中国重要,比StrutsAction. 控制器要解决问题包括: l 检查抽取请求参数 l 调用业务象,传递请求获取参数 l 创建模型,视图讲显示应模型 l 选择合适视图发送给客户端 l 控制器 现框架 现已经MVC框架实现.比较流行应该StrutsWebwork Struts 流行web框架,几乎实际工业标准.除面讨论MVC模式应该优点外.些缺点: l 每Action,缓存起,再请求Action候新象,重复使用第象,意味着每Action必须线程安全 l 采用ActionForm封装表单数据,却能应String类型数据, 虽使用工具Commons Beanutils进行类型转化,仅仅提供象级别支持 l 严重依赖于Servlet API, 测试比较困难(版StrutsAction.execute签名讲换execute(ActionContext actionContext),依赖许严重) l 框架本身验证规则比较简单,般都依赖于Commons Validation进行验证 l 想Action前做些处理困难.甚至自写专门控制器 l 由于Struts都具体类继承,容易打破封装? l 提供各式各自定义标签,数据绑定太原始,使页面代码依赖于Struts特定框架,却规范,我觉致命 l 太面向JSP,尽管使用其视图技术能,使用候却便 Webwork 框架虽我没使用,却直关注发展 Webwork设计思想采用比Struts更聪明种式,技术角度说比Struts要高少.Command模式基础.XworkWebwork,且框架并依赖于Servlet API. Xwork提供核功能:拦截器(Interceptor),运行表单验证,类型转换,IoC容器等. WebWork建立Xwork,用于处理基于HTTP响应请求.用MapActionContext封装Session,Application等些Servlet象.解除Servlet API耦合. 仍完美: l 每请求都创建Action能些浪费.(Servlet引擎每请求创建象,没看性能影响?) l 项目越越候,配置文件能零乱.像支持配置文件 l 异处理Command模式值注意问题:我知道某特定命令能抛特定异,所execute()迫抛异,论异运行异,已检查异 Spring MVC Framework目标 面说些MVC原理,及现主流框架些问题,现看Spring何处理. Spring MVC框架根据同角色定义接口,问题依赖于Servlet API Spring MVC Framework些特点: l 基于组件技术.全部应用象,论控制器视图,业务象类都java组件.并且Spring提供其基础结构紧密集. l 依赖于Servlet API(目标虽,实现候确实依赖于Servlet) l 任意使用各种视图技术,仅仅局限于JSP l 支持各种请求资源映射策略 l 应易于扩展 我认评价框架,应该几原则 l 应该易于使用,易于测试 Spring 易于使用?我觉,尤其配置文件.恐怖情况,各种业务逻辑,基础设施许拥挤配置文件.事务处理些基础设施应该由容器管理发员,算些几配置文件,逻辑虽清晰,基础设置却暴露外边 Spring易于测试?Spring进行单元测试容易,测试起便 l 应该层提供接口 Spring提供接口,几乎每接口都默认抽象实现,每抽象实现都些具体实现,所扩展性点Spring疑优秀 l 框架内部框架外部应该区别待 框架内部复杂,使用起定要简单,Spring内部比较麻烦,隐藏种复杂性,使用起舒服,比设置bean属性.仅仅setPropertyValue(String propertyName, Object value)完,至于设置,Spring完全隐藏种复杂性 l 完善文档测试集 用说,外东西,都完善 Spring Web框架基本流程 知道Spring MVC框架,现看看流程 Spring MVC Framework至流程: web程序启候,ContextLoaderServlet应配置文件信息读取,通注射初始化控制器DispatchServlet. 接受HTTP请求候, DispatchServlet让HandlerMapping处理请求.HandlerMapping根据请求URL(定非要URL,完全自定义,非灵)选择Controller. DispatchServlet调用选定ControllerhandlerRequest,并且前调用Controllerinterceptor(假配置),返视图模型集合ModelAndView.框架通ViewResolver解析视图并且返View象,调用Viewrender返客户端 DispatcherServlet 框架控制器,具体类,通运行文象初始化.控制器本身并控制流程,Controller控制器,处理请求责任委托给应Controller. 控制器继承自抽象基类FrameworkServlet,属性webApplicationContext代表着web程序文,文象默认实现XML文件读取配置信息(其文件格式). WebApplicationContext其实beans包东西,包提供Spring整框架基础结构,我析包内容.现仅仅需要知道WebApplicationContext代表web应用文象. 现看看DispatchServlet何工作: DispatchServlet由于继承自抽象基类FrameworkServlet,FrameworkServletdoGet(),doPost()调用serviceWrapper(),跳serviceWrapper()看,结发现具体实现委托给doService(request, response); .所现已经清楚, DispatchServlet真实现功能doService() . 特别, FrameworkServletinitFrameworkServlet()控制器初始化,用初始化HandlerMappings类象,延迟类实现.其实Template模式实现.don’t call us, we will call u.总看,Spring通实现控制反转:用框架控制流程,用户 跳doService()看究竟,发现真工作另助手函数doDispatch(request, response),没办,继续看,发现两行代码 HandlerExecutionChain mappedHandler = null; mappedHandler = getHandler(processedRequest, false); 看HandlerExecutionChain源码发现其实ControllerInterceptors进行包装; getHandler()HandlerMappings(List,存放handlerMapping象)取应handlerMapping象, 每HandlerMapping象代表ControllerURL映射(其实运行候HandlerExecutionChainURL映射,HandlerExecutionChain象其实Controllerinterceptors包装器,HandlerMapping看ControllerURL映射).HandlerMapping通配置文件运行注射进,般SimpleUrlHandlerMapping类 取HandlerMapping象,继续向看,发现: if (mappedHandler.getInterceptors() != null) { for (int i = 0; i < mappedHandler.getInterceptors().length; i++) { HandlerInterceptor interceptor = mappedHandler.getInterceptors()[i]; if (!interceptor.preHandle(processedRequest, response, mappedHandler.getHandler())) { triggerAfterCompletion(mappedHandler, interceptorIndex, processedRequest, response, null); return; } interceptorIndex = i; } } 调用Controller拦截器,原理句: interceptor.preHandle(processedRequest, response, mappedHandler.getHandler(), mv); preHandle传入mappedHandler.getHandler()参数实现递归调用!interceptor.postHandle般.handleRequest调用 继续看: HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler()); mv = ha.handle(processedRequest, response, mappedHandler.getHandler()); 发现ControllerhandleRequest真操作中国给HandlerAdapterhandle,并且返ModelAndView,我想增加层意义应该解除ControllerDispatchServlet耦合吧. 接着简单,调用render(),面由ViewResoler解析视图名,再调用视图象render合适视图展现给用户 ,控制器流程OVER HandlerMapping 通使用HandlerMapping,控制器用URL某Controller进行标准映射,实现URL映射具体类UrlHandlerMapping. Spring允许我自定义映射,比通Session,cookie或者用户状态映射.切仅仅需要实现HandlerMapping接口已.URL映射已经能满足部要求 Controller Controller 类似StructsAction, Controller接口handleRequest(),放ModelAndView象,同设计目标所说,每Controller都java组件,所文环境任意配置,组件属性都初始化候配置.Spring自提供几具体实现.便我使用 ViewResolver Controller通返包含视图名字视图象ModelAndView象.彻底解除控制器视图间耦合关系,并且提供际化支持. 配置文件: welcomeView.class = org.springframework.web.servlet.view. InternalResourceView welcomeView.url=/welcome.jsp welcomeView.class = org.springframework.web.servlet.view.xslt. XsltView welcomeView.url=/xslt/default.xslt View java组件,做任何请求处理或业务逻辑,仅仅获取模型传递数据,并数据显示.面 render按照流程工作: l 设置模型数据request作用域 l 取视图URL l 转发应URL 总结: Springweb框架优秀框架,走马观花析Spring工作流程些关键类,并没深入探讨背所体现思想,优缺点等东西.些都等再说
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询