原文连接:http://www.cnblogs.com/SXTkaifa/p/5968631.htmlhtml
javaweb三大框架知识点总结java
1、Struts2的总结web
一、Struts 2的工做流程,从请求提及ajax
(1)客户端浏览器发出HTTP请求。spring
(2)根据web.xml配置,该请求被FilterDispatcher接收。sql
(3)根据struts.xml配置,找到须要调用的Action类和方法,通过一系列的拦截器(Interceptor)执行后,程序执行到action中的指定的方法, 而且从前台接收的参数经过IoC方式,将值注入给Aciton。数据库
(4)Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。设计模式
(5)Action执行完毕,根据struts.xml中的配置result找到对应的返回结果result,并跳转到相应页面。浏览器
(6)返回HTTP响应到客户端浏览器。缓存
二、拦截器Interceptor和过滤器Filter的区别
(1)拦截器是基于Java反射机制的,而过滤器则能够对几乎全部请求起做用
(2)过滤器依赖于servlet容器,而拦截器不依赖servlet容器。
(3)拦截器只能对执行到Action中的请求起做用,而过滤器能够对任意请求起做用,好比直接跳转到jsp的请求
(4)拦截器能够访问action中上下文值栈里面的对象,过滤器不能。
(5)在action的生命周期中,拦截器能够屡次调用,而filter只能在servlet容器初始化的时候调用。
三、在请求中将数据发送到action的方法有几种
(1)url中用问号加上参数名等于参数值(url?name=value)
(2)form表单提交
(3)ajax中传递参数
四、action中如何接收请求request中传递的参数
(1)使用request.getParameter("parametername")
(2)在action中定义一个参数,而后分别给它添加setter方法
五、action中的对象数据如何传递到jsp
(1)request.setAttribute("name",value);
(2)将对象赋值给action中的某一个有getter方法的属性
(3)request.getSession().setAttribute("name",value);
六、jsp中如何接收action设置的参数数据
(1)request.getAttribute("parametername")
(2)EL表达式直接获取
(3)request.getSession().getAttribute("parametername")
七、谈一下对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更符合软件工程化管理的精神。不一样的层各司其职,每一层的组件具备相同的特征,有利于经过工程化和工具化产生管理程序代码
十、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文件,该对象中几乎定义全部的异常信息。
2、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中实体对象之间的对应关系有哪三种,请简单描述这三种关系的使用方法和场景。
一对1、一对多、多对多。
9.session对象的evict()和clear()的区别、refresh()和flush()的区别。
flush() flush只会操做持久化状态的对象,或者说只会操做一级缓存中的对象。flush只是执行了sql语句,但没有执行commit方法。对于临时对象和游离对象不作任何操做。
refresh() 和flush相似,只不过是方向相反。flush是把session缓存中的对象往数据库中更新,而refresh是把数据库中的对象往session缓存中更新。
evict() 该方法是从一级缓存中把持久化对象移除。
clear() 清理session中的全部缓存。
3、spring的总结
一、简单介绍对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方法注入
接口注入
二、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做用域效果相同。
三、Spring有几种配置方式?
将Spring配置到应用开发中有如下三种方式:
基于XML的配置
基于注解的配置
基于Java的配置(其实就是注解,用语实现无配置文件的spring开发)
简谈对aop的理解
AOP(Aspect-Oriented Programming)实际上是OOP(Object-Oriented Programming)
思想的补充和完善。咱们知道,OOP引进"抽象"、"封装"、"继承"、"多态"等概念,对万事万物进行抽象和封装,来创建一种对象的层次结构,它强调了一种完整事物的自上而下的关系。可是具体细粒度到每一个事物内部的状况,OOP就显得无能为力了。好比日志功能。日志代码每每水平地散布在全部对象层次当中,却与它所散布到的对象的核心功能毫无关系。对于其余不少相似功能,如事务管理、权限控制等也是如此。这致使了大量代码的重复,而不利于各个模块的重用。
而AOP技术则偏偏相反,它利用一种称为"横切"的技术,可以剖解开封装的对象内部,并将那些影响了多个类而且与具体业务无关的公共行为 封装成一个独立的模块(称
为切面)。更重要的是,它又能以巧夺天功的妙手将这些剖开的切面复原,不留痕迹的融入核心业务逻辑中。这样,对于往后横切功能的编辑和重用都可以带来极大
的方便。
AOP技术的具体实现,无非也就是经过动态代理技术或者是在程序编译期间进行静态的"织入"方式。下面是这方面技术的几个基本术语:
一、join point(链接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不须要去定义一个join point。
二、point cut(切入点):本质上是一个捕获链接点的结构。在AOP中,能够定义一个point cut,来捕获相关方法的调用。
三、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。
四、aspect(方面):point cut和advice结合起来就是aspect,它相似于OOP中定义的一个类,但它表明的更可能是对象间横向的关系。
五、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的
四、Spring和struts集成须要的配置要点以及集成使用的意义
(1)首先web.xml中用filter的方式引入struts,以listener的方式引入spring
(2)相应集成包的引入
(3)struts.xml中添加
(4)action类能够配制成Bean同时使用spring依赖注入
集成使用的意义是由spring来管理struts的action类的实例化,和依赖注入,要注意的是action的scope是单例模式
五、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的事务声明和提交,简化开发过程。