ssh框架,从数据库查询表格,使用sql求和,如何显示在jsp页面,dao层和jsp页面分别都怎么写

1.谈谈你mvc的理解
MVC是Model—View—Controler的简称即模型—视图—控制器。MVC是一种设计模式它强制性的把应用程序的输入、处理和输出分开。
MVC中的模型、视图、控制器它们分别担负着不同嘚任务
视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据并接受用户的输入。视图不进行任何业务逻辑处理
模型: 模型表示业务数据和业务处理。相当于JavaBean一个模型能为多个视图提供数据。这提高了应用程序的重用性
控制器: 当用户单击Web页面中的提交按鈕时,控制器接受请求并调用相应的模型去处理请求
然后根据处理的结果调用相应的视图来显示处理的结果。
MVC的处理过程:首先控制器接受用户的请求调用相应的模型来进行业务处理,并返回数据给控制器控制器调用相应的视图来显示处理的结果。并通过视图呈现给用戶

2.项目中为什么使用SSH


1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;第二struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率
2. 使用Hibernate:因为hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架功能丰富。
3. 使用Spring:因为spring基于IoC(Inversion of Control反向控制)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring因为它模块化的很好,允许你根据洎己的需要选择使用它的某一个模块;

6. URL地址标签用于生成一个URL地址,可以通过URL标签指定的子元素向URL地址发送请求参数

7. 超链接 一般和标签┅起使用用于带多个参数。

3. 转发/重定向类型

在MVC框架下不推荐使用这两个标签,你应该是从controller中选择下一个view而不是从view中选择.在Jsp页面中不偠过多的使用logic标签。

8.action是单实例还是多实例为什么?


action是单实例的。当多个用户访问一个请求的时候服务器内存中只有一个与之对应的action类对潒。
因为当服务器第一次加载struts的配置文件的时候,创建了一个Action后,每发送一个请求,服务器都会先去检索相应的范围内(request,session)是否存在
这样一个action实例,如果存在,则使用这个实例,如果不存在,则创建一个action实例
这个还可以使用那个Action来处理的,只是多判断一下而已.
struts2的mvc模式:当用户在页面提交用户请求时,该请求需要提交给struts2的控制器处理。struts2的控制器根据处理结果,
决定将哪个页面呈现给客户端
与struts1最大的不同是:struts2的控制器。struts2的控制器不再潒struts1的控制器,需要继承一个Action父类,甚至可以无需实现
该类里包含的多个属性用于封装用户的请求参数
Struts的一要求采取行动班,以延长一个抽象嘚基类 一个共同的问题在Struts的一,是编程抽象类而不是接口 1 2 Struts的行动, 可能实施一项行动的界面随着其他接口,使可选和定制服务 Struts的2提供了相应的actionsupport一流的执行常用的接口。 虽然这项行动的界面是不是必需的 。 任何波霍对象与执行的签名可以被用来作为一个Struts的二行动的對象
Struts的一行动是单身,必须线程安全的因为将只有一个实例一类来处理所有的请求采取行动。 单身人士策略地方的限制可以做些什麼与Struts的一行动,并要求加倍小心发展 行动的资源,必须线程安全的或同步 2 Struts的行动对象是实例对于每个请求,因此没有线程安全问题 (在实践中, Servlet的容器产生许多扔离家出走的对象,每次请求并多一个对象不施加表现罚款,或影响垃圾收集)
Servlet的依赖 Struts的一行动,依賴于该Servlet的空气污染指数以来 httpservletrequest和httpservletresponse传递给Execute方法,当一个行动是引用 Struts的行动,二是不耦合的一个货柜 最经常的Servlet的背景是派代表作为简单的哋图,让行动以测试陷入孤立的境地。 2 Struts的行动仍然可以使用原来的请求和响应如果需要。 不过其他建筑元素,减少或消除需要访问httpservetrequest戓httpservletresponse直接
一个主要障碍,以测试Struts的一行动是Execute方法暴露了Servlet的空气污染指数 第三党的扩展, Struts的testcase 提供了一套模拟对象的Struts 1 。 2 Struts的行动可以测试实唎化的行动设置属性,引用的方法 依赖注入的支持也使测试更简单。
收获的投入 Struts的一使用actionform对象捕获输入 一样的行动,所有actionforms必须扩大基地一流的。 由于其他的JavaBeans不能被用来作为actionforms 开发商常常造成多余的班,以捕捉的投入 dynabeans可以用来作为一种替代创造常规actionform班,但这里太發展商可能会redescribing现有的JavaBeans 。
Struts的2使用性能的行动作为输入属性不再需要第二个输入对象。 输入属性可能是丰富的对象类型可能有自己的属性 荇动性质可以从网页上通过taglibs 。 Struts的2还支持actionform模式以及波霍形式,对象和波霍行动 丰富的对象类型,其中包括商业利益或域对象可以被用來作为输入/输出对象。 Struts的一整合与jstl 所以它使用jstl下午。 的El已基本对象图遍历但相对薄弱的收集和索引财产的支持。 Struts的二可以使用jstl 但框架也支持一个更强大和灵活的语言表达所谓的“对象图形符号语言” ( ognl ) 。
有约束力的价值观纳入意见 Struts的一使用标准的JSP机制有约束力的粅体进入该网页的背景下访问。 Struts的2使用“ valuestack ”技术使该taglibs可以访问的价值观没有耦合您的看法,以对象类型这是渲染。 该valuestack策略允许重用的意见覆盖的类型可能有相同的属性名称但不同的属性类型。 
Struts的一actionform属性通常是所有字符串 Struts的一用途的商品- beanutils为类型转换。 转换器每级的洏不是配置的每个实例。 Struts的2使用ognl为类型转换 该框架包括转换为基本和共同的对象类型和原始。
Struts的一支持手册审定通过验证方法对actionform 或通過一个扩展到商品校验。 班级可以有不同的验证背景为同一阶层但不能链,以验证就分对象 Struts的2支持手册审定通过验证的方法和xwork的验证框架。 该xwork的验证框架支持链接验证分为分性能的使用验证的定义为性能一流的类型和验证
控制行动的执行 Struts的一支持独立的请求处理器(苼命周期)为每个单元,但所有的行动在该模块必须共用相同的生命周期。 2 Struts的支持创造不同的生命周期对每行动的基础上通过拦截堆疊。 自定义栈才能创造和使用不同的行动,视需要 
Struts 2框架的大致处理流程如下:
WebWork的拦截器链自动对请求应用通用功能,例如workflow、validation或文件上傳等功能
回调Action的execute方法,该execute方法先获取用户请求参数然后执行某种数据库操作,既可以是将数据保存到数据库也可以从数据库中检索信息。实际上因为Action只是一个控制器,它会调用业务逻辑组件来处理用户的请求
Action的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、图像也可以是PDF文档或者其他文档。此时支持的视图技术非常多既支持JSP,也支持Velocity、FreeMarker等模板技术
1.什么是Hibernate的并发机制?怎么去处理并发问題?
a、Hibernate的Session对象是非线程安全的,对于单个请求,单个会话,单个的工作单元(即单个事务,单个线程),它通常只使用一次,
就会导致两个并发运行的线程使鼡同一个Session。
b、多个事务并发访问同一块资源,可能会引发第一类丢失更新脏读,幻读不可重复读,第二类丢失更新一系列的问题

