javaweb三大框架SSH

1.MVC三层架构:模型层,控制层和视图层。模型层,用Hibernate框架让来JavaBean在数据库生成表及关联,经过对JavaBean的操做来 对数据库进行操做;控制层,用Struts框架来链接数据层和视图层的,接收、处理、发送数据并控制流程;视图层,用JSP模板把页面展示给用户以及提供 与用户的交互。而Spring框架粘合了Hibernate和Struts,透明的管理了整个架构,提供IOC容器使代码松耦合以及AOP框架的切面功能 等等。php

JAVA三大框架的各自做用 html

  hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就是Model;
  struts提供的丰富标签是用于显示层View;同时struts也充当了实现Control的功能(不论是Struts1,仍是Struts2),接收参数,视图分发。
  Spring是用于下降层与层间耦合度的,就是全部的类均可以由spring统一建立,用时只需注入便可(IOC)
  从功能上来讲,hibernate为M,struts2 为V,也能够为C,spring能够为C。
  但大多数项目中,hibernate为M,struts2 为V+C,spring用来帮助管理类以及实现一些业务无关功能,如日志记录等,大多数都是用struts来作C的。
1、Spring
   Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法而且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器做为构建完关注全部架构层的完整解决方案方面是独一无二的。 Spring提供了惟一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率而且减小了可能的错误。Spring的数据访问架构还集成了Hibernate和其余O/R mapping解决方案。Spring还提供了惟一的事务管理抽象,它可以在各类底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其余企业事务--若是你须要--还能实现你本身的aspects。这个框架足够强大,使得应用程序可以抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了能够和IoC容器集成的强大而灵活的MVC Web框架。
 
2、STRUCTS
  Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。因为Struts能充分知足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再本身编码实现全套MVC模式,极大的节省了时间,因此说Struts是一个很是不错的应用框架。
 
3、Hibernate
  Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了很是轻量级的对象封装,使得Java程序员能够为所欲为的使用对象编程思惟来操纵数据库。 Hibernate能够应用在任何使用JDBC的场合,既能够在Java的客户端程序实用,也能够在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate能够在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate能够在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。映射很简单呀,就是页面的映射呀,多作点练习就会了。
  JAVA三大框架用来作WEB应用。 struts主要负责表示层的显示 spring利用它的IOC和AOP来处理控制业务(负责对数据库的操做) hibernate主要是数据的持久化到数据库。在用jsp的servlet作网页开发的时候有个web.xml的映射文件,里面有个mapping的标签就是用来作文件映射的。 当你在浏览器上输入URL地址的时候,文件就会根据你写的名称对应到一个java文件,根据java文件里编写的内容显示在浏览器上,就是一个网页,因此网页名字是随便写的,随便起的名字,无论你起的是.php .jsp .do仍是其余的什么都对应这个java文件,这个java文件里的代码进行什么操做就干什么,显示一句话仍是链接数据库仍是跳转到其余页面等等,这个java文件把数据进行封装起到安全和便于管理的做用。其实这个java文件编译过来是.class的一个字节码文件,没有那么一个相似html嵌入标签和代码的网页文件。他与jsp文件区别就是jsp把代码嵌入到html标签中。 还有servlet或者struts中html表单的action中的提交名称对应一个java文件,struts通常是.do的,都和上面同样是映射。
1. 谈谈你mvc的理解
  MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
  MVC中的模型、视图、控制器它们分别担负着不一样的任务。
  视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。
  模型: 模型表示业务数据和业务处理。至关于JavaBean。一个模型能为多个视图提供数据。这提升了应用程序的重用性
  控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。
  而后根据处理的结果调用相应的视图来显示处理的结果。
  MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并经过视图呈现给用户。
 
Struts
1. struts1.2和struts2.0的区别?如何控制两种框架中的单例模式?
  struts1.2和struts2.0的对比
  a、Action类:
    struts1.2要求Action类继承一个基类。struts2.0 Action要求继承ActionSupport基类
  b、线程模式
    struts1.2 Action是单例模式的而且必须是线程安全的,由于仅有一个Action的实例来处理全部的请求。
    单例策略限制了Struts1.2 Action能作的事情,而且开发时特别当心。Action资源必须是线程安全的或同步的。
    struts2.0 Action为每个请求产生一个实例,所以没有线程安全问题。
  c、Servlet依赖
    struts1.2 Action依赖于Servlet API,由于当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execut方法。
    struts2.0 Action不依赖于容器,容许Action脱离容器单独测试。若是须要,Struts2 Action仍然能够访问初始的Request和Response。
    可是,其余的元素减小或者消除了直接访问HttpServletRequest和HttpServletResponse的必要性。
  d、可测性
    测试struts1.2 Action的一个主要问题是execute方法暴露了Servlet API(这使得测试要依赖于容器)。一个第三方扩展:struts TestCase
    提供了一套struts1.2的模拟对象来进行测试。
    Struts2.0 Action能够经过初始化、设置属性、调用方法来测试,“依赖注入”也使得测试更容易。
