首页 > 其他 > 详细

知识汇总

时间:2014-03-17 06:05:43      阅读:463      评论:0      收藏:0      [点我收藏+]

SSH框架

你对struts2的理解:
Struts2是struts1和webwork的技术基础之上进行合并的,成熟的MVC框架,全新的struts2的体系结构和struts1的体系结构的差别很大,是一个全新的框架,struts2以webwork为核心采用拦截器机制来处理用户的请求,这样的设计使的业务逻辑控制器能够与servletAPI完全脱离完全脱离开,所以使用struts2可以理解是webwork的更新产品。Struts2框架本身可以分为3个部分:核心控制器FilterDispatcher业务控制器Action和用户实现的企业业务逻辑组件
Struts2的工作原理:

客户端浏览器发出一个指向Servlet容器(tomcat)的请求根据web.xm的配置,请求会经过多个过滤器ActionContextClearUp(清楚页面属性)SiteMesh(装饰过滤器,页面布局,装饰)
最后被FilterDispatcher接收过滤器FilterDispatcher是struts2框架的心脏,在处理用户的请求时,他和请求相互配合访问struts2的底层框架结构,在web容器启动时,struts2框架会自动的加载配置文件里相关的参数,并转换成相应的类,如:ConfigurationManager,ActionMapper和ObjectFactory,ConfigurationManager存有配置文件的一些基本信息,ActionMapper存有action的配置信息,再请求过程中所有的对象(Action,Results,Interceptors等)都是通过ObjectFactory来创建的,过滤器会询问ActionMapper类来查询请求中需要用到的Action。
如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy,ActionProxy为action的代理对象。ActionProxy通过询问ConfigurationManager询问框架的配置文件,找到需要调用的Action类并创建ActionInvocation实例
一旦Action执行完毕actionInvocation的实例对象会从struts.xml中找到对应的返回结果result并跳转到相应的页面返回HTTP响应到客户端浏览器

Struts2中的数据校验:
继承ActionSupport类并重写validate()在该方法中将校验信息通过addActionError()和addFieldError()添加到fieldError中Struts在执行excute方法之前会自动的执行validate()方法
继承ActionSupport类对于action中的其他方法的校验则需要添加validate***()方法如果你又一个add的方法那么这个正对该方法的校验的方法命名是validateAdd();
使用校验框架,如配置***Action-validation.xml其中-validation.xml是固定不变的,然后在前面加上需要校验的action的名字struts2就可以识别了,并且校验文件必须与他所对应的Action类处于同一目录下。使用该框架必须满足两个条件(1,使用validation拦截器(2它所校验的Action类必须继承ActionSupport类并且验证失败出现message时他会转向INPUT页面来显示message消息

Struts2的拦截器实现:
可以实现Interceptor接口也可以继承AbstractInterceptor类还有方法过滤拦截器继承MethodFilterInterceptor类该类是AbstractInterceptor的子类(方法过滤拦截器主要的作用就是拦截Action中的某些方法的)
方法拦截器的两个重要的参数:
<1.excludeMethods:该参数指定拦截器拒接拦截的方法列表,如果有多个方法中间用逗号隔开。
<2.includeMethods:该参数指定拦截器需要拦截的方法列表如果有多个方法中间用逗号隔开。
注意:如果都为action的某一个方法指定了拦截器那么拦截器还是会拦截该方法的。
有默认的有自定义的两种,当为包中的某个action显示的指定了拦截器则默认的拦截器不会起作用。

Struts2的属性驱动和模型驱动:

属性驱动:指的是在action中jsp页面的每一个form中的表单元素的name值都对应在action中有一个属性与之对应
模型驱动:指的是每一个Action需要一个POJO对象,用来封装表单属性
Hibernate是什么:
Hibernate是一个开元的ORM对象关系映射框架,它对JDBC进行了非常轻量级的封装,使的java程序员可以随心所欲的使用面向对象的编程思维来操作数据库。主要的作用就是完成数据持久化的。
Hibernate的核心接口一共有5个:
Session,sessionFctory,Transaction,Query和Configuration开发中都要用到不仅可以对持久化对象进行存取还可以进行事务的控制
1.Session:负责执行持久化对象的CURD操作
2.sessionFactory:负责初始化hibernate他充当数据存储元的代理,并负责创建session对象
3.Transaction:负责事务的相关操作
4.Configuration:负责配置并启动hibernate在hibernate启动的时候,他的实力首先定位映射文档的位置读取配置然后创建sessionFactory对象
5.Query和Criteria:负责执行各种数据库查询可以使用HQL语言也可以使用SQL语言

Hibernate的工作原理:
通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
由hibernate.cg.xml中的<mapping resource=”com/xx/User.hbm.xml”/>读取并解析映射文件
通过config.buildSessionFactory();//创建sessionFactory
sessionFactory.openSession();//打开session
session.beginTransaction();//开启事务
persistent.operate持久化CURD操作
session.getTransaction().commit();//提交事务
关闭session
关闭sessionFactory

为什么要用Hibernate:
对JDBC访问数据库的代码做了轻量级的封装,大大简化了数据访问层繁琐的重复性代码
Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度上简化了DAO层的编码工作
hibernate使用java反射机制,而不是字节码增强程序来实现透明性
hibernate性能非常好,因为他是轻量级框架,映射的灵活性很出色,支持各种关系数据库,从一对一到多对多的各种复杂关系

Hibernate是如何实现延迟加载的:
hibernate2延迟加载实现a>实体b>集合
hibernate3提供了属性的延迟加载功能,hibernate在查询数据的时候,数据并没有存在内存中当程序真正的对数据进行操作时,对象才存在内存中,就实现了延迟加载的功能,他节省了服务器的内存开销,从而提高了服务器的性能
Hibernate中怎样实现类之间的关系:

类与类之间的关系主要体现在表与表之间的关系进行操作,他们都是对对象进行操作,我们在程序中将所有的表与类映射在一起,他们通过配置文件中的many-to-one,one-to-many,many-to-many

Hebernate的缓存机制:
条件:
数据不会被第三方修改,数据大小在可接受的范围,数据更新频率低,同一数据被系统平凡使用
Hibernate的缓存有两种:
一级缓存Session级别的缓存,也叫事务级的缓存,只缓存实体,生命周期和session一样不能对其进行管理
二级缓存SessionFactory级别的缓存也叫进程级缓存使用第三方插件来实现的也只是缓存实体生命周期和sessionFactory一致,可以进行管理
首先配置第三方插件我们用的是EHcache在hibernate.cfg.xml中加入
<property name=”hibernate.cache.user_second_level_cache”>true</property>
配置二级缓存的配置文件,
在映射文件中显示调用<cache usage=”read-only”>
二级缓存之查询缓存:对普通属性进行缓存。如果关联的表发生了修改,那么查询缓存的生命周期也就结束了在程序中必须手动启用查询缓存:query.setCacheable(true);///

Hibernate的查询方式:
SQL,Criteria,HQL:1.属性查询2.参数查询命名参数查询3.关联查询4.分页查询5.统计函数

Hibernate查询数据的方式:
导航图查询
OID查询
投影查询
本地sql
HQL

Load和get的区别:
区别一:load支持延迟加载get不支持延迟加载
区别二:使用get查询数据的时候如果数据库中没有此对象就会返回null如果是使用load查询数据的时候不管数据库里面有没有对应的对象返回的都是一个代理对象如果该数据不存在与数据库中当使用该对象的非id属性的时候就会抛出ObjectNotFoundException的异常
)

如何优化hibernate:
1.使用双向一对多关联不使用单向一对多。
2.灵活使用一对多关联。
3.不用一对一用多对一取代。
4.配置对象缓存不适用集合缓存。
5.一对多集合是用bag多对多集合使用Set
6.继承类使用显示多态
7.表字段要少,表关联不要怕多,有二级缓存撑腰。

Hibernate中的钝化:
就是将类序列化后存入磁盘并释放内存空间。

Mybatis和ibatis的区别:
主要的区别是mybatis简化了编码的过程不需要写dao的实现类直接写一个dao接口在写一个xml配置文件,然后在service里面调用dao就行了但是ibatis需要去写dao的实现类,所以说mybatis是ibatis的升级版本。

Mybatis和ibatis比较的优点有哪些:
mybatis实现了接口绑定使用更加方便对象关系映射的改进,效率更高Mybatis采用功能强大的基于OGNL的表达式来消除其他元素

Spring是什么:
Spring实际上就是一个容器,我们不需要使用new关键字创建对象,而是将其在Spring的配置文件中将其配置成bean,并设置其相关属性,让Spring容器来生成类的实例对象,并进行管理,对象与对象之间的依赖关系也可以在Spring中体现出来,Spring的核心就是IOC和AOP其中IOC就是控制反转或者叫依赖注入,就是说如果一个程序的运行需要其他的对象的支持,那么我们就在程序运行的时候动态的为该程序提供他所需要的对象,比如说业务层需要DAO层,用set方式注入。
AOP就是面向切面编程,是面向对象编程oop的延续,设计强调的是调用者和被调用者之间的解耦,来降低程序之间的依赖性和耦合性使其达到易维护易管理易理解易复用的目的。例如我们的方法除了包含业务逻辑代码外还需要加例如:日志,事务等相关操作的代码或者代码的引用。这样我们的方法就不是做一件事情而是做了业务逻辑,日志,事务三件事情于是我们想办法将日志,事务定义成切面,这样可以在代码需要日志和事务的时候切入程序。来达到一个方法只做一件事情的目的。或者说在不修改源代码的情况下给程序动态统一添加功能的一种技术。

SpringMVC的工作原理:
SpringMVC将所有的请求都交给DispatcherServlet,他会委托其他应用系统的其他功能模块对请求进行处理
DispatcherServlet查询一个或者多个HandlerMapping会找到处理请求的Controller。
DispatcherServlet把请求交给目标Controller
Controller进行业务逻辑处理后会返回一个ModelAndView
DispatcherServlet查询一个或者多个ViewResolert视图解析器,找到ViewResolert对象指定的视图对象。
试图对象负责渲染后返回给客户端。
配置Spring数据源的几种方式
(1)DBCP数据源,需要的jar包有commons-dbcp.jar,DBCP依赖Jakarta commons-pool对象池机制的数据库连接池所以需要comments-pool.jar.
<bean id="dataSource" class="org.apache.comments.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/school"/>
<property name="username" value="admin"/>
<property name="password" value="admin"/>
</bean>
其中destroy-method属性是必须的因为它要确保Spring容器关闭时,数据源能够正常关闭。
(2)C3P0数据源是一个开源的JDBC数据源实现项目它在lib目录中与Hibernate一起发布,实现了JDBC2和JDBC3的扩展说明的Connection和Statement池c3p0-0.9.0.4jar
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:school"/>
<property name="username" value="scott"/>
<property name="password" value="tigger"/>
</bean>
其中C3P0比DBCP拥有更加丰富的属性,有了这些属性可以更加有效的对数据源进行管理和控制
(3)Proxool,单独使用比较麻烦和Spring配合使用形成一个DataSource对象来操作数据库简单灵活,可靠性高。
<bean id="dataSource" class="org.logicalcobwebs.proxoolDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="ul" value="jdbc:oracle:thin:@localhost:1521:school"/>
<property name="username" value="scott"/>
<property name="password" value="tigger"/>
</bean>
三者的比较,DBCP无法解决服务器重启数据源自动重接的问题,C3P0也是Hibernate推荐的可以解决服务器重启数据源自动重连的问题,proxool性能上是一个比较好的连接池它可以解决服务器重启数据源重连的问题但是需要手动配置。

知识汇总,布布扣,bubuko.com

知识汇总

原文:http://www.cnblogs.com/menghenxiang/p/3602372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!