您好,欢迎访问三七文档
ssh学习总结2009-03-2117:371.典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。2.数据服务层:orcale;其数据服务层实现数据的存储。3.中间层(业务逻辑层Spring+Hibernate):中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。由spring来负责!其目的就是通过编写接口配置applicationContext.xml实现ioc控制反转!控制反转就是让高层去调用底层,而不去关心我底层是怎么实现的(canorcannot而不是howorwhy)。采用工场的模式也可以实现IOC,但需要编写大量的工场,每一个接口都需要对应一个工场。所以相当费时费力。struts:先来说说以前的开发的方式把!我shi根据STRUTS开发了自己的MVC框架,其实就是STRUTS的简化版本。主要功能就是页面的按钮的方法或者说事件方法和后台METHOD绑定,根据用户的业务请求触发的一系列操作。大概的整个操作流就是:页面方法-SERVLET逻辑控制器通过取得的页面METHOD(也就是struts2的ACTION),对号入座,初始化对应的FORM,然后对提交数据进行封装-指定类的PUBLIC方法中执行一系列逻辑操作(解析FORM,封装业务DTO)-业务DAO中进行业务处理,然后持久化到数据库中。简化视图就是:JSP-FILTER-SERVLET容器-FORM-LOGIC-SERVICE-DAO.个人感觉结构清晰明了。不知道其他大虾如何看!!以前有稍微了解过SSH但是没有太深入,因为感觉SSH实在太复杂了。把简单的问题复杂化了。除了配置还是配置,继承还是继承,说实在的。让初学者来学的话,门槛真的有点高了。不知道大家对于开发框架有什么看法呢?看了几天有点晕,但是的确这些框架够OO,学到了不少东西。说说开发吧!系统已启动一堆的DEBUG信息,太能生了(是不是该计划生育了呢?)。不得不把自己的LOG4J的级别调成INFO来开发(反正只是测试的项目)。由于还没有深入的使用还没有发现SPRING真正带来了那些好处,真的有必要SPRING吗?只知道大家都说他是IOC和AOP,针对是业务上的管理。再说说HIBERNATE给我一个比较好的感觉就是对象的增删查改还不错。如果其他具体的业务感觉不怎么地。发现很多人都SQL还是自己去拼装,似乎不是HIBERNATE所说的什么面向对象的持久化之类的,个人感觉还不如使用IBATIS呢?还有发现SSH很多拦截器==之类的过滤操作,这些会不会太影响性能了呢?反正目前还是费解中。大家是否觉得这些框架是否该减减肥了呢?hibernate:hibernate通过数据对象化,并按照业务逻辑配置合适的级联关系,已经不仅仅是能很方便的对单个对象进行数据库操作,同时可以方便的获取级联对象和实体对象的保存。而实体对象和数据库的映射又是另外一层约束(业务是可以在这里加上字长,是否为空的一些简单约束),同时hsql基于对象的思想,这是hibernate在oo上的出色的亮点。同时hibernate拥有数据缓存,在一次数据会话中(一个session的生命周期)存在一个一级缓存,可以让业务操作在会话中获取缓存中的数据,而在session结束的时候再对数据库进行批量处理,这样减少了对数据的操作压力。二级缓存是在单机服务器中加入ehcached的cache,cache的生命周期长期存在,可提供给单机多个数据库会话共享二级缓存,这样就可以在跨session的范围内减少了数据库的访问,但用于事务和session的绑定,导致这块的代码需要很好的详细涉及,并且有比较好的并发思考能力。在缓存上面已经有强人将hibernate二级缓存的实现替换成可作为cache服务器的memcached,这样可以支持多台服务器共享二级数据缓存(这个场景比较适合针对查询,如果有事务会引入太多的复杂度,一般这样的情况共享缓存,在事务上还是会首先选择垂直分布的方式来分摊事务)。(在减少数据库操作方面最牛的是oracle的产品内存集群数据库)但hibernate在做复杂的业务查询的时候,由于会将对象其他属性也获取出来,得道较多的不需要的数据,虽然后来的hibernate在这个方面做了优化,但还是推荐用nativesql来做,没有事务时避开缓存和多余数据是效率的保证。ibetis使用起来十分简单,而且在sql上的配置具有更多的灵活性,并把sql区分模块集中,可以很大程度的分离关注点,(虽然hibernate支持properties配置,但没有它灵活)Spring的IOC控制反转如果是说在配置参数上提供了方便不用编译,那就太片面了。它强大的是factoryBean的factory的创建,将自己手动创建的过程交给了context来管理factoryBean,通过依赖注入来初始化这些factoryBean,并由factoryBean来生产我们需要的对象。至于Spring的AOP,AOP是一个思想,很多的东西都使用了这个思想,而Spring是提供了一些实现(例如支持事务的AOP,例如提供AOP基础代码,之需要我们指定目标对象,拦截的前增强操作,后增强操作和切入点),并做了一些我们会常用的aopTemplete类,使用这些现成的类会很大程度的减少我们自己的代码量,和提高代码的安全性,减少问题的出现范围。而理解事务和处理事务生命事务,解决资源绑定的代码并不是一个很容易的事情,使用现有的代码无疑是不重复发明轮子而又只需要花费少些了解API代价的上上之选。spring:方到用时才明了。SpringIOC:假设你现在有个逻辑模块用来计算权值,现在你需要换一下,但是以前那个还得保留,比如原来计算是+1现在要+10。如果用了IOC,那么你只需要在Spring配置文件里讲实现类改一下即可。(不过通常用来讲述IOC好像用的例子是:你要换数据库操作方式吗?从Hibernate换成iBatis)SpringAOP:可对方法拦截,比如,某些用户有权限使用这个方法吗?用AOP拦截吧。(不过通常用来讲述AOP的好像用的例子是:你要记录日志总不能在每个文件里都写吧?)Hibernate:理解面向对象思想,你就理解了Hibernate到底是干嘛的。至于很多人还是用的SQL查询那是他们不想用面向对象方法解决问题。Struts、spring、Hibernate在各层的作用1)struts负责web层.ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,再Forward到对应的网页。在struts-config.xml中定义action-mapping,ActionServlet会加载。2)spring负责业务层管理,即Service(或Manager).1.service为action提供统计的调用接口,封装持久层的DAO,。2.可以写一些自己的业务方法。3.统一的javabean管理方法4.声明式事务管理5.集成Hiberante3)Hiberante,负责持久化层,完成数据库的crud操作hibernate为持久层,提供OR/Mapping。它有一组.hbm.xml文件和POJO,是跟数据库中的表相对应的。然后定义DAO,这些是跟数据库打交道的类,它们会使用PO。在struts+spring+hibernate的系统中,对象的调用流程是:jsp-Action-Service-DAO-Hibernate。数据的流向是ActionFormBean接受用户的数据,Action将数据从ActionFromBean中取出,封装成VO或PO,再调用业务层的Bean类,完成各种业务处理后再forward。而业务层Bean收到这个PO对象之后,会调用DAO接口方法,进行持久化操作。
本文标题:ssh学习总结
链接地址:https://www.777doc.com/doc-5590801 .html