码迷,mamicode.com
首页 > 其他好文 > 详细

SSH综合

时间:2018-01-05 20:46:59      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:服务   完整   elements   配置信息   替换   osc   发送请求   nstat   核心   

 
技术分享图片

 

 
技术分享图片
1.项目中如何体现Spring中的切面编程,举例说明。
面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面。在切面
上声明一个通知(Advice)和切入点(Pointcut); 通知: 是指在切面的某个特定的连
接点(代表一个方法的执行。通过声明一个org.aspectj.lang.JoinPoint类型的参
数可以使通知(Advice)的主体部分获得连接点信息。)上执行的动作。通知中定
义了要插入的方法。切入点:切入点的内容是一个表达式,以描述需要在哪些对象
的哪些方法上插入通知中定义的方法。
项目中用到的Spring中的切面编程最多的地方:声明式事务管理。
a、定义一个事务管理器
b、配置事务特性(相当于声明通知。一般在业务层的类的一些方法上定义事务)
c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)
 
spring的事务如何配置 spring的声明式事务配置:
1. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> /WEB-INF/classes/hibernate.cfg.xml
2. 配置事务管理器 class="org.springframework.orm.hibernate3.HibernateTransactionManager">
3. 配置事务特性
4. 配置哪些类的哪些方法配置事务
 transaction有那几种实现(事务处理)(Spring) 在Spring中,事务处理主要有两种方式 (1) 代码控制事务 在程序中引入新的模版类,这个类封装了事务管理的功能 (2) 参数配置控制事务,在Application-Context.xml增加一个事务代理
 
2. 谈谈你mvc的理解
MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式, 它强制性的把应用程序的输入、处理和输出分开。 MVC中的模型、视图、控制器它们分别担负着不同的任务。 视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用 户的输入。视图不进行任何业务逻辑处理。 模型: 模型表示业务数据和业务处理。相当于JavaBean。一个模型能为多个视图提 供数据。这提高了应用程序的重用性 控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去 处理请求。 然后根据处理的结果调用相应的视图来显示处理的结果。 MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理, 并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并通过视图呈现 给用户。
3. 项目中为什么使用SSH 1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使 开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运 用,则能大大提高开发效率。 2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象 关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。 3. 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)和AOP构 架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模 块化的很好,允许你根据自己的需要选择使用它的某一个模块; 采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理 (Transcation Managment),等等
4. struts的处理流程。
一、ActionServlet的初始化 ActionServlet作为Struts组件的前端控制器,由于web.xml的相应配置:
0 在应用一加载时即会被实例化并调用其init方法,init方法所做的主要工作有二: 1. 加载struts配置文件,并创建用于封装配置信息的ModuleConfig对象 2. 加载资源文件,并创建用于封装资源文件的MessageResources对象 需要注意两点:如果web.xml有多模块配置,将创建多个ModuleConfig对象和 MessageResources对象分别 用于封装各个模块的struts配置文件和资源文件。 针对各个模块所创建的ModuleConfig对象和MessageResources对象将存储在 ServletContext中,对应的属 性名中有该模块名称的相应标识。 另外,如果有相应配置的话,init方法还将初始化数据源和PlugIn
二、ActionServlet的process 所有形如*.do的请求(根据web.xml中的相关配置)将提交给ActionServlet,最终 将调用其process方法 。process方法的主要工作有三: 1. 根据请求信息获知所请求的模块名称,从ServletContext中获得与请求模块对 应的的ModuleConfig对 象,并存储到request中。 2. 根据模块信息获得相应的RequestProcessor对象,一个模块对应一个 RequestProcessor对象, RequestProcessor对象将关联与所属模块对应的ModuleConfig对象。 3. 调用RequestProcessor对象的process方法,将request和response作为参数传 递给它。
三、RequestProcessor的process RequestProcessor对象的process方法的主要工作有五步: 1. 调用自己的 processPreprocess(request, response)方法,该方法不进行任何 操作,用于子类重写 扩展其功能。 2. 获得与请求地址所匹配的ActionMapping对象,AcionMapping对象用于封装一个特定acion的配置信息 。 3. 根据ActionMapping中的配置信息获得ActionForm对象(该对象将缓存到 request或session中),并 将表单数据填充到ActionForm中,然后根据ActionMapping的配置决定是否验证 ActionForm,如果验证, 将调用ActionForm的 validate方法,若其返回的ActionErros对象中包含 ActionMessage对象则表示验证 失败,将转向action配置信息 input属性所指示的地址。 4. 如果ActionForm无需验证或验证通过将创建并缓存与请求地址匹配的Action对 象,将ActionMapping 对象、ActionForm对象、request和response作为参数调用其execute方法。 5. 根据Action对象的execute方法返回的ActionForward对象,将请求转发或重定 向到该ActionForward 所封装的地址。
5. Struts/webwork 的工作机制,它有哪些标签
Struts 2框架的大致处理流程如下: 浏览器发送请求,例如请求/mypage.action、/reports/myreport.pdf等。 核心控制器FilterDispatcher根据请求决定调用合适的Action。 WebWork的拦截器链自动对请求应用通用功能,例如workflow、validation或文件 上传等功能。 回调Action的execute方法,该execute方法先获取用户请求参数,然后执行某种数 据库操作,既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上, 因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求。 Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图 像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也 支持Velocity、FreeMarker等模板技术。
6.什么是Hibernate的并发机制?怎么去处理并发问题?
Hibernate并发机制: a、Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作 单元(即单个事务,单个线程),它通常只使用一次, 然后就丢弃。 如果一个Session 实例允许共享的话,那些支持并发运行的,例如Http request,session beans将会导致出现资源争用。 如果在Http Session中有hibernate的Session的话,就可能会出现同步访问Http Session。只要用户足够快的点击浏览器的“刷新”, 就会导致两个并发运行的线程使用同一个Session。 b、多个事务并发访问同一块资源,可能会引发第一类丢失更新,脏读,幻读,不可 重复读,第二类丢失更新一系列的问题。解决方案:设置事务隔离级别。
7. update()和saveOrUpdate()的区别? update()和saveOrUpdate()是用来对跨Session的PO进行状态管理的。 update()方法操作的对象必须是持久化了的对象。也就是说,如果此对象在数据库
中不存在的话,就不能使用update()方法。 saveOrUpdate()方法操作的对象既可以使持久化了的,也可以使没有持久化的对 象。如果是持久化了的对象调用saveOrUpdate()则会 更新数据库中的对象;如果是未持久化的对象使用此方法,则save到数据库中。
8. hibernate的三种状态之间如何转换 
技术分享图片

 

9. Hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的 对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也 可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用 EJB的J2EE架构中取代CMP,完成数据持久化的重任。 Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、 Transaction、Query和Configuration。这5个核心接口在任何开发中都会用到。通 过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。下面对这五 个核心接口分别加以介绍。
?Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是 完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对 象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。 这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将 HttpSesion对象称为用户session。
?SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数 据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是 SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个 SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个 SessionFactory。
?Configuration接口:Configuration接口负责配置并启动Hibernate,创建 SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先 定位映射文档位置、读取配置,然后创建SessionFactory对象。
?Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发 人员也可以设计编写自己的底层事务处理代码。
?Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可 以使用HQL语言或SQL语句两种表达方式。
10. 缓存管理 Hibernate 中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是 属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行 干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范 围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
一级缓存和二级缓存比较每个事务都有单独 的第一级缓存进程范围或集群范围,缓存被同一个进程或集群范围内的所有事务共 享 并发访问策略由于每个事务都拥有单独的第一级缓存,不会出现并发问题, 需提供并发访问策略。由于多个事务会同时访问第二级缓存中相同数据,因此必须提 供适当的并发访问策略,来保证特定的事务隔离级别。处于一级缓存中的对象永远不会过期,除非应用程序显式清空缓存或者 清除特定的对象必须提供数据过期策略,如基于内存的缓存中的对象的最大数目, 允许对象处于缓存中的最长时间,以及允许对象处于缓存中的最长空闲时间 物理 存储介质内存内存和硬盘。对象的散装数据首先存放在基于内在的缓存中,当内存 中对象的数目达到数据过期策略中指定上限时,就会把其余的对象写入基于硬盘的 缓存中。缓存的软件实现 在Hibernate的Session的实现中包含了缓存的实现由第三方提供。启用缓存的方式只要应用程序通过Session接口来执行保 存、更新、删除、加载和查询数据库数据的操作,Hibernate就会启用第一级缓 存,把数据库中的数据以对象的形式拷贝到缓存中,对于批量更新和批量删除操 作,如果不希望启用第一级缓存,可以绕过Hibernate API,直接通过JDBC API来 执行指操作。用户可以在单个类或类的单个集合的粒度上配置第二级缓存。如果类 的实例被经常读但很少被修改,就可以考虑使用第二级缓存。 第一级缓存的物理介质为内存,由于内存容量有限,必须通过恰 当的检索策略和检索方式来限制加载对象的数目。Session的evit()方法可以显式 清空缓存中特定对象,但这种方法不值得推荐。 第二级缓存的物理介质可以是内存和硬盘,因此第二级缓存可以存放大量的数据,数据过期策略的 maxElementsInMemory属性值可以控制内存中的对象数目。管理第二级缓存主要包 括两个方面:选择需要使用第二级缓存的持久类,设置合适的并发访问策略:选择 缓存适配器,设置合适的数据过期策略。 2. 一级缓存的管理: 当应用程序调用Session的save()、update()、 savaeOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()或 filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该 对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变 化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存 中所有持久化对象。
二级缓存的管理:
3.1. Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。 2) 把获得的所有数据对象根据ID放入到第二级缓存中。 3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查; 查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把 结果按照ID放入到缓存。 4) 删除、更新、增加数据的时候,同时更新缓存。 Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query Cache。
3.2. 什么样的数据适合存放到第二级缓存中? 1 很少被修改的数据 2 不是 很重要的数据,允许出现偶尔并发的数据 3 不会被并发访问的数据 4 参考数据, 指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实 例引用,实例极少或者从来不会被修改。
3.3. 不适合存放到第二级缓存的数据? 1 经常被修改的数据 2 财务数据, 绝对不允许出现并发 3 与其他应用共享的数据。
3.4. 常用的缓存插件 Hibernater 的二级缓存是一个插件,下面是几种常用 的缓存插件: EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘, 对Hibernate的查询缓存提供了支持。 OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘, 提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。 SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。 JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对 Hibernate的查询缓存提供了支持。
3.5. 配置二级缓存的主要步骤: 1) 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。 这是最值得认真考虑的步骤。 2) 选择合适的缓存插件,然后编辑该插件的配置文件。
 11. 你一般用spring做什么? 控制反转IOC AOP 2. spring中的哪个类的哪个方法可用于获取bean 3. spring是什么?根据你的理解详细谈谈你的见解。 ◆目的:解决企业应用开发的复杂性 ◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 ◆范围:任何Java应用 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以 在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道 的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的 特定类
◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应 用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象 自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找 依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业 务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开 发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚 至是意识)其它的系统级关注点,例如日志或事务支持。
◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一 种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型 (prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新 的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级 的EJB容器,它们经常是庞大与笨重的,难以使用。
◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中, 应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础 功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代 码。它们也为Spring中的各种模块提供了基础支持。
 
12.spring事务管理
Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。 
Spring事务管理器的接口是org.springframework.transaction.PlatformTransactionManager,通过这个接口,Spring为各个平台如JDBC、Hibernate等都提供了对应的事务管理器,但是具体的实现就是各个平台自己的事情了。
 
Public interface PlatformTransactionManager()...{  
    // 由TransactionDefinition得到TransactionStatus对象
    TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
    // 提交
    Void commit(TransactionStatus status) throws TransactionException;  
    // 回滚
    Void rollback(TransactionStatus status) throws TransactionException;  
    }
 
如果应用程序的持久化是通过Hibernate实习的,那么你需要使用HibernateTransactionManager。对于Hibernate3,需要在Spring上下文定义中添加如下的<bean>声明:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

 

sessionFactory属性需要装配一个Hibernate的session工厂,HibernateTransactionManager的实现细节是它将事务管理的职责委托给org.hibernate.Transaction对象,而后者是从Hibernate Session中获取到的。当事务成功完成时,HibernateTransactionManager将会调用Transaction对象的commit()方法,反之,将会调用rollback()方法。进一步可参考http://www.mamicode.com/info-detail-1248286.html

 

 

spring 的优点?

1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 

2.可以使用容易提供的众多服务,如事务管理,消息服务等 

3.容器提供单例模式支持 

4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 

5.容器提供了众多的辅助类,能加快应用的开发 

6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 

7.spring属于低侵入式设计,代码的污染极低 

8.独立于各种应用服务器 

9.spring的DI机制降低了业务对象替换的复杂性 

10.Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部 

 

什么是DI机制? 

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 

 

因此也称为依赖注入。 

spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 

设置注入的优点:直观,自然 

构造注入的优点:可以在构造器中决定依赖关系的顺序。 

 

什么是AOP? 

面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 

1.面向切面编程提供声明式事务管理 

2.spring支持用户自定义的切面 

 

aop框架具有的两个特征: 

1.各个步骤之间的良好隔离性 

2.源代码无关性 

面向切面编程(aop)是对面向对象编程(oop)的补充, 

面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。 

AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象, 

是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。 

 

SSH综合

标签:服务   完整   elements   配置信息   替换   osc   发送请求   nstat   核心   

原文地址:https://www.cnblogs.com/wzj4858/p/8206472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!