2. 项目中为何使用SSH
  1. 使用Struts是由于struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运用,则能大大提升开发效率。
  2. 使用Hibernate:由于hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。
  3. 使用Spring:由于spring基于IoC(Inversion of Control,反向控制)和AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,由于它模块化的很好,容许你根据本身的须要选择使用它的某一个模块;采用IoC使得能够很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等 
 
3. struts与spring是如何继承的
  不懂题目之意:是不是说的struts的action都继承自org.apache.struts.action.Action而Spring中的继承就不清楚了。
 
4. struts如何实现国际化
  如下以两国语言(中文,英文)为例:
  1. 在工程中加入Struts支持
  2. 编辑ApplicationResource.properties文件,在其中加入要使用国际化的信息, 例如: 
    lable.welcome.china=Welcome!!!
  3. 建立英文资源文件ApplicationResource_en.properites
  4. 建立临时中文资源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中国欢迎您!
  5. 对临时中文资源文件进行编码转换。可使用myeclipse的插件,也能够在dos下执行:
    native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties
  6. 在jsp中加入struts的bean标记库 <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
  显示信息: 
    能够在struts-config.xml文件中定义多个资源包,而每一个资源包可以使用key属性指定包的名称。
 
5. struts2.0的经常使用标签
  1. 往action里传值:
  2. 显示标签 property 用于输出指定值:
  3. 用于从页面往action中(user)的对象内传值:
  4. 判断 用于在页面中判断指定数据 …. …. 
  5. 迭代用于将List、Map、ArrayList等集合进行循环遍历
  6. URL地址标签,用于生成一个URL地址,能够经过URL标签指定的子元素向URL地址发送请求参数
  7. 超连接 通常和标签一块儿使用,用于带多个参数。“>超连接
  8. set标签,用于将某个值放入指定的范围内。例如application,session等。
 
6. struts中怎么配置form-bean、action、tiles
  此处配置的是struts1.2的
  form-bean配置:(在配置文件struts-config.xml中):
  name: 指定form的名字; type指定form的类型:包名+类名;
  action配置:(在配置文件struts-config.xml中)
  attribute=""
  input=""
  name=""
  parameter=""
  scope="request"
  type=""
  >
  path:请求Action的名字; attribute:form的名字,与form-bean中的name对应; input:输入页的路径;
  name:若是配置了attribute,name不起做用,与attribute同样; parameter:使用分发Action时,指定调用分发
  Action中的方法名;
  scope:Action的范围; type:Action的类型:包名+类名;
 
7.什么是IOC(DI),有什么好处(java project 的spring IOC模拟)
  IOC(Inversion Of Control,控制反转):一个类的某个属性须要使用时,须要有本类本身初始化。而在spring类的某些属性不用本身初始化而交给了spring来管理。这样的转换就是IOC思想。Spring的IOC思想是,spring的IOC容器在初始化的时候就根据配置对相应的对象进行初始化,并放在容器中。同时根据配置对相应类的属性进行初始化。也就是DI(Dependency Injection依赖注入),至此类的初始化不须要类自己负责初始化而交给了spring容器。
  IOC的好处是:下降耦合性:某个类的一个属性,之前是该类本身控制,而引人Spring后,这个类的属性由Spring控制。
  Spring IOC的模拟所作的事情是:在xml文件配置好相应的bean,设置注入关系。在解析xml时候对bean进行初始化同时对相应属性进行注入。
 
8.什么是AOP?
 
两种注入方式:
 
  a) 使用Annotation
  b) 使用xml
  面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
    1.面向切面编程提供声明式事务管理
    2.spring支持用户自定义的切面
 
  面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
  AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程当中的步骤进行抽象,从而得到步骤之间的逻辑划分。
  aop框架具备的两个特征:
    1.各个步骤之间的良好隔离性
    2.源代码无关性 
 
9.DAO层采用JdbcTemplate操做数据,如何在Service层控制事务?
  DAO层采用JdbcTemplate进行数据库操做。 
  Service层调用DAO层方法。 
  因为一个Service方法可能须要调用多个DAO对象的方法,须要在Service层进行事务控制。 
  因为一些缘由,须要采用编程式事务(现使用TransactionTemplate)。 
  但是存在一个问题: 
    只有当建立TransactionTemplate对象的DataSourceTransactionManager使用的DataSource对象和DAO对象建立JdbcTemplate对象使用的DataSource是同一个对象时才能在transactionTemplate.execute()方法中控制事务。