框架总结

  

一、Struts2的总结

1、Struts 2的工作流程,从请求说起

(1)客户端浏览器发出HTTP请求。

(2)根据web.xml配置,该请求被FilterDispatcher接收。

(3)根据struts.xml配置,找到需要调用的Action类和方法,经过一系列的拦截器(Interceptor)执行后,程序执行到action中的指定的方法, 并且从前台接收的参数通过IoC方式,将值注入给Aciton。

(4)Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

(5)Action执行完毕,根据struts.xml中的配置result找到对应的返回结果result,并跳转到相应页面。

(6)返回HTTP响应到客户端浏览器。

2、拦截器Interceptor和过滤器Filter的区别

(1)拦截器是基于Java反射机制的,而过滤器则可以对几乎所有请求起作用

(2)过滤器依赖于servlet容器,而拦截器不依赖servlet容器。

(3)拦截器只能对执行到Action中的请求起作用,而过滤器可以对任意请求起作用,比如直接跳转到jsp的请求

(4)拦截器可以访问action中上下文值栈里面的对象,过滤器不能。

(5)在action的生命周期中,拦截器可以多次调用,而filter只能在servlet容器初始化的时候调用。

3、在请求中将数据发送到action的方法有几种

(1)url中用问号加上参数名等于参数值(url?name=value)

(2)form表单提交

(3)ajax中传递参数

4、action中如何接收请求request中传递的参数

(1)使用request.getParameter("parametername")

(2)在action中定义一个参数,然后分别给它添加setter方法

5、action中的对象数据如何传递到jsp

(1)request.setAttribute("name",value);

(2)将对象赋值给action中的某一个有getter方法的属性

(3)request.getSession().setAttribute("name",value);

6、jsp中如何接收action设置的参数数据

(1)request.getAttribute("parametername")

(2)EL表达式直接获取

(3)request.getSession().getAttribute("parametername")

7、谈一下对struts的认识和理解(优点和好处)

(1)struts框架简化了基于MVC的web应用程序的开发。

(2)struts可以清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序的过程。struts提供的类使得开发工作更加简单,这些类包括:

控制程序流程的类 ActionServlet 控制struts的程序流程

实现和执行程序事务逻辑的类 : ActionClass 包含事务逻辑

ActionForm 显示模块数据

ActionMapping 帮助控制器将请求映射到操作

ActionForward 用来指示操作转移的对象

ActionError 用来存储和回收错误Struts标记库

(3)struts2框架是为了减少在运用MVC设计模型来开发Web应用的时间,而且它确实是达到了这个效果

MVC包含三个基础部分:Model、View和Controller,这三个部分以最小的耦合协同工作,以增加程序的可扩展性和可维护性。各个部分的实现技术可以总结如下:

1)Model:JavaBean、EJB的EntityBean

2)View:JSP、Struts的TagLib

3)Controller:Struts的ActionServlet、Action

概括起来MVC的优点主要有一下方面:

1)多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护

2)模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如,使用JSP页面、Velocity模板或者直接产生Excel文档等

3)应用被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性

4)控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念

5)MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码

10、JSP的内置对象及方法

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header,和session数据的有用的方法。

response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

applicaton表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息

config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page表示从该页面产生的一个servlet实例

exception对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件,该对象中几乎定义所有的异常信息。

二、hibernate的总结

1.常见的ORM框架有哪些

hibernate mybatis jpa

2.hibernate从加载配置到到关闭session的整个过程中设计的核心类有哪些

//加载默认的hibernate配置文件,默认名为hibernate.cfg.xml

final StandardServiceRegistry registry=

new StandardServiceRegistryBuilder().configure().build();

//使用MetadataSources(registry)创建sessionFactory

SessionFactory sessionFactory=

new MetadataSources(registry).buildMetadata().buildSessionFactory();

//创建session

Session session = sessionFactory.openSession();

//开启事务

Transaction transaction = session.beginTransaction();

transaction.commit();

//关闭session

session.close();

//关闭SessionFactory

sessionFactory.close();

3.请解释hibernate方言的概念

针对不同的数据库,hibernate可以使用统一的hql,在hibernate和具体的数据库交互的时候,就通过与具体数据库种类和版本匹配的方言将hql解析称sql去执行。(扩展性很强)

4.常用的主键生成策略

自增长:identity

sequence

native:支持自增长increment就采用自增长

uuid:hibernate生成的32的字符串

assigned:自己指定或设置

foreign:使用外键字段作为主键

5.hibernate的实体对象有哪几种存在状态和特点

临时状态(瞬态):对象由new操作符创建,且尚未与Hibernate Session关联的对象被认为处于瞬态(session缓存中没有该对象)。瞬态对象不会被持久化到数据库中(也不存在于数据库中),也不会被赋予持久化标识(OID)。如果程序中失去了瞬态对象的引用,瞬态对象将被垃圾回收机制销毁。使用Hibernate Session可以将其变为持久化状态。

