请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

java知识分享-我的java记事本

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1008|回复: 0

用自己的话简要阐述struts2的执行流程。

[复制链接]

131

主题

132

帖子

581

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
581
发表于 2015-3-16 17:54:29 | 显示全部楼层 |阅读模式
Struts 2框架本身大致可以分为3个部分:
核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。
核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。

业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。   
Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。
基本简要流程如下:
1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被FilterDispatcher接收。
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。

1 Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因
  不是  声明局部变量,或者扩展RequestProcessor,让每次都创建一个Action,或者在spring中用
  scope="prototype"来管理   
2.MVC,分析一下struts是如何实现MVC的
m:JavaBean 或结合 EJB 组件或者pojo构成  c:Action 来实现   v:一组 JSP 文件及其标签构成。  

3.struts中的几个关键对象的作用(说说几个关键对象的作用)  
Action:控制器类,ActionForm:表单对象,DynaValidatorForm:动态form,ActonMapping:配置文件中action节点的信息......   

4.说说AOP和IOC的概念以及在spring中是如何应用的
  AOP:面向方面编程,ioc:依赖注入;声明式事务和编程式事务积极一些通用部分   

5.Hibernate有哪几种查询数据的方式 hql查询,sql查询,条件查询  

6.load()和get()的区别
hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,load默认支持延迟加载,在用到对象中的其他属性数 据时才查询数据库,但是万一数据库中不存在该记录,只能抛异常ObjectNotFoundEcception;所说的load方法抛异常是指在使用该对 象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在 load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理(load时候之查询一级缓存,不存在则创建代理)。get() 现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null ;
而对于get方法,hibernate一定要获取到真实的数据,否则返回null。


7.谈谈hibernate的延迟加载和openSessionInView   
延迟加载要在session范围内,用到的时候再加载;
opensessioninview是在web层写了一个 filter来打开和关闭session,这样就表示在一次request过程中session一直开着,保证了延迟  加载在session中的这个前提。

8.spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。
声明事务和编程事务  
隔离级别:
- DEFAULT使用数据库默认的隔离级别  
- READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题  
- READ_COMMITTED会出现重复读和幻影读  
- REPEATABLE_READ会出现幻影读  
- SERIALIZABLE最安全,但是代价最大,性能影响极其严重  和传播行:  
- REQUIRED存在事务就融入该事务,不存在就创建事务
- SUPPORTS存在事务就融入事务,不存在则不创建事务  
- MANDATORY存在事务则融入该事务,不存在,抛异常
  - REQUIRES_NEW总是创建新事务
   - NOT_SUPPORTED存在事务则挂起,一直执行非事务操作  
   - NEVER总是执行非事务,如果当前存在事务则抛异常
  - NESTED嵌入式事务

9.Hibernate中的update()和saveOrUpdate()的区别.
摘自hibernate说明文档:  saveOrUpdate()做下面的事:   如果对象已经在本session中持久化了,不做任何事   如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常  如果对象没有持久化标识(identifier)属性,对其调用save()   如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()  如果对象是附带版本信息的(通过 <version>或 <timestamp>) 并且版本属性的值表明其是一个新实例化的对象,save()它。 否则update() 这个对象

10.Spring对多种ORM框架提供了很好的支持,简单描述在Spring中使用Hibernate的方法,并结合事务管理。

   getHiberanteTemplate里面提供了save,update,delete,find等方法。
   简单说一个:如果配置了声明式事务,当执行getHibernateTemplate的各种方法的时候,事务会  自动被加载   如果没有配置事务,那么以上操作不会真正的被同步到数据库,除非配置了hibernate的 autocommit=true  8.spring的事务有几种方式?谈谈spring事务的隔离级别和传播行为。
   spring事务分两种形式,声明式事务和编程式事务,spring提供了一个事务的接口  PaltformTractionManager接口,针对不同的事务,spring进行了不同的实现,对hibernate事务 的实现HIbernateTractionManager,对JDBC的JdbcTractionManager,  DataSourceTractionManager以及JdoTractionManager。接口platformTractionManager提供了三  个方法,获取事务,提交和回滚的方法。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|java知识分享 ( 闽ICP备14003021号-4   

GMT+8, 2019-7-19 16:47 , Processed in 0.073167 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
声雨竹官方旗舰店    制砂机    我爱辅助网    煎药机    束丝机    两化融合    深圳seo    网络公关