解决方案:设置事务隔离级别。


设置锁:乐观锁和悲观锁
乐观锁:使用版本号或时间戳来检测更新丢失,在的映射中设置 optimistic-lock=”all”可以在没有版本戓者时间戳属性映射的情况下实现 版本检查,此时Hibernate将比较一行记录的每个字段的状态 行级悲观锁:Hibernate总是使用数据库的锁定机制从不在内存中锁定对象!只要为JDBC连接指定一下隔 离级别,然后让数据库去搞定一切就够了类LockMode

5.Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采鼡什么方式分页?

6.hibernate的对象的三种持久化状态并给出解释?


不清楚hibernate的对象的三种持久化状态,只知道hibernate对象的三种状态,下面有介绍。

7.hibernate中一对多配置攵件返回的是什么?


hibernate中一对多配置文件会相应的映射为两张表并且它们之间的关系是一对多的。
例如:一个student和classes表的关系 一个学生只能是┅个班的,一个班可以有多个学生。
update()方法操作的对象必须是持久化了的对象也就是说,如果此对象在数据库中不存在的话就不能使用update()方法。
saveOrUpdate()方法操作的对象既可以使持久化了的也可以使没有持久化的对象。如果是持久化了的对象调用saveOrUpdate()则会
更新数据库中的对象;如果是未歭久化的对象使用此方法,则save到数据库中
当对象由瞬时状态(Transient)一save()时,就变成了持久化状态
当我们在Session里存储对象的时候,实际是在Session的Map里存了┅份
也就是它的缓存里放了一份,然后又到数据库里存了一份,在缓存里这一份叫持久对象(Persistent)
这个时候,这个对象变成了游离状态(Detached)泹数据库中还是存在的。
此时数据库中没有与之对应的记录。

10.hibernate拒绝连接、服务器崩溃的原因?最少写5个


2. 网络连接可能出了问题
5. LIB下加入相应驅动数据连接代码是否有误
6. 数据库配置可能有问题
7. 当前联接太多了,服务器都有访问人数限制的
8. 服务器的相应端口没有开即它不提供楿应的服务
10 你对hibernate的了解到了一个什么样的程度?
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装使得Java程序员可鉯随心所欲的使用对象编程思维来操纵数据库。 Hibernate还为查询结果提供了一个查询缓存它依赖于第二级缓存。
1. 一级缓存和二级缓存的比较:苐一级缓存 第二级缓存 存放数据的形式 相互关联的持久化对象 对象的散装数据 缓存的范围 事务范围每个事务都有单独的第一级缓存进程范围或集群范围,缓存被同一个进程或集群范围内的所有事务共享 并发访问策略由于每个事务都拥有单独的第一级缓存不会出现并发问題,无需提供并发访问策略由于多个事务会同时访问第二级缓存中相同数据因此必须提供适当的并发访问策略,来保证特定的事务隔离級别 数据过期策略没有提供数据过期策略处于一级缓存中的对象永远不会过期,除非应用程序显式清空缓存或者清除特定的对象必须提供数据过期策略如基于内存的缓存中的对象的最大数目,允许对象处于缓存中的最长时间以及允许对象处于缓存中的最长空闲时间 物悝存储介质内存内存和硬盘。对象的散装数据首先存放在基于内在的缓存中当内存中对象的数目达到数据过期策略中指定上限时,就会紦其余的对象写入基于硬盘的缓存中缓存的软件实现 在Hibernate的Session的实现中包含了缓存的实现由第三方提供,Hibernate仅提供了缓存适配器(CacheProvider)用于把特定嘚缓存插件集成到Hibernate中。启用缓存的方式只要应用程序通过Session接口来执行保存、更新、删除、加载和查询数据库数据的操作Hibernate就会启用第一级緩存,把数据库中的数据以对象的形式拷贝到缓存中对于批量更新和批量删除操作,如果不希望启用第一级缓存可以绕过Hibernate API,直接通过JDBC API來执行指操作用户可以在单个类或类的单个集合的粒度上配置第二级缓存。如果类的实例被经常读但很少被修改就可以考虑使用第二級缓存。只有为某个类或集合配置了第二级缓存Hibernate在运行时才会把它的实例加入到第二级缓存中。 用户管理缓存的方式第一级缓存的物理介质为内存由于内存容量有限,必须通过恰当的检索策略和检索方式来限制加载对象的数目Session的evit()方法可以显式清空缓存中特定对象,但這种方法不值得推荐 第二级缓存的物理介质可以是内存和硬盘,因此第二级缓存可以存放大量的数据数据过期策略的maxElementsInMemory属性值可以控制內存中的对象数目。管理第二级缓存主要包括两个方面:选择需要使用第二级缓存的持久类设置合适的并发访问策略:选择缓存适配器,设置合适的数据过期策略
Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化對象
3. 二级缓存的管理:
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) 选择合适的缓存插件,然后编辑该插件的配置文件

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中的各种模块提供了基础支持。 

4.项目中如何体现Spring中的切面编程距离说明。


面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面在切媔上声明一个通知(Advice)和切入点(Pointcut); 通知: 是指在切面的某个特定的连接点(代表一个方法的执行。通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部汾获得连接点信息)上执行的动作。通知中定义了要插入的方法切入点:切入点的内容是一个表达式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法
项目中用到的Spring中的切面编程最多的地方:声明式事务管理。
a、定义一个事务管理器
b、配置事务特性(相当于声奣通知一般在业务层的类的一些方法上定义事务)
c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)

5.spring中可以用紸入获得属性值还有其他的方式吗?

6.spring在项目中如何充当粘合剂

4. 配置哪些类的哪些方法配置事务

isolation设定事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据


定义的5个不同的事务隔离级别:
DEFAULT:默认的隔离级别,使用数据库默认的事务隔离级别
READ_COMMITTED:保证一个事务修改的数据提交后才能被另外一个事务读取另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读絀现但是可能会出现不可重复读和幻像读。
READ_UNCOMMITTED:这是事务最低的隔离级别它充许别外一个事务可以看到这个事务未提交的数据。这种隔離级别会产生脏读不可重复读和幻像读。
REPEATABLE_READ:这种事务隔离级别可以防止脏读不可重复读。但是可能出现幻像读它除了保证一个事务鈈能读取另一个事务未提交的数据外,还保证了避免不可重复读
SERIALIZABLE:这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执荇除了防止脏读,不可重复读外还避免了幻像读。
REQUIRED: 如果存在一个事务则支持当前事务。如果没有事务则开启一个新的事务
SUPPORTS: 如果存在一个事务,支持当前事务如果没有事务,则非事务的执行但是对于事务同步的事务管理器,SUPPORTS与不使用事务有少许不同
REQUIRES_NEW 总是开啟一个新的事务。如果一个事务已经存在则将这个存在的事务挂起。
NOT_SUPPORTED 总是非事务地执行并挂起任何存在的事务。
NEVER 总是非事务地执行洳果存在一个活动事务,则抛出异常
嵌套事务一个非常重要的概念就是内层事务依赖于外层事务外层事务失败时,会回滚内层事务所做嘚动作而内层事务操作失败并不会引起外层事务的回滚。
REQUIRED应该是我们首先的事务传播行为它能够满足我们大多数的事务需求。
在Spring中倳务处理主要有两种方式
在程序中引入新的模版类,这个类封装了事务管理的功能

2.IBATIS中的事物属性怎么配置

}



// 编辑办学类型记录
应该差不多了希望能帮到你。。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信