持久化状态:持久化实例在数据库中有对应的记录,并拥有一个持久化标识(identifier,有OID,持久化对象的ID不能被修改)。持久化的实例可以是刚刚保存的,也可以是刚被加载的。无论哪一种,持久化对象都必须与特定的Hibernate Session关联。并且每条记录在同一个session对象中有且仅有一个缓存对象,Hibernate会检测到处于持久化状态对象的改动,在当前操作完成时将对象数据写回数据库。开发者不需要手动执行UPDATE。

游离(脱管)状态:某个实例曾经处于持久化状态,但随着与之关联的Session被关闭,该对象就变成脱管状态。脱管状态的引用依然有效,对象可继续被修改。如果重新让脱管对象与某个Session关联,这个脱管对象会重新转换为持久化状态,而脱管期间的改动也不会丢失,也可被写入数据库。

6.请描述下session的load()和get()的区别。

get()每次执行都会执行sql语句,不会延迟。load()方法只是会在我们对拿到的实体对象进行操作的时候才去执行查询,拿到相应的实体信息。load方法返回的是一个代理对象。无论是get还是load首先都会查一级缓存(session)中有没有相应的对应值,如果没有,再去数据库进行查找。另外,使用get方法时,如果指定的id在数据库在不存在则返加null,使用load方法时,如果指定id不存在则会报异常。

7.hibernate中实体类、类实例以及类中的属性和数据库表的对应关系。

持久化(实体)类对应关系型数据库表,类实例对应表中记录,类属性对应表字段。

8.hibernate中实体对象之间的对应关系有哪三种,请简单描述这三种关系的使用方法和场景。

一对一、一对多、多对多。

9.session对象的evict()和clear()的区别、refresh()和flush()的区别。

flush() flush只会操作持久化状态的对象,或者说只会操作一级缓存中的对象。flush只是执行了sql语句,但没有执行commit方法。对于临时对象和游离对象不做任何操作。

refresh() 和flush类似,只不过是方向相反。flush是把session缓存中的对象往数据库中更新,而refresh是把数据库中的对象往session缓存中更新。

evict() 该方法是从一级缓存中把持久化对象移除。

clear() 清理session中的所有缓存。

三、spring的总结

1、简单介绍对spring IOC的理解和依赖注入实现方式

在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。

其主要总用是解耦和提高性能(单例模式)

在Java中注入有以下三种实现方式:

构造器注入

Setter方法注入

接口注入

2、Spring Bean的作用域之间有什么区别?

singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。

下面是基于spring mvc的可不做回答

request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。

全局作用域与Servlet中的session作用域效果相同。

3、Spring有几种配置方式?

将Spring配置到应用开发中有以下三种方式:

基于XML的配置

基于注解的配置

基于Java的配置(其实就是注解,用语实现无配置文件的spring开发)

简谈对aop的理解

AOP(Aspect-Oriented Programming)其实是OOP(Object-Oriented Programming)

思想的补充和完善。我们知道,OOP引进"抽象"、"封装"、"继承"、"多态"等概念,对万事万物进行抽象和封装,来建立一种对象的层次结构,它强调了一种完整事物的自上而下的关系。但是具体细粒度到每个事物内部的情况,OOP就显得无能为力了。比如日志功能。日志代码往往水平地散布在所有对象层次当中,却与它所散布到的对象的核心功能毫无关系。对于其他很多类似功能,如事务管理、权限控制等也是如此。这导致了大量代码的重复,而不利于各个模块的重用。

而AOP技术则恰恰相反,它利用一种称为"横切"的技术,能够剖解开封装的对象内部,并将那些影响了多个类并且与具体业务无关的公共行为 封装成一个独立的模块(称

为切面)。更重要的是,它又能以巧夺天功的妙手将这些剖开的切面复原,不留痕迹的融入核心业务逻辑中。这样,对于日后横切功能的编辑和重用都能够带来极大

的方便。

AOP技术的具体实现,无非也就是通过动态代理技术或者是在程序编译期间进行静态的"织入"方式。下面是这方面技术的几个基本术语:

1、join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。

2、point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。

3、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。

4、aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。

5、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的

4、Spring和struts集成需要的配置要点以及集成使用的意义

(1)首先web.xml中用filter的方式引入struts,以listener的方式引入spring

(2)相应集成包的引入

(3)struts.xml中添加

(4)action类可以配制成Bean同时使用spring依赖注入

集成使用的意义是由spring来管理struts的action类的实例化,和依赖注入,要注意的是action的scope是单例模式

5、Spring和hibernate集成的配置要点以及集成使用的意义

(1) 引入spring中的orm依赖

(2)在spring中配置datasource

(3)在spring中配置sessionfactory并将datasource注入

(4)配置spring管理hibernate事务管理类并注入sessionfactory

(5)配置aop,设置在service(业务逻辑层)

(6)讲aop切面和事务管理advice绑定

