SSH三大框架Struts Spring HibernateWord文档下载推荐.docx
- 文档编号:4816105
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:16
- 大小:26.15KB
SSH三大框架Struts Spring HibernateWord文档下载推荐.docx
《SSH三大框架Struts Spring HibernateWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SSH三大框架Struts Spring HibernateWord文档下载推荐.docx(16页珍藏版)》请在冰点文库上搜索。
•6、绑定值到视图技术:
Struts1使用标准的JSP,Struts2使用“ValueStack”技术
•7、类型转换:
Struts1中的ActionForm基本使用String类型的属性。
Struts2中使用OGNL进行转换,可以更方便的使用
•8、数据校验:
Struts1中支持覆盖validate方法或者使用Validator框架。
Struts2支持重写validate方法或者使用XWork的验证框架。
4、在Struts2中下面的xml文件的加载顺序:
struts-default.xml—>
struts-plugin.xml—>
struts.xml—>
web.xml
5、怎么调用Ation中的指定方法(使用两种方式),文字描述:
(1).动态方法调用例:
userAction!
enroll
(2).通配符(*)的使用例:
method{*}
6、常用结果的类型:
(写出三种)
dispatcher,redirect,redirectAction
7、使用什么标签来完成其它xml配置文件的包含?
<
includefile="
struts-constant.xml"
>
<
/include>
8、Result标签中name的五个常量:
success、input、error、login、none
9、如何实现一个拦截器的功能?
Struts通过<
interceptors>
和<
interceptor>
定义拦截器
在action标签中,我们使用<
interceptor-ref>
子元素引用已经定义的拦截器
10、说说ActionMapper,ActionProxy,ActionInvocation作用:
(1)根据请求的URI查找是否存在对应Action调用
(2)在XWork和真正的Action之间充当代理
(3)表示Action的执行状态,保存拦截器、Action实例
11、请说出10个系统自带的拦截器:
(写出名字,描述功能)
(1)Params拦截器:
负责将请求参数设置为Action属性
(2)servletConfig拦截器:
将源于ServletAPI的各种对象注入到Action
(3)fileUpload拦截器:
对文件上传提供支持
(4)exception拦截器:
捕获异常,并且将异常映射到用户自定义的错误页面
(5)validation拦截器:
调用验证框架进行数据验证
(6)workflow拦截器:
调用Action类的validate(),执行编码验证
(7)Timer拦截器:
记录Action执行的时间,并做为日志信息输出;
(8)I18n拦截器:
国际化
(9)Logger拦截器:
在日志信息中输出要执行的Action信息;
(10)Token拦截器:
核对当前Action请求(request)的有效标识,防止重复提交Action请求(request)
13、Struts2中的ActionSupport基类
基类中定义了五个标准的返回值,当然我们可以自己随意定义返回的名字。
StringSUCCESS="
success"
;
//默认是SUCCESS类型
StringNONE="
none"
StringERROR="
error"
StringINPUT="
input"
StringLOGIN="
login"
14、Struts2框架的大概处理流程如下
1、加载类(FilterDispatcher)
2、读取配置(struts配置文件中的Action)
3、派发请求(客户端发送请求)
4、调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action)
5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证)
6、处理业务(回调Action的execute()方法)
7、返回响应(通过execute方法将信息返回到FilterDispatcher)
8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:
SUCCESS、ERROER,将跳转到哪个jsp页面)
9、响应用户(jsp--->
客户浏览器端显示)
10、struts2标签库(相比struts1的标签库,struts2是大大加强了,对数据的操作功能很强大)
Hibernate
1.openSession和getCurrentSession
在hibernate.cfg.xml中配置
propertyname="
current_session_context_class"
thread<
/property>
openSession:
永远打开新session
需要close
getCurrentSession:
(必须在事务中运行)
可能会打开新的session,可能拿到原来存在的
提交事务后自动关闭。
Sessionsession=HibernateSessionFactory.getSessionFactory().openSession();
Sessionsession2=HibernateSessionFactory.getSessionFactory().openSession();
System.out.println(session==session2);
2.Set集合配置(无序)
Teacher.hbm.xml
setname="
stus"
inverse="
true"
order-by="
stuId"
<
keycolumn="
teaId"
/key>
one-to-manyclass="
com.entity.Student"
/>
<
/set>
Student.hbm.xml
many-to-onename="
teacher"
class="
com.entity.Teacher"
column="
/many-to-one>
1.什么是持久化
a)就是将程序数据在瞬时状态和持久状态之间转换的机制
2.什么是ORM
a)对象关系映射。
是一种解决面向对象与关系数据库存在的不匹配技术
3.为什么要使用Hibernate
a)Hibernate对JDBC进行了轻量级的封装,可以使用面向对象的思想操作数据库
b)开发工作量小,可以将精力集中在业务逻辑的处理上
4.hibernate操作三个准备、7个步骤
a)三个准备:
1.添加Hibernate库
2.添加Hibernate配置文件
3.添加对应表的实体类和映射文件
b)七个步骤:
(1).读取配置文件
[Configurationcfg=newConfiguration().configure()]
(2).创建会话工厂[SessionFactory]
(3).创建会话[Session,相当于JDBC中的Connectio]
(4).开启事务[Transaction、session.beginTransaction()]
(5).持久化操作[save(),update()]
(6).提交事务[commit()]
(7).关闭session
5.主键生成器方式
idname=””>
<
generator>
native<
/generator>
/id>
6.Hibernate中实体对象的三种状态
(1).瞬时状态:
没有持久化标识,仅为一个对象,与数据库无任何关联。
(2).持久状态:
拥有持久化标识,并且在数据库中存在与之对应的记录。
(3).游离状态:
拥有持久化标识,在数据库中存在与之对应的记录。
但由于session的关闭处于脱管状态。
7.inverse、cascade,lazy、fetch区别
a)inverse和cascade
1.Inverse是反转,表示关联关系的控制权。
为true,表示由对方负责关联关系的添加和删除;
为false,表示由自己负责维护关联关系。
2.cascade是自动级联。
有4个属性:
i.all:
对所有操作都进行级联
ii.none:
对所有操作都不进行级联
iii.save-update:
执行更新操作时级联
iv.delete:
执行删除操作时级联
b)lazy和fetch
1.lazy懒加载:
只有真正使用该对象时,hibernate才会发出查询语句,并且lazy策略只有在session打开状态下有效。
2.fetch抓取策略:
(join、select、subselect)
8.get和load区别
(1).执行时
get():
迫切加载。
会马上发出查询语句
load():
延迟加载。
不会立刻发出查询语句,由于支持lazy,只有当需要访问被加载实体属性的时候才发出查询语句。
(2).异常时(没查到数据时)
会引发空指针(java.lang.NullPoniterException)
会引发异常(org.hibernate.ObjectNotFoundException)
9.list和iterator区别
a)List:
返回的是一个集合对象,可以按照索引位置来随机访问结果集中的对象。
查询过程中不会读取缓存,尤其是一级缓存,而是直接执行SQL语句,执行结果会被保存在一级缓存中。
b)Iterate:
返回的是一个Iterate对象,只能按照从前向后的顺序一次读取数据库中的记录。
它每次访问均查询一级缓存,但Query.iterator记载数据的方式不是完整的SQL语句,而是N+1条SQL语句
10.CRUD代表什么
a)Create、Read、Update、Delete
11.HQL和QBC区别(并说明QBC中使用了什么类和接口的功能)
HQL:
HibernateQueryLanguage(面向对象的查询语言)
QBC:
QueryByCriteria(它将数据的查询条件封装成一个对象)
Restrictions类主要生成Criteria接口执行数据库查询条件
Order类设置查询结果的排序规则(asc()、desc())
Projections类帮助Criteria接口完成数据的分组查询
12.实体间关系有几种,分别用什么标签
a)一对一:
one-to-one>
/one-to-one>
b)一对多:
one-to-many>
/one-to-many>
c)多对一:
many-to-one>
d)多对多:
many-to-many>
/many-to-many>
14.复合主键配置步骤
步骤一:
创建数据库表,设定联合主键约束
步骤二:
编写持久化类及主键类;
编写主键类时,必须满足以下要求:
(1)实现Serializable接口
(2)覆盖equals()和hashCode()方法
(3)属性必须包含主键的所有字段
步骤三:
编写*.hbm.xml配置文件
composite-idname="
"
key-propertyname="
columnname="
/>
/key-property>
>
/composite-id>
15.HQL中?
号和:
参数名占位符的区别
问号占位符:
通过?
号占位符如果改变,影响到其他操作
参数名:
可以自己定义名字,参数改变不影响其他操作
16.hibernate怎么实现分现分页功能,比方我要取第2页,显示10条记录
setFirstResult((pageNum-1)*PageSize)
setMaxResult(PageSize)
17.事务所具备的四个特性
(1).Atomic原子性
(2).Consistency一致性
(3).Isoloation隔离性
(4).Durability持久性
18.请分别谈下JDBC事务和JTA事务
(1).JDBC:
单个连接,单个事务
(2).JTA:
提供各种分布式事务服务
19.事务并发的5种情况
(1).第一类更新丢失:
撤消一个事务时,把其它事务已提交成功的数据覆盖了
(2).第二类更新丢失:
不可重复读的特例,一个事务覆盖了另一个事务已提交更新的数据
(3).不可重复读:
一个事务两次读取同一行数据,两次读到的数据不一致
(4).脏读:
一个事务读到另一个事务没有提交更新的数据
(5).幻读:
一个事务执行两次查询操作,第二次查询比第一次查询多出了一些数据(插入和更新时)
20.hibernate锁的种类,并分别说明其实现方式
(1).悲观锁:
指在应用程序中显式地为数据资源加锁,先锁定资源再进行操作。
实现方式:
①在程序中显式指定采用数据库系统的独占锁来锁定数据资源;
②在数据库表中增加一个表明记录状态的LOCK字段。
(2).乐观锁:
完全依靠数据库的隔离级别来自动管理锁的工作,应用程序采用版本控制手段来避免可能出现的并发问题。
version版本控制。
在配置文件中要有:
versionname="
version"
VERSION"
其必须紧跟在<
id>
元素的后面。
数据库中的version(int)字段与version属性映射。
21.请分别谈谈一级缓存和二级缓存:
(1).一级缓存:
是Session级别的缓存,它同session绑定。
其生命周期随着session关闭而销毁
①它是线程不安全的,因此在设计软件架构时,应尽量避免多个线程共享一个Session实例。
②Session实例是轻量级的,这意味着在程序可以经常创建和销毁Session对象,例如为每个客户请求分配单独的Session实例。
原则:
一个线程一个Session;
一个事务一个Session。
(2).二级缓存:
是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存
Spring
1.你一般用spring做什么?
控制反转IOCAOP
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中的各种模块提供了基础支持。
4.项目中如何体现Spring中的切面编程,距离说明。
面向切面编程:
主要是横切一个关注点,将一个关注点模块化成一个切面。
在切面上声明一个通知(Advice)和切入点(Pointcut);
通知:
是指在切面的某个特定的连接点(代表一个方法的执行。
通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。
)上执行的动作。
通知中定义了要插入的方法。
切入点:
切入点的内容是一个表达式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法。
项目中用到的Spring中的切面编程最多的地方:
声明式事务管理。
a、定义一个事务管理器
b、配置事务特性(相当于声明通知。
一般在业务层的类的一些方法上定义事务)
c、配置哪些类的哪些方法需要配置事务(相当于切入点。
一般是业务类的方法上)
5.spring中可以用注入获得属性值,还有其他的方式吗?
读取配置文件
6.spring在项目中如何充当粘合剂
1、在项目中利用spring的IOC(控制反转或依赖注入),明确地定义组件接口(如UserDAO),开发者可以独立开发各个组件,然后根据组件间的依赖关系组装(UserAction依赖于UserBiz,UserBiz依赖于UserDAO)运行,很好的把Struts(Action)和hibernate(DAO的实现)结合起来了。
2、spring的事务管理把hibernate对数据库的操作进行了事务配置。
7.spring的事务如何配置
spring的声明式事务配置:
1.<
!
--配置sessionFactory-->
beanid="
sessionFactory"
class="
org.springframework.orm.hibernate3.LocalSessionFactoryBean"
configLocation"
value>
/WEB-INF/classes/hibernate.cfg.xml<
/value>
/bean>
2.配置事务管理器
--配置事务管理器-->
transactionManager"
org.springframework.orm.hibernate3.HibernateTransactionManager"
reflocal="
3.配置事务特性
tx:
adviceid="
txAdvice"
tran
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH三大框架Struts Spring Hibernate SSH 框架 Struts