知识汇总

SSH框架java

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

客户端浏览器发出一个指向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的属性驱动和模型驱动:web

属性驱动:指的是在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语言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中怎样实现类之间的关系:apache

类与类之间的关系主要体如今表与表之间的关系进行操做,他们都是对对象进行操做,咱们在程序中将全部的表与类映射在一块儿,他们经过配置文件中的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把请求交给目标ControllerController进行业务逻辑处理后会返回一个ModelAndViewDispatcherServlet查询一个或者多个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性能上是一个比较好的链接池它能够解决服务器重启数据源重连的问题可是须要手动配置。

相关文章
相关标签/搜索