(7)可以从spring容器中获取hibernatesupport类来使用hibernate操作数据库

好处

(1)由IOC容器来管理Hibernate的SessionFactory

(2)使用spring的aop来管理hiberante的事务声明和提交,简化开发过程。

时间: 2024-10-15 10:39:21

框架总结的相关文章

基于jquery开发的UI框架整理分析

根据调查得知,现在市场中的UI框架差不多40个左右,不知大家都习惯性的用哪个框架,现在市场中有几款UI框架稍微的成熟一些,也是大家比较喜欢的一种UI框架,那应该是jQuery,有部分UI框架都是根据jQuery研发出来的产品,现在也很常见了. 国产jQuery UI框架 (jUI) DWZ DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.设计目标是简单实用,快速开发,降低ajax开发成本. jQuery 部件布局

静态网页框架设计首次体验(文章改)

根据教材与上网成功解决了Tomcat与Myeclipse的安装,同时熟悉了Java web创建项目到部署运行整个过程.今天起正式开始学习有关Java web的编程部分.Java web静态网页(HTML网页)的标记含义.基本语法的介绍到框架设计基本模板与案例,今天的学习的内容,让网页编程有了一个初步的框架.结合自身所在协会的情况,计划制作一个关于协会的网页,已有初步想法,望通过学习不断完善和修改协会网站.根据今天所学,并参考书本30页框架设计案例对网页进行初步搭建. 具体代码如下 TW.jsp:

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

.NET深入解析LINQ框架(一:LINQ优雅的前奏)

阅读目录: 1.LINQ简述 2.LINQ优雅前奏的音符 2.1.隐式类型 (由编辑器自动根据表达式推断出对象的最终类型) 2.2.对象初始化器 (简化了对象的创建及初始化的过程) 2.3.Lambda表达式 (对匿名方法的改进,加入了委托签名的类型推断并很好的与表达式树的结合) 2.4.扩展方法 (允许在不修改类型的内部代码的情况下为类型添加独立的行为) 2.5.匿名类型 (由对象初始化器推断得出的类型,该类型在编译后自动创建) 2.6.表达式目录树(用数据结构表示程序逻辑代码) 3.LINQ

.NET深入解析LINQ框架(二:LINQ优雅的前奏)

阅读目录: 1.LINQ框架的主要设计模型 1.1.链式设计模式 (以流水线般的链接方式设计系统逻辑) 1.2.链式查询方法(逐步加工查询表达式中的每一个工作点) 2.LINQ框架的核心设计原理 2.1.托管语言之上的语言(LINQ查询表达式) 2.2.托管语言构造的基础(LINQ依附通用接口与查询操作符对应的方法对接) 2.3.深入IEnumerable.IEnumerable<T>.Enumerable(LINQ to Object框架的入口) 2.4.深入IQueryable.IQuer

.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)

阅读目录: 1.开篇介绍 2.扩展Linq to Object (应用框架具有查询功能) 2.1.通过添加IEnumerable<T>对象的扩展方法 2.2.通过继承IEnumerable<T>接口 2.3.详细的对象结构图 3.实现IQueryable<T> .IQueryProvider接口 3.1.延迟加载IEnumertor<T>对象(提高系统性能) 3.2.扩展方法的扩展对象之奥秘(this IQueryable<TSource> so

.NET深入解析LINQ框架(三:LINQ优雅的前奏)

阅读目录: 1.动态LINQ查询(动态构建Expression<T>表达式树) 2.DLR动态语言运行时(基于CLR之上的动态语言运行时) 1].动态LINQ查询(动态构建Expression<T>表达式树) 什么是动态LINQ查询?LINQ的编写是静态的,因为C#是基于静态类型系统原理设计的,在编写时已经确定类型,也就是在编译时就已经知道将要执行什么样的查询,条件是什么.排序方式是什么等等.那么很大一部分应用场合中我们需要根据用户的选择来查询数据源,以往我们都是通过判断的方式来拼

Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案 (精髓)

前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说起.问题大概有以下几点: 1.项目层的文件夹结构 2.解决MVC的Controller和Web API的Controller类名不能相同的问题 3.给MVC不同命名空间的Area的注册不同的路由 4.让Web API路由配置也支持命名空间参数 5.MVC及Web API添加身份验证及错误处理的过滤器

10大APP界面框架设计模式详解

随着移动互联网的发展,移动app已经成为了每个互联网公司的标配了,那作为产品经理,我们如何设计出更加符合用户体验的app产品呢?今天和大家分享的就是10中最常见的app界面光甲设计模式,一起来看看吧. 1.标签导航 标签导航是十大界面框架设计里最常用的界面框架设计,也是被业界之内公认的一种普遍使用的页面框架设计.那么这种页面框架设计在作业方面对一个用户来说也是最常见的一种页面框架设计,比如说微博.微信.手机百度.支付宝.淘宝,这些我们所谓的超级APP都是运用的标签导航,无一例外.从这个角度也可以

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =