一、Struts2和Strut1的区别。
相同点:都是MVC的WEB框架
不同点:
1.Struts1的前端控制器是一个Servlet,名称是ActionServlet,Struts2中的前端控制器是一个filter,在Struts2.0的版本中,名称是fileterdispatcher
2.Struts1中的Action需要继承Action类,Struts2中的Action可以不要继承Action
3.Struts1是用forbean来封装请求参数,Struts2中是用Action的属性来封装请求参数
4.Struts1统一路径下的所有请求共享同一个action,Struts2对于同一路径下的每个参数分别使用一个独立的action实例,所有对于Struts2中的action不需要在担心线程安全问题,
5.Struts1中多个业务方法放到了同一个action中,要么都校验,要么都不检验,Struts2中可以只对每个业务方法进行校验,当一个action继承了ActionSupport,并且重写了validateXXX()方法时,就只会校验这个XXX方法了
6.Struts1是老牌框架,拥有广泛的群众基础,使用范围很广,使用Struts1框架开发风险小,成本低
7.Struts2是基于webWork的基础设计出来的,完善和改善了一些Struts1中的缺陷,解决了一些Struts1中的问题
8.Struts1中的视图redirect的url不能接收参数,但是在Struts2中的视图redirect的url可以接收参数
9.一个请求来到Struts中的分析:一个请求来了的执行流程进行分析,struts2是自动支持分模块开发,并可以不同模块设置不同的url前缀,这是通过package的namespace来实现的;struts2是支持多种类型的视图;struts2的视图地址可以是动态的,即视图的名称是支持变量方式的,举例,论坛发帖失败后回来还要传递boardid。视图内容显示方面:它的标签用ognl,要el强大很多,在国际化方面支持分模块管理,两个模块用到同样的key,对应不同的消息
二、Hibernate的特点
1.标准的ORM框架,程序员不需要编写sql语句
2.优良的数据库无关系性,即使数据库发生了改变,也不需要再次编写代码
3.学习门槛高,需要对数据关系模型具有良好的基础,并且在配置ORM映射的时候,要考虑对象模型的权衡和性能
4.程序员不能自主的去对sql语句进行性能的优化
5.简单的hql语句,支持本地sql语句,同时支持qbc语句
三、Mybatis的特点
1.对JDBC轻量级的封装
2.简单容易易上手
3.支持sql语句映射,解除了sql语句和代码的耦合
4.支持ORM对象关系映射
5.在xml中支持动态SQL语句的配置
6.让程序员掌握SQL语句,能够方便优化SQL语句
四、Hibernate和Mybatis的区别
相同点:
1.都是JDBC轻量级的封装
2.都是持久层框架
3.都是非入侵式框架,即轻量级框架
不同点:
1.Hibernate是标准的ORM框架,Mybatis不是完全的ORM框架
2.Hibernate是将实体对象与数据库中的二维表进行对应映射,Mybatis是将sql语句进行映射
3.Hibernate的入门槛高,不需要程序员编写代码,自动生成SQL代码,但是,对SQL代码优化和修改较为困难,Mybatis的入门较低,需要程序员编写SQL代码,对SQL代码优化较为便捷
4.Hibernate具有良好的数据库无关性,更换数据库较为方便,Mybatis更换数据库很困难
5.Hibernate适用于需求变化不多的中小型项目(后台管理系统项目),Mybatis适用于需求变化较多的项目(互联网项目)
五、Spring的核心、IOC和AOP
1.IoC :Inversion of Control 控制反转
以前的开发模式中,在一个类中使用其他类对象的时候都是采用new的方式直接获取,或者高级一点是通过反射的方式的得到需要的对象实例。这就造成了程序的 耦合度非常高,一个类的运行,严重依赖于其他的类。并且还会出现程序中硬编码的情况。
而spring中的IoC很好的解决了该问题,我们把创建对象的权利交给Spring容器去管理,这就是IoC,再把Spring容器创建好的对象注入至调用者(DI)。从而降低了程序的耦合度。
依赖注入方式有:构造函数注入,set方法注入(属性注入),工厂方式注入等等。
2.AOP: Aspect Oriented Programming 面向切面编程。
我们之前学习的java语言,号称是面向对象编程,它有自己的优势。但是也存在着一些弊端。
举例说明,在实际开发中,我们都会有一根业务主线,即客户(甲方)的需求。而程序员要做的就是围绕业务主线上的需求,实现功能(实现功能的方法我们叫做业务核心方法)。但是不可避免的,会有一些功能与业务主线没有关系,却又不能不做,比如权限的控制,事务的控制,日志的记录等等,这些功能绝大多数时候和业务主线没有关系,但是却和很多业务核心方法交织在一起,使我们的开发变得麻烦,并且冗余代码增多。
而spring的提供了一种思想,把这些和业务主线没有关系的功能剥离出来,而在需要使用这些公共方法时,适当地把它切入到我们的代码中去,使程序员在开发时,把更多的精力放在理解需求,实现业务核心功能上,并且让我们的代码变得简洁。这种思想就是面向切面编程。
Spring实现面向切面编程使用的是动态代理技术,并且会根据实际情况来选择使用基于子类的还是基于接口的动态代理。
这些都是小编一个字一个字打上去的,点个赞吧!!!