知识大全 Struts&Spring&Hibernate面试总结

Posted 面试

篇首语:认识到自己无知是知识进步的重要阶段。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Struts&Spring&Hibernate面试总结相关的知识,希望对你有一定的参考价值。

Struts&Spring&Hibernate面试总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

介绍一下Struts的Action类 Struts框架采用ActionServlet和RequestProcessor组件进行集中控制 并采用Action组件来处理单项业务 ActionServlet把全部提交的请求委托到RequestProcessor对象 RequestProcessor使用struts config xml文件检查请求URI找到响应的Action Action类是用户请求和业务逻辑之间的桥梁 每个Action充当客户的一项业务代理 这样使得客户请求和Action类之间可以有多个点对点的映射 Action类还提供了其它的辅助功能 比如:日志(logging)和数据验证(validation) 当控制器收到客户请求的时候 在将请求转移到一个Action实例时 如果这个实例不存在 控制器会首先创建 然后会调用这个Action实例的execute()方法 在RequestProcessor类预处理请求时 在创建了Action的实例后 就调用自身的processActionperform()方法 该方法再调用Action类的execute()方法 execute()方法再调用模型组件的业务方法 完成用户请求的业务逻辑处理 然后根据执行结果把请求转发给合适的Web组件 Struts Framework为应用系统中的每一个Action类只创建一个实例 因为所有的用户都使用这一个实例 所以必须确定你的Action 类运行在一个多线程的环境中 ActionForward类 Action类的execute()方法返回一ActionForwad对象 ActionForward对象代表了Web资源的逻辑抽象 这里的资源可以是JSP页\\Java Servlet或Action 从execute()方法中返回ActionForward对象有两种方法: 第一:在execute()方法中 动态创建一个ActionForward实例 return new ActionForward(&# ;Failure&# ; &# ;/security/error jsp&# ; &# ;true&# ;); 以上ActionForward构造方法的第一个参数代表ActionForward实例的逻辑名 第二个参数指定转发路径 第三个参数指定是否进行重定向 (true:重定向;false:请求转发) 第二:在Struts配置文件中配置 元素 parameter= reqCode path= /login scope= request validate= false type= eRedLab eRedCIP frame web LoginAction > Failure path= /security/error jsp /> 配置了 元素后 在Struts框架初始化时就会创建存放 元素配置信息的ActionForward对象 在Action的execute方法中只需调用Actionmapping实例的findForward()方法 来获得特定的ActionForward实例: return mapping findForward(&# ;Failure&# ;); 介绍一下Struts的ActionServlet类 ActionServlet继承自javax servlet HttpServlet类 其在Struts framework中扮演的角色是中心控制器 它提供一个中心位置来处理全部的终端请求 按照Servelt的标准 所有得Servlet必须在web配置文件(web xml)声明 同样 ActoinServlet必须在Web Application配置文件(web xml)中描述 有关配置信息如下 name>action name> class> apache struts action ActionServlet class> 全部的请求URI以* do的模式存在并映射到这个servlet 其配置如下: mapping> name>action name> * do mapping> 中心控制器为所有的表示层请求提供了一个集中的访问点 当用户向服务器端提交请求的时候 实际上信息是首先发送到控制器ActionServlet 一旦控制器获得了请求 其就会将请求信息传交给一些辅助类(help classes)处理 Struts对MVC的体现 M: 在Struts中 模型由JavaBean和EJB组件组成 用来实现程序的业务逻辑部分 C: ActionServlet RequestProcessor和Struts辅助类来实现控制器 ActionServlet是Struts中的核心控制器ActionServlet会根据在Struts配置文件中的配置将控制权转交给相应的Action类 Action 类是业务的代理 在Action类中可以调用模型组件或者编写其他业务逻辑代码来完成一项具体的业务 V: Struts框架中的视图主要由JSP文件构成 在JSP文件中可应用Struts标签和自定义标签来表现模型组件中的数据进行简单的处理 ActionForm Bean实际上是一个遵循了特殊约定的JavaBean 在Struts中ActionForm Bean可看作为一个中间存储器在视图与控制器之间进行数据传递 Struts框架工作流程 当启动一个采用Struts框架开发的Web应用程序时 ActionServlet就会被加载并被初始化 然后ActionServlet读取Struts配置文件中的信息 并根据文件中的各模块配置来初始化相应的配置对象 当用户的请求属于ActionServlet所处理请求的模式时 ActionServlet被调用 Struts的处理工作开始: 中央控制器根据用户的请求 在Struts配置文件中的元素中查找匹配该请求的子元素 如果不存在 则返回异常; 在匹配的元素中查找有Scope属性指定的范围中是否存在由name属性指定的ActionForm Bean 如果不存在 就创建一个新的ActionForm对象 然后将用户提交的表单中的数据保存在给ActionFrom对象中 并将ActionForm对象放入Scope属性指定的范围内; 如果元素中Validate属性值为true 则调用ActionFrom中的Validate()方法进行表单验证; ActionForm的Validate()方法返回NULL或返回的ActionErrors对象中不包含任何ActionMessage对象 则表单验证成功 否则表单验证失败 ActionServlet将请求转发给Input属性指定的页面; 中央控制器将控制权转交给元素Type属性指定的Action类 如果相应的Action类对象不存在 则创建该类对象 接下来Action类的Execute()方法被调用; 在Action类的Execute()方法中进行业务逻辑处理 并返回一个ActionForward对象 控制权被交回ActionServlet ActionServlet将返回的ActionForward对象与元素中的 子元素进行匹配 并将请求转发给指定的JSP组件; 如果ActionForward对象指定的是另外的Action动作 则返回第( )步在次执行流程 否则生成动态网页返回给用户 Struts中DispatchAction和Action类有什么不同? DispatchAction是Struts包含的另一个能大量节省开发时间的Action类 与其它Action类仅提供单个execute()方法实现单个业务不同 DispatchAction允许你在单个Action类中编写多个与业务相关的方法 这样可以减少Action类的数量 并且把相关的业务方法集合在一起使得维护起来更容易 要使用DispatchAction的功能 需要自己创建一个类 通过继承抽象的DispatchAction得到 例如 我们想要提供一个方法来实现对购物车添加商品清单 创建了一个类ShoppingCartDispatchAction提供以下的方法: public ActionForward addItem(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response)throws Exception; 那么 这个类很可能还需要一个deleteItem()方法从客户的购物车中删除商品清单 还有clearCart()方法清除购物车等等 这时我们就可以把这些方法集合在单个Action类 不用为每个方法都提供一个Action类 在调用ShoppingCartDispatchAction里的某个方法时 只需在URL中提供方法名作为参数值 就是说 调用addItem()方法的 URL看起来可能类似于://myhost/storefront/action/cart?method=addItem 其中method参数指定ShoppingCartDispatchAction中要调用的方法 参数的名称可以任意配置 这里使用的 method 只是一个例子 参数的名称可以在Struts配置文件中自行设定 Struts中最核心的类和包有哪些? apache struts action 控制整个struts framework的运行的核心类 组件都在这个包中 比如我们上面提到的控制器ActionServlet 已经Action ActionForm ActionMapping等等 struts 比 多了 DynaActionForm 类 增加了动态扩展生成FormBean功能 apache struts actions 这个包是主要作用是提供客户的请求和业务逻辑处理之间的特定适配器转换功能 而 版本中的部分动态增删FromBean的类 也在struts 中被Action包的DynaActionForm组件所取代 ornfig 提供对配置文件struts config xml元素的映射 这也是sturts 中新增的功能 apache struts util Strtuts为了更好支持web application的应用 体统了一个些常用服务的支持 比如Connection Pool和Message Source apache struts taglib 这不是一个包 而是是一个客户标签类的集合 下面包括Bean Tags HTML Tags Logic Tags Nested Tags Template Tags这几个用于构建用户界面的标签类 apache struts validator Struts framework中增加了validator framework 用于动态的配置from表单的验证 如何在Web项目中保护JSP源代码不被未经授权的访问和窥视? 把页面文件移到WEB INF 目录下 基于Servlet的声明 WEB INF不作为Web应用的公共文档树的一部分 因此 WEB INF 目录下的资源不是为客户直接服务的 唯一要注意的是必须把JSP和一个Struts action联系起来 Struts的控制器如何知道什么样的信息转发到什么样的Action类呢? 在struts 中 控制器信息转发的配置映射信息是存储在特定的XML文件(比如struts config xml)中的 这些配置信息在系统启动的时候被读入内存 供struts framework在运行期间使用 在内存中 每一个元素都与 apache struts action ActionMapping类的一个实例对应 如何用Struts实现国际化? 建立struts的config文件: resources parameter= resources application /> message resources标签是指message资源的文件 是存放多种语言的提示信息的文件 parameter只是文件名 没有语言_国家 建立资源文件:默认的资源文件application properties # &# ; international test – 这是注释 test title=international application test test body=This is a international application test 简体中文的资源文件:application_cn properties 国际化通过unicode码来实现 所以要把代码转为unicode码 native ascii application_cn properties application_zh_CN properties JSP 访问: test title /> Struts Validator验证器 在struts config xml 文件中配置验证器插件

property property= pathnames value= /WEB INF/validator rules xml /WEB INF/validation xml /> in> 扩展ValidatorForm而不是ActionForm 以便它能加载你的Validator资源 他根据struts config xml文件中的action的name属性为当前form的调用相应的验证器 因此在validator rules xml中的form元素的名称属性应该与action的name属性值相匹配 使用验证器进行验证的Form不能实现validate()方法 Struts动态Form 动态ActionForm使得用户无须为应用程序的每一个HTML表单创建具体的ActionForm类

bean> 在Action中访问动态ActionForm DynaActionForm dynaForm =(DynaActionForm)form; String userName = (String)dynaForm get(&# ;userName&# ;); String userPwd = (String)dynaForm getString(&# ;userPwd&# ;);

Hibernate的执行流程 通过Configuration() configure();读取并解析hibernate cfg xml配置文件 由hibernate cfg xml中的 /xx/User hbm xml />读取解析映射信息 通过config buildSessionFactory();//得到sessionFactory sessionFactory openSession();//得到session session beginTransaction();//开启事务 persistent operate; session getTransaction() mit();//提交事务 关闭session; 关闭sessionFactory; 为什么要用Hibernate 封装了jdbc 简化了很多重复性代码 简化了DAO层编码工作 使开发更对象化了 移植性好 支持各种数据库 如果换个数据库只要在配置文件中变换配置就可以了 不用改变hibernate代码 支持透明持久化 因为hibernate操作的是纯粹的(pojo)java类 没有实现任何接口 没有侵入性 所以说它是一个轻量级框架 Hibernate的延迟加载 get不支持延迟加载 load支持延迟加载 hibernate 对实体对象和集合实现了延迟加载 hibernate 对提供了属性的延迟加载功能 hibernate延迟加载就是当使用session load(User class )或者session createQuery()查询对象或者属性的时候 这个对象或者属性并没有在内存中 只有当程序操作数据的时候 才会存在内存中 这样就实现延迟加载 节省了内存的开销 从而提高了服务器的性能 Hibernate的缓存机制 一级缓存: session级的缓存也叫事务级的缓存 只缓存实体 生命周期和session一致 不能对其进行管理 不用显示的调用 二级缓存: sessionFactory缓存 也叫进程级的缓存 使用第 方插件实现的 也指缓存实体 生命周期和sessionFactory一致 可以进行管理 首先配置第 放插件 我们用的是EHCache 在hibernate cfg xml文件中加入

true 在映射中也要显示的调用 read only /> 二级缓存之查询缓存: 对普通属性进行缓存 如果关联的表发生了修改 那么查询缓存的生命周期也结束了 在程序中必须手动启用查询缓存: query setCacheable(true); 优化Hibernate 使用一对多的双向关联 尽量从多的一端维护 如果将t_student(多)表里的classesid字段设置为非空 则无法保存 不在student这一端维护关系 存储student时不会存学生对应的班级 在存储班级时需要发出多余的update语句来更新关系 不要使用一对一 尽量使用多对一 配置对象缓存 不要使用集合缓存 表字段要少 表关联不要怕多 有二级缓存撑腰 Hibernate对象的三种状态 Persitent状态的对象不能引用Transient对象 不然会抛出TransientObjectException异常 Transient(瞬时)状态的特征: * 在数据库中没有与之匹配的数据 * 没有纳入session的管理 可通过session的save()或 saveOrUpdate()方法将瞬时对象与数据库相关联 并将数据对应的插入数据库中 此时该瞬时对象转变成持久化对象 Persistent(持久)状态的特征: * persistent状态的对象在数据库中有与之匹配的数据 * 纳入了session的管理 * 在清理缓存(脏数据检查)的时候 会和数据库同步 Detached(游离)状态的特征: * 在数据库中有与之匹配的数据 * 没有纳入session的管理 当与某持久对象关联的session被关闭后 该持久对象转变为游离对象 当游离对象被重新关联到session上时 并再次转变成持久对象 游离对象和比瞬时对象相比 多了一个数据库记录标识值 其它没什么不同 Hibernate的映射方式 一对一: Person和IdCard 添加Person的时候 不会出现TransientObjectException异常 因为一对一主键关联映射中 默认了cascade属性 主键单向: 在Person端 id > foreign >

cha138/Article/program/Java/ky/201404/30501

相关参考

知识大全 Struts 2, spring 2, hibernate

Struts2,spring2,hibernate  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 struts2 + spring + hibernate&

   struts释出已经很久了虽然自己现在作GUI开发不过有时间还是学习下web开发现在就将我使用myeclipse工具应用struts+spring+hibernat

知识大全 Struts2 Spring Hibernate 的简单整合

Struts2SpringHibernate的简单整合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 用struts+spring+hibernate组装web应用

  其实就算用Java建造一个不是很烦琐的web应用程序也不是件轻松的事情当为一个应用程序建造一个构架时有许多事情需要考虑从高层来说开发者需要考虑怎样建立用户接口(userinterfaces)?在哪

知识大全 使用Urlrewrite技术实现Struts2+Hibernate3+Spring的项目的伪静态

使用Urlrewrite技术实现Struts2+Hibernate3+Spring的项目的伪静态  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集

知识大全 Spring系列第2部分:当Hibernate遇上Spring

Spring系列第2部分:当Hibernate遇上Spring  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来

知识大全 Spring整合HIbernate

Spring整合HIbernate  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Spring整

知识大全 Struts处方:Hibernate与Struts

Struts处方:Hibernate与Struts  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 spring struts2 ibatis框架整合开发

这里主要介绍一下spring+struts+ibatis所需要的jar包文件spring所需包  以上包为spring配置基本包ibatis所需包  有解决方法的朋友们希望能回复  与struts整合

知识大全 Spring操作Hibernate更方便

Spring操作Hibernate更方便  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  